所以說,我有一個寄存器EBX這個值:30303420在寄存器轉換爲十進制/十六進制值,以ASCII
我要轉換的是並打印出相應的ASCII值。所以它應該打印出來
30 == 0
30 == 0
34 == 4
20 == space character.
我將如何得到這在屏幕上打印?
這是使用匯編代碼的80x86體系結構。
所以說,我有一個寄存器EBX這個值:30303420在寄存器轉換爲十進制/十六進制值,以ASCII
我要轉換的是並打印出相應的ASCII值。所以它應該打印出來
30 == 0
30 == 0
34 == 4
20 == space character.
我將如何得到這在屏幕上打印?
這是使用匯編代碼的80x86體系結構。
那麼,你的問題有幾個不清楚的細節。
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服務(負責屏幕),甚至直接訪問視頻電路等等等等。 ...
取決於您要使用的操作系統和方法,您可以創建BIOS函數調用或調用庫函數,以便將其鏈接到此代碼或直接編程視頻卡等等這與彙編語言沒有多大關係。 – 2012-04-12 02:10:35
我不認爲你明白我在做什麼:/ – cj1098 2012-04-12 02:13:01
你沒有解釋你想要做什麼。你需要指定你的環境。 – 2012-04-12 02:34:24