-1

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

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

004

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

我怎样才能让它打印在屏幕上?

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

4

1 回答 1

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 服务(负责屏幕),甚至直接访问视频电路等...

于 2012-04-12T20:16:28.603 回答