8086彙編 段暫存器

2022-05-17 05:22:57 字數 2410 閱讀 6409

段暫存器存放記憶體中不同位址段的儲存,專門的暫存器存放段位址來提供使用。

8086cpu中主要使用4個段暫存器下面會有說明。

將段位址放在 ds中用mov、add、sub等訪問記憶體單元的指令時,cpu將我們定義的資料段中的內容當作資料段來訪問;

將段位址放在 cs中,將段中第一條指令的偏移位址放在ip中cpu將執行我們定義的**段中的指令;

將段位址放在ss中,將棧頂單元的偏移地置放在 sp 中cpu在需要進行棧操作(push、pop)時,就將我們定義的棧段當作棧空間來用。

1、暫存器說明

cs **段暫存器、專門儲存**指令位址的暫存器、它與指標暫存器ip配合使用。

2、操作符start 

start:定義指令開頭

功能:程式載入後,cs:ip指向要執行的第一條指令在start處!

;

定義程式第一行**指令

start:

mov bx,0

...

mov ax,0

;程式結束

end staret

2、操作符offset

assume cs:

codeseg

codeseg segment

;start與s都為標號

;相當於 mov ax,0

start:

movax,offset start

;相當於mov ax,3

s:mov

ax,offset s

codeseg ends

end start

3、nop指令

使用:nop

功能: nop的機器碼佔乙個位元組,起「佔位」作用

assume cs:

codeseg

codeseg segment

..;佔位乙個位元組

nopcodeseg ends

end

1、案例

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、賦值使用

;

ax 存放資料記憶體位址

movax, 123bh

;將 ax 記憶體位址 存入ds資料段

movds, ax

;di 存入偏移位址0

mov di, 0

1、暫存器說明

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個段,每段不超...