2012-10-04 62 views
2

我已經開始學習ASM,我不知道是什麼進AL使用MOV指令的這兩種不同方式之間的區別:有什麼區別 - MOV指令

第一:

MOV AL,5H 

第二:

MOV SI,5H 
MOV AL,[SI] 

回答

7

這兩個做不同的事情。

; let me use friendlier syntax; IMHO, lower case and 0x5 instead of 5h is more 
; readable in case of assembly 
mov al, 0x5 ; al = 0x5 

mov si, 0x5 ; si = 0x5 
mov al, [si] ; al = *si; that is, al is now what was in memory at address 0x5 

有關於x86彙編,將更好地解釋概念和語法您輕鬆維基:x86 Assembly。大會通常是簡單的語言,但最好只遵循關於它的教程/書籍,首先完全理解語法,然後 - 然後 - 然後 - 跳入狂野的大會閱讀和寫作世界。

此外,對於其他資源,你可以看看here

2
  1. 只需設置AL寄存器的值至5H
  2. 首先它將SI寄存器設置爲5H 然後它將由SI解除引用的值移動到AL(即,無論在內存地址5H現在移到AL中)。

您也可以申請使用像SI索引寄存器時,例如一個非零的基本偏移:

MOV AL,[BX + SI] 

後BX首先設置到適當的基本偏移地址。

+0

我不認爲使用'[si]'尋址表單比任何其他間接尋址表單都更加不尋常。隱含地使用'[si]',例如。在'scas'和'cmps'中,在'rep scasb/rep scasw/rep scasd'或'rep cmpsb/rep cmpsw/rep cmpsd'結束後,您可能需要使用'[si] '(例如,在字符串處理或正則表達式代碼中)。 – nrz

+0

我會對此表示贊同 - 對我來說已經有一段時間了:) – StuartLC