已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。 ;编制程序,把A与B交集的整数存放在C中

;已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。
;编制程序,把A与B交集的整数存放在C中
DATA SEGMENT
A  DB 0,1,2,3,4,5,6,7,8,9,11,12,13,14,15
COUNT1 DW $-A
B  DB 9,8,7,6,5,4,3,2,1,0,20,19,18,17,16,15,14,13,12,11
COUNT2 DW $-B
C1 DB 15 DUP(?)
CRLF DB 0AH,0DH,'$'
DATA ENDS

STACK SEGMENT PARA STACK
      DW 128 DUP(?)
TOP   LABEL WORD
STACK ENDS

CODE SEGMENT
     ASSUME CS:CODE,SS:STACK,DS:DATA
MAIN PROC FAR
START:
     MOV AX,DATA
MOV DS,AX
 
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
 
LEA DI,C1
XOR BX,BX
 
MOV CX,COUNT1
L0: PUSH CX           ;保护外层循环CX
MOV AL,A[BX]      ;取A数组中元素,用于与B数组中每个元素进行比较
INC BX
MOV CX,COUNT2
LEA SI,B          ;每次在A中取数后,都要从B第一个元素起开始比较
L2: MOV DL,[SI]
CMP AL,DL
JE  L1
INC SI
LOOP L2
JMP L3            ;若B中没有与A相同元素,则继续外层循环
L1:     MOV [DI],AL       ;若找到相同元素则放入C1数组中
         INC DI
L3: POP CX
LOOP L0
 
MOV CX,15         ;以下为输出结果的验证
LEA DI,C1
L4: PUSH CX
         MOV AL,[DI]
INC DI
XOR CX,CX         ;CX用于记录余数个数
MOV BL,10
L5:     XOR AH,AH         ;高位清零
         DIV BL
PUSH AX           ;保存余数
INC CX
CMP AL,0          ;商为0则停止除10
JNE L5
 
L6: POP DX            ;输出数值,因为可能不是一位,所以要一位一位输出
         MOV DL,DH         ;余数原先是放在AX高位AH中的
ADD DL,30H
MOV AH,2
INT 21H
LOOP L6
 
MOV AH,9
LEA DX,CRLF       ;换行
INT 21H
 
POP CX
LOOP L4
 
MOV AH,4CH
INT 21H
CODE ENDS
MAIN ENDP
     END START

你可能感兴趣的:(汇编语言)