当前位置: 代码迷 >> 汇编语言 >> ,帮忙诊断!
  详细解决方案

,帮忙诊断!

热度:6674   发布时间:2013-02-26 00:00:00.0
高手请进,帮忙诊断!!!
;程序功能:把寄存器BX的内容按十进制有符号数显示出来  
;入口参数:BX  
;出口参数:无,只有显示信息  
;算法描述:   1、定义6个字节的存储单元
;2、先判断BX是否小于零,如果是,则先显示负号 '- ',再取BX的绝对值;
;3、采用除10,得余数的方法,从低位向高位求出每位十进制位;
;4、输出数据的字符串。  
.model   small
.stack   128

.data  
DB   5   DUP( '0 '),0ah,0dh, '$ ';0ah、0dh:换行、回车  
.const
    BXDATA     equ   1234H
.code
                ;ASSUME   DS:SubData
PUSH   DS
PUSH   DX
PUSH   CX
PUSH   AX
MOV   AX,@data   ;取子程序所用的数据区段地址  
MOV   DS,   AX  
MOV   BX,1234H
CMP   BX,   0  
JGE   next  
MOV   DL,   '- '  
MOV   AH,   2  
INT   21H   ;显示负号 '- '  
NEG   BX   ;求-BX,使其值为正数  
next:   MOV   SI,   4   ;什么意思呢?(ds)+4
MOV   AX,   BX  
MOV   CX,   10D  
again:   XOR   DX,   DX  
IDIV   CX   ;DX存放余数,AX存放商  
ADD   DL,   '0 '   ;数字转为字符
MOV   [SI],   DL   ;(ds)*16+(si)
DEC   SI  
JGE   again  
XOR   DX,   DX   ;DX=0
MOV   AH,   9  
INT   21H   ;调用中断21的功能9,显示DS:DX指向的字符串  
POP   AX  
POP   CX  
POP   DX  
POP   DS
MOV   AX,4C00H   ;下两条指令相当于.exit
INT   21H
END  


上面这个程序的结果为什么不能在屏幕显示出来???????

------解决方案--------------------------------------------------------
不会吧, 我试过了是正常的. 或者试试纯 dos 模式?
  相关解决方案