编程将2字节十六进制数转换为5位ASCII码表示的十进制数

要求:在3500H-3501H单元存放被转换的十六进制数(如00AAH),转换结果存放到3510H-3514H单元中。

;设采用x86汇编语言
;若用ARM 或51单片机等可做参考
;设:低位字节放在3500h中,高位字节放在3501h中
;转换结果的十进制数 高位在前:3510h放最高位,3514h放最低位
;段寄存器设定好
mov cx,3510h ;结果存放指针
mov ax,(3500h)
mov bx,10000d ;2字节数小于70000
xor dx,dx
div bx ;余数在dx中
add al,30h
mov (cx),al ;十进制最高位
inc cx
mov ax,dx
mov bx,1000d
xor dx,dx
div bx ;余数在dx中
add al,30h
mov (cx),al ;十进制次高位
inc cx
mov ax,dx
mov bx,100d
xor dx,dx
div bx ;余数在dx中
add al,30h
mov (cx),al ;十进制第3位
inc cx
mov al,dl
mov bl,10d
div bl ;余数在ah中
add al,30h
mov (cx),al ;十进制第4位
inc cx
add ah,30h
mov (cx),ahl ;十进制最低位

;这样做,实际运行所需的时间较短追问

十分感谢。能把完整的程序写给我吗?我是个初学者。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-25
程序简单,可在DEBUG下直接操作:

-U100 121
0AFA:0100 A10035 MOV AX,[3500]
0AFA:0103 31C9 XOR CX,CX
0AFA:0105 31D2 XOR DX,DX
0AFA:0107 BB0A00 MOV BX,000A
0AFA:010A F7F3 DIV BX
0AFA:010C 52 PUSH DX
0AFA:010D 41 INC CX
0AFA:010E 3D0000 CMP AX,0000
0AFA:0111 75F2 JNZ 0105
0AFA:0113 BB1035 MOV BX,3510
0AFA:0116 5A POP DX
0AFA:0117 80C230 ADD DL,30
0AFA:011A 8817 MOV [BX],DL
0AFA:011C 43 INC BX
0AFA:011D E2F7 LOOP 0116
0AFA:011F 90 NOP
0AFA:0120 CD20 INT 20
-

-N5.COM
-RCX
CX 0000
:22
-W
Writing 00022 bytes
-RIP
IP 0100
:
-D3500 L2
0AFA:3500 69 6C il
-D3510 L5
0AFA:3510 65 32 0D 0A 52 e2..R
-G

Program terminated normally
-D3510 L5
0AFA:3510 32 37 37 35 33 27753
-

显然,6C69H=27753D本回答被提问者和网友采纳
相似回答