2011-05-15 82 views
0

有一個彙編語言指令:意義的彙編語句

add dl, 48d 

這是什麼彙編語句的確切目的和意義?當我寫代碼

mov al, 02 
mov dl, al 
mov ah, 02 
int 21h 

它給出的輸出爲b。但是,當我寫,

mov al, 02 
mov dl, al 
add dl, 48d 
mov ah, 02 
int 21h 

它給出2作爲輸出。這個陳述究竟是做什麼的?

+0

究竟是什麼你不瞭解它? – Mat 2011-05-15 10:54:52

+0

我想知道我們在哪裏使用這個語句,它的輸出是什麼或者它對輸出的影響是什麼? – sadia 2011-05-15 10:57:46

回答

4

看起來像x86彙編器。該命令將(E)DX寄存器的低8位內容加48(十進制48)。見x86 general purpose registers,但真正的解釋請參閱x86 Wikipedia page, section "x86 registers"

在x86上,您可以訪問寄存器的某些部分。歷史上,這樣做是爲了使8086(16位寄存器)儘可能與8080(8位寄存器)兼容。然後,該方案在具有32位寄存器的80286/80386上擴展,然後再在AMD x64模式下擴展到64位。

因此,您可以將整個32位寄存器作爲EDX(處於保護模式時)和低16位寄存器作爲DX訪問。現在這個16位部分(DX)被進一步分成兩部分:高8位被訪問爲DH,低8位被訪問爲DL。

編輯的問題進行修改後:

讓我們解釋引用代碼從後到前:年底,中斷21hex被稱爲其在IBM PC兼容系統負責various DOS API calls。將8位寄存器AH設置爲2將導致執行字符輸出。要輸出的字符駐留在8位寄存器DL中。

所以在你的第一個例子中,ASCII character 02被打印出來,但是這是一個控制字符,因此輸出不應該是b你說出它不過是看不見的東西(02文本的開始)。第二個例子取2,然後加48,得到50(十進制)。這是字符2的ASCII碼。

我的上帝,我現在真的覺得老了...... 20年前我做過這些事情。

1

這很簡單。它將48位(十進制)加到8位寄存器DL