汇编语言程序设计 - 比较数组ARRAY中的三个16位补码数,都不相等显示0,两个相等显示1,三个相等显示2

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值