assume cs:codesg
codesg segment
xjazz: mov ax, 2000h ;ax=2000h
mov ds, ax ;ds=ax=2000h
mov bx, 1000h ;bx=1000h
mov ax, [bx] ;將偏移位址1000處儲存的資料賦值給ax
;即將實體地址ds:1000處(即2000:1000處)儲存的值給ax
inc bx ;bx自增1,即bx++
inc bx ;兩次自增完成後bx=1002
mov [bx], ax ;將ax儲存的值賦值到實體地址ds:1002處
inc bx
inc bx
mov [bx], ax ;將ax儲存的值賦值到實體地址ds:1004處
inc bx ;bx++; bx=1005
mov [bx], al ;將al的值賦值給實體地址ds:1005
inc bx
mov [bx], al ;將al的值賦值給實體地址ds:1006
mov ax, 4c00h
int 21h
codesg ends
end xjazz
8086微機採用段位址+偏移位址的方式表示實體地址比如本例**現的實體地址(表示):2000:1000,2000:1002,2000:1004,2000:1005,2000:1006分別對應著實際實體地址的21000,21002,21004,21005,21006。
再詳細解釋一下就是冒號前面是段(基)位址,冒號後面是偏移位址,實際表示的實體地址就是把段位址乘以16加偏移位址,16進製制下的乘16就是進一位。
inc就是組合語言中的自增指令,相當於c/c++語言中的"++",這也是為什麼c/c++語言下++、–會比+1、-1快的原因,因為當執行自增,自減運算時有直接對應的彙編指令。
ps:作為常識應當知道,編譯器編譯高階語言寫成的程式時,是先將高階語言**翻譯成對應的彙編指令,再將彙編指令轉化成對應的機器碼執行。
8086CPU實體地址
8086cpu有20位位址匯流排,可以傳送20位位址,達到1mb定址能力,但8086cpu內部是16位,表現出來的定址能力只有64kb。8086cpu採用一種在內部用用兩個16位位址合成的方法來形成乙個20位的實體地址。cpu中的相關部件提供兩個16位位址,乙個為段位址,另乙個為偏移位址,位址加法器...
《組合語言》實體地址
段位址應該是乙個邏輯概念,從 組合語言 3.5資料段原文中 比如用123b0h 123b9h 這段記憶體空間來存放資料,我們就可以認為123b0h 123b9h這段記憶體是乙個資料段,它的段位址為123bh,長度為10個byte。從這裡看出段位址指的應該是乙個資料段的起始位置,在 彙編無言 2.7實...
組合語言 實體地址
你只要嘗試過飛,日後走路也會仰望天空,因為那是你曾經到過,並渴望回去的地方 今日語句 實體地址 我們知道,cpu訪問記憶體單元時,要給出記憶體單元的位址。所有的記憶體單元構成的儲存空間是乙個一維的線性空間,每乙個記憶體單元在這個空間中都有唯一的位址,我們將這個唯一的位址稱為實體地址。cpu通過位址匯...