汇编将内存中的16进制数转为十进制输出

来源:百度知道 编辑:UC知道 时间:2024/07/04 20:06:51
题目是计算2+4+6+···+200,并将答案以十进制显示
ASSUME CS:CODE
DATA SEGMENT
MYDATA DD 50 DUP(0)
CODE SEGMENT
START:MOV AX,DATA
MOV DS,AX
MOV CX,5
MOV SI,2
MOV DI,OFFSET MYDATA
LP: ADD WORD PTR DS:[DI],SI
ADD SI,2
LOOP LP

MOV AH,4CH
INT 21H
CODE ENDS
END START
在这段代码后DS的首两个字节为:74,27。这个结果是16进制的,但不知道怎么转换成10进制输出。10进制下答案为10100。请高手指教!
用十进制加法指令DAA的话只能使存在内存里的数字看起来是十进制的数值,但输出的时候是按ASC码输出的。比如某字节单元存的是31,怎样把“31”输出到屏幕上?

DATAS SEGMENT
STR DB 10 DUP(0)
DATAS ENDS

STACKS SEGMENT
DW 100 DUP(0)
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV DX,0
MOV CX,100
AG: ADD DX,CX
ADD DX,CX
LOOP AG
MOV SI,OFFSET STR
ADD SI,4
MOV [SI+1],"$"
MOV AX,DX
MOV CX,5
AG1:MOV DX,0
MOV BX,10
DIV BX
PUSH DX
ADD DL,30H
MOV [SI],DL
DEC SI
POP DX
LOOP AG1
MOV DX,SI
INC DX
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START

直接用十进制加法调整指令嘛,最后得到的结果自然就是十进制的了……

这个相差30嘛就每个都加30显示的时候不就是十进制中的数字了……

DATAS SEGMENT
decimal db 10 dup (?)
DATAS ENDS

STACKS SEGMENT
db 64 dup("$")
STACKS ENDS

CODES SEGM