;已知数组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