主题:程序有段不是很理解
按五位十进制的形式显示寄存器BX中的内容,如果BX的值小于0,则应在显示数值之前显示负号'-'。
例如:(BX)=123,显示:00123;(BX)=-234,显示:-00234;
解:
;子程序功能:把寄存器BX的内容按十进制有符号数显示出来
;入口参数:BX
;出口参数:无,只有显示信息
;算法描述: 1、定义6个字节的存储单元
2、先判断BX是否小于零,如果是,则先显示负号'-',再取BX的绝对值;
3、采用除10,得余数的方法,从低位向高位求出每位十进制位;
4、输出数据的字符串。
SubData SEGMENT
DB
5 DUP('0'), 0ah, 0dh, '$' ;0ah、0dh:换行、回车
SubData ENDS
DISPBX PROC
ASSUME DS:SubData
PUSH DS
PUSH DX
PUSH CX
PUSH AX
MOV AX, SubData ;取子程序所用的数据区段地址
MOV DS, AX
CMP BX, 0
JGE next
MOV DL, '-'
MOV AH, 2
INT 21H ;显示负号'-'
NEG BX ;求-BX,使其值为正数
next: MOV SI, 4 [color=FF0000];对于next是真的很不理解,请详细解释这三个句子[/color]
MOV AX, BX
MOV CX, 10D
again: XOR DX, DX
IDIV CX ;DX存放余数,AX存放商
ADD DL, '0' ;[color=FF0000]这句往下到jge的三个句子是什么意思[/color]
MOV [SI], DL
DEC SI
JGE again
XOR DX, DX
MOV AH, 9
INT 21H
POP AX
POP CX
POP DX
POP DS
RET
DISPBX ENDP
例如:(BX)=123,显示:00123;(BX)=-234,显示:-00234;
解:
;子程序功能:把寄存器BX的内容按十进制有符号数显示出来
;入口参数:BX
;出口参数:无,只有显示信息
;算法描述: 1、定义6个字节的存储单元
2、先判断BX是否小于零,如果是,则先显示负号'-',再取BX的绝对值;
3、采用除10,得余数的方法,从低位向高位求出每位十进制位;
4、输出数据的字符串。
SubData SEGMENT
DB
5 DUP('0'), 0ah, 0dh, '$' ;0ah、0dh:换行、回车
SubData ENDS
DISPBX PROC
ASSUME DS:SubData
PUSH DS
PUSH DX
PUSH CX
PUSH AX
MOV AX, SubData ;取子程序所用的数据区段地址
MOV DS, AX
CMP BX, 0
JGE next
MOV DL, '-'
MOV AH, 2
INT 21H ;显示负号'-'
NEG BX ;求-BX,使其值为正数
next: MOV SI, 4 [color=FF0000];对于next是真的很不理解,请详细解释这三个句子[/color]
MOV AX, BX
MOV CX, 10D
again: XOR DX, DX
IDIV CX ;DX存放余数,AX存放商
ADD DL, '0' ;[color=FF0000]这句往下到jge的三个句子是什么意思[/color]
MOV [SI], DL
DEC SI
JGE again
XOR DX, DX
MOV AH, 9
INT 21H
POP AX
POP CX
POP DX
POP DS
RET
DISPBX ENDP