;程序功能:把寄存器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 模式?