2012-04-12 126 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