段暫存器存放記憶體中不同位址段的儲存,專門的暫存器存放段位址來提供使用。
8086cpu中主要使用4個段暫存器下面會有說明。
將段位址放在 ds中用mov、add、sub等訪問記憶體單元的指令時,cpu將我們定義的資料段中的內容當作資料段來訪問;
將段位址放在 cs中,將段中第一條指令的偏移位址放在ip中cpu將執行我們定義的**段中的指令;
將段位址放在ss中,將棧頂單元的偏移地置放在 sp 中cpu在需要進行棧操作(push、pop)時,就將我們定義的棧段當作棧空間來用。
1、暫存器說明
cs **段暫存器、專門儲存**指令位址的暫存器、它與指標暫存器ip配合使用。
2、操作符start
start:定義指令開頭
功能:程式載入後,cs:ip指向要執行的第一條指令在start處!
;2、操作符offset定義程式第一行**指令
start:
mov bx,0
...
mov ax,0
;程式結束
end staret
assume cs:3、nop指令codeseg
codeseg segment
;start與s都為標號
;相當於 mov ax,0
start:
movax,offset start
;相當於mov ax,3
s:mov
ax,offset s
codeseg ends
end start
使用:nop
功能: nop的機器碼佔乙個位元組,起「佔位」作用
assume cs:1、案例codeseg
codeseg segment
..;佔位乙個位元組
nopcodeseg ends
end
cs與ip根據位址計算得出記憶體位址,通過位址匯流排傳輸查詢到記憶體位址中對應的3位元組大小的指令,在通過資料匯流排取出傳送給控制器執行,結果修改ax暫存器值。當任務執行完成後由於這條指令為3位元組,ip的暫存器會加3、再次合成記憶體位址後會依次執行剩下指令。
2、案例
(1)從cs:ip指向記憶體單元讀取指令,讀取的指令進入指令緩衝器;(2)ip = ip + 所讀取指令的長度,從而指向下一條指令;(3)執行指令。 轉到步驟 (1),重複這個過程。
1、暫存器說明
ds 資料段暫存器、專門儲存資料記憶體位址的暫存器、它與di變指暫存器配合使用。
2、定義資料大小
dw:定義字型資料
使用:dw 字單元資料1,字單元資料2
db:定義位元組型資料
使用:db 位元組型資料1,位元組型資料2
dd:定義雙字型資料
使用:dd 雙字型資料1,雙字型資料2
3、dup 定義資料大小
功能:dup和db、dw、dd 等資料定義偽指令配合使用,用來進行資料的重複
dup的使用格式:
1、賦值使用
;1、暫存器說明ax 存放資料記憶體位址
movax, 123bh
;將 ax 記憶體位址 存入ds資料段
movds, ax
;di 存入偏移位址0
mov di, 0
ss 段段暫存器、專門儲存棧資料的暫存器、它與bp變指暫存器配合使用。
通常ds與si取得資料的源位址、es與di取得資料的目標位址
說明:由於出現了兩個段暫存器,如果想確認是哪個就需要加入段字首 mov es:[bx],dl
;使用附加段暫存器
assume cs:
code
code segment
moy ax 0ffffh
moy ds, ax
moy ax. 0020h
moves, ax
mov bx, 0
mov cx. 12
s:mov
dl, [bx]
moves:
[bx, d
incbx
loop s
moy ax, 4c00h
int21h
code ends
end
彙編暫存器 8086
一 組合語言中,為什麼si和di不能同時使用彙編 其實你可以想一下,這兩個暫存器的意思,si源變址暫存器,di目地變址暫存器,既然是變址暫存器,那麼他們肯定是在某個位址的基礎上進行偏移變化,由此我們就得出了需要基址暫存器。你要是把這兩個暫存器同時使用,那你位址變化的基址都沒有,你該怎麼變化呢?你在誰...
8086彙編暫存器
一 組合語言中,為什麼si和di不能同時使用彙編 其實你可以想一下,這兩個暫存器的意思,si源變址暫存器,di目地變址暫存器,既然是變址暫存器,那麼他們肯定是在某個位址的基礎上進行偏移變化,由此我們就得出了需要基址暫存器。你要是把這兩個暫存器同時使用,那你位址變化的基址都沒有,你該怎麼變化呢?你在誰...
彙編2 段暫存器
8086cpu有20根位址線,最大可定址記憶體空間為1mb。而8086的暫存器只有16位,指令指標 ip 和變址暫存器 si di 也是16位的。用16位的位址定址1mb空間是不可能的。所以就要把記憶體分段,保證0000h ffffh 能將整個段尋遍 也就是把1mb空間分為24,即16個段,每段不超...