汇编:从9个有符号数中找出最小数,并将最小数与负数的个数以十进制的形式显示到屏幕上

这学期开了汇编课,其痛苦不言而喻,各种寄存器各种使用方法各种限制各种奇奇怪怪的规则哭(学得好的大神求不喷)。。。在啥都还没搞明白的时候实验就来了,明明很简单的程序整整折腾了我一个星期!感觉逻辑怎么看都很对各种问人问老师无果后上网去问网友,最终才得以解决(感谢解答了我的疑惑的热心的网友,/鼓掌),整个一辛酸史。。特写此文章希望跟我做一样实验的同学有个参照微笑

.486
DATAS SEGMENT USE16
NUM DB -2,9,5,-4,10,22,8,4,7
MIN DB ? 
FUSHU  DB 0
DATAS ENDS
CODES SEGMENT USE16
    ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV CX,8
    MOV BX,OFFSET NUM
    MOV AL,BYTE PTR [BX]  ;AL装小数,BX装大数
    INC BX 		;bx指向下一个
    JMP LAST
AGAIN:
	MOV AL,BYTE PTR [BX] 	;将小数付给al
	JMP NEXT
LAST:    
	CMP [BX],AL 	;比较bx和al
	JL AGAIN		;若bx比al小则跳转
NEXT:
	INC BX
	LOOP LAST	
FINAL:
	MOV DH,AL
	CMP DH,0
	JG XIAN
	MOV  AH,2	;如果最小数是负数先输出‘-’
	MOV DL,'-'
	INT 21H
	NEG DH	;如果最小数是负数则将最小数取相反数
XIAN:
	ADD DH,30H
	MOV DL,DH	;输出al
	INT 21H
	MOV DL,32	;输出空格,方便查看
	INT 21H
	MOV BX,OFFSET NUM	;查找负数的个数
	MOV CX,9	;循环9次
AA:
	CMP BYTE PTR [BX],0
	JL COUNT
	JMP BB
COUNT:
	INC FUSHU
BB:
	INC BX
	LOOP AA
	ADD FUSHU,30H	;输出负数个数
	MOV DL,FUSHU
	INT 21H
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START
运行结果第一个数为最小数(目前只能显示(-10,10)的数,要显示范围以外的可以参照教程),第二个数为负数个数。

最后强调一件事情,也是导致我弄了那么久的罪魁祸首哭,重要的事情说三遍:DOS功能调用中的2号功能会影响AL寄存器的内容,DOS功能调用中的2号功能会影响AL寄存器的内容,DOS功能调用中的2号功能会影响AL寄存器的内容!!

第一次写汇编代码,很多不足望大大们多多包涵。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值