2012-04-12 282 views
-1

所以说,我有一个寄存器EBX这个值:30303420在寄存器转换为十进制/十六进制值,以ASCII

我要转换的是并打印出相应的ASCII值。所以它应该打印出来

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

我将如何得到这在屏幕上打印?

这是使用汇编代码的80x86体系结构。

+0

取决于您要使用的操作系统和方法,您可以创建BIOS函数调用或调用库函数,以便将其链接到此代码或直接编程视频卡等等这与汇编语言没有多大关系。 – 2012-04-12 02:10:35

+0

我不认为你明白我在做什么:/ – cj1098 2012-04-12 02:13:01

+2

你没有解释你想要做什么。你需要指定你的环境。 – 2012-04-12 02:34:24

回答

1

那么,你的问题有几个不清楚的细节。

1 - 如果你在EBX 30303420十六进制值,则有4个ASCII字符,正是 “004”,即:(?至极一个)

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

你没有任何十进制值,所以这里没有任何转换。如果你想在屏幕上显示ebx值,所以它显示“004”,那么你必须指定程序在哪个操作系统下运行,以便使用合适的服务。例如,如果你想使用老式的MS-DOS INT 21H功能,即可以在DOS窗口在Windows中运行,那么这部分做到这一点:

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

+0

你在哪里发现'rol'指令与'BL'一起旋转? – flyer 2013-11-12 23:53:45

+0

@flyer:也许在任何[x86 CPU架构](http://msdn.microsoft.com/en-us/library/windows/hardware/ff561502(v = vs.85).aspx)参考手册? 'bl:低8位的ebx' – Aacini 2013-11-13 00:40:02

+0

我现在看到了。不知怎的,这与'shld'指令混合在一起。 +1。 – flyer 2013-11-13 00:56:28