80x86汇编习题
题目描述:要求比较数组 ARRAY 中的三个 16 位补码数, 并根据比较结果在终端上显示如下
信息:
(1) 如果三个数都不相等则显示 0;
(2) 如果三个数有二个数相等则显示 1;
(3) 如果三个数都相等则显示 2。
思路:
1,把数字都放到寄存器上方便比较
2,比较第一和第二,第二和第三,第一和第三个数,总共比较三组,相等的话计数,不相等的话跳走
3,计数结果只能是“三个都不相同”,“有两个相同,一个不同”,“三个都相同”,也就是数值只能是0,2,3(注意,有两个相同,一个不同的时候,计数器是2)
3,计数器的内容和题目要求不一样,调整一下输出就好。如果三个不相等,就显示0,其他情况,显示计数器-1
DATAS SEGMENT
ARR DW 17,18,18
DATAS ENDS
STACKS SEGMENT
DW 100H DUP(?)
TOP LABEL WORD
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV AX,STACKS
MOV SS,AX
LEA SP,TOP ;初始化
LEA SI,ARR ;数组指针
MOV CX,0 ;计数器
MOV AX,[SI] ;第一个数放到AX
MOV BX,[SI+2] ;第二个数放到BX
MOV DX,[SI+4] ;第三个数放到DX
CMP AX,BX
JNE NEXT1 ;比较第一第二个数,不相等就跳
INC CX ;相等的话计数
NEXT1:
CMP AX,DX ;比较第一第三个数
JNE NEXT2
INC CX
NEXT2:
CMP BX,DX ;比较第二第三个数
JNE NUM
INC CX
NUM:
CMP CX,3 ;如果计数3次,证明3个数都相等,要减1才能显示要求的2
JL DISP ;如果不是3次,那就是实际的相等次数,1次相等或0次相等
DEC CX
DISP:
MOV DL,CL
ADD DL,30H
MOV AH,2
INT 21H
EXIT:
MOV AH,4CH
INT 21H
CODES ENDS
END START