一般說來,加方括號 [ ] 表示一種間接的取運算元方式,有點類似於c語言中的指標概念.
第一條指令 add al ,[si] 中,[si] 表示暫存器間接定址.
也就是說,與al中內容相加的加數,不是si暫存器的內容,而是以si的內容作為位址指標的記憶體運算元.
假設si的內容是1234h,這條加法指令,不是將1234h加到al裡(也加不了,資料型別不對),而是以1234h作為位址,從記憶體的資料段(ds所指)中,段內偏移位址為1234h的那個記憶體單元中取出乙個位元組的資料來,加到al中.
同樣的,第二條指令 mov [20h],al,是將al中的內容傳送到記憶體裡的乙個單元中去.這個單元的有效位址就是[20h].
這裡,加了方括號的20h,不是運算所用的資料,而是資料的位址.
===================
對問題補充的回覆:
al是不可能加方括號的.
8086彙編中,能加方括號的只有4個暫存器:si,di,bx,bp
常數也可以加方括號,比如 [020h]
另外,變數名可以加方括號,但與上面兩種情況不同,加了方括號的變數名,意義不變.
至於方括號內,可以出現bx+di,si+2這樣的表示式,這是一些不同的定址方式.
si 是暫存器定址
[si]是暫存器間接定址
[si+2]是相對的暫存器間接定址,又稱直接變址定址,它也可以寫成2[si]這樣的形式
[bx+si]是基址變址定址,也可寫成[bx][si]
[bx+si+20h]是相對的基址變址定址,可以寫成20h[bx][si]之類的形式,將20h換成變數名也可以.
彙編中的暫存器說明
組合語言和cpu以及記憶體,埠等硬體知識是連在一起的.這也是為什麼組合語言沒有通用性的原因.下面簡單講講基本知識 針對intel x86及其相容機 x86組合語言的指令,其操作物件是cpu上的暫存器,系統記憶體,或者立即數.有些指令表面上沒有運算元,或者看上去缺少運算元,其實該指令有內定的操作物件,...
彙編暫存器知識
一 32位cpu所含有的暫存器有 1 資料暫存器。4個 eax ebx ecx edx。2 變址暫存器 index register 2個 esi edi。3 指標暫存器 pointer register 2個 esp extended stack pointer ebp extended base...
彙編暫存器 8086
一 組合語言中,為什麼si和di不能同時使用彙編 其實你可以想一下,這兩個暫存器的意思,si源變址暫存器,di目地變址暫存器,既然是變址暫存器,那麼他們肯定是在某個位址的基礎上進行偏移變化,由此我們就得出了需要基址暫存器。你要是把這兩個暫存器同時使用,那你位址變化的基址都沒有,你該怎麼變化呢?你在誰...