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

来源:互联网 发布:电脑软件自己开 编辑:程序博客网 时间:2024/05/05 01:22

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

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

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

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




0 0
原创粉丝点击