将寄存器中的十进制/十六进制值转换为ascii

时间:2012-04-12 02:04:54

标签: string assembly ascii

所以说我在寄存器中有这个值ebx:30303420

我想转换它并打印出相应的ascii值。所以它应该打印出来

004

30  == 0
30  == 0
34  == 4
20  == space character.

如何在屏幕上打印?

这是80x86架构,使用汇编代码。

1 个答案:

答案 0 :(得分:1)

嗯,你的问题有一些不清楚的细节。

1-如果你在ebx中有30303420十六进制值,那么你有4个Ascii字符,恰好是“004”,即:

mov ebx,30303420H       ;is exactly the same than:
mov ebx,"004 "

你没有任何小数值(哪一个?),所以这里没有任何转换。

2-如果要在屏幕中显示该ebx值,因此显示“004”,则必须指定程序将在哪个操作系统下运行才能使用适当的服务。例如,如果你想使用旧式的MS-DOS INT 21H函数,它也可以在Windows的DOS窗口中运行,那么这段就可以了:

mov     cx,4        ;counter = 4 characters
    ;
next:
rol     ebx,8       ;rotate left EBX 1 byte: place next char in BL
mov     dl,bl       ;DL = char to show
mov     ah,2        ;AH = VIDEO OUTPUT function
int     21H         ;DOS kernel service Int: show the char
loop    next        ;repeat 4 times

但是,如果您的程序在Linux下运行,则显示ebx值的方法完全不同。此外,您的程序可能以不同的方式使用C库函数,或者是Windows兼容的程序,或使用BIOS INT 10H服务(负责屏幕),甚至直接访问视频电路等,等等...