8086匯編 段寄存器


8086匯編 段寄存器

段寄存器存放內存中不同地址段的存儲,專門的寄存器存放段地址來提供使用。

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

三種段

數據段

將段地址放在 DS中用mov、add、sub等訪問內存單元的指令時,CPU將我們定義的數據段中的內容當作數據段來訪問;

代碼段

將段地址放在 CS中,將段中第一條指令的偏移地址放在IP中CPU將執行我們定義的代碼段中的指令;

棧段

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

CS - 代碼段寄存器

一、說明

1、寄存器說明

CS 代碼段寄存器、專門存儲代碼指令地址的寄存器、它與指針寄存器IP配合使用。

  • 功能:CS:代碼段地址存儲
  • 功能:IP:代碼段偏移地址存儲

2、操作符start 

start:定義指令開頭
功能:程序加載后,CS:IP指向要執行的第一條指令在start處!

; 定義程序第一行代碼指令
start: mov bx,0
    ...
    mov ax,0
; 程序結束
end staret

2、操作符offset

格式:offset 標號
功能:取得標號的偏移地址

assume cs:codeseg
codeseg segment
; start與s都為標號
; 相當於 mov ax,0
start: mov ax,offset start 
      ; 相當於mov ax,3
      s: mov ax,offset s       
codeseg ends
end start

3、nop指令

使用:nop
功能: nop的機器碼占一個字節,起“占位”作用

assume cs:codeseg
codeseg segment 
       ..
      ; 占位一個字節
      nop
codeseg ends
end

二、解析

1、案例

  CS與IP根據地址計算得出內存地址,通過地址總線傳輸查找到內存地址中對應的3字節大小的指令,在通過數據總線取出發送給控制器執行,結果修改AX寄存器值。當任務執行完成后由於這條指令為3字節,IP的寄存器會加3、再次合成內存地址后會依次執行剩下指令。

 2、案例

  (1)從CS:IP指向內存單元讀取指令,讀取的指令進入指令緩沖器;(2)IP = IP + 所讀取指令的長度,從而指向下一條指令;(3)執行指令。 轉到步驟 (1),重復這個過程。

DS - 數據段寄存器

一、說明

1、寄存器說明

DS 數據段寄存器、專門存儲數據內存地址的寄存器、它與DI變指寄存器配合使用。

  • 功能:DS:數據段地址存儲
  • 功能:DI:數據段偏移地址存儲
  • 功能:BX:可用於數據段偏移地址存儲、默認指向DS的通用寄存器。

2、定義數據大小

  dw:定義字型數據
    使用:dw 字單元數據1,字單元數據2
  db:定義字節型數據
    使用:db 字節型數據1,字節型數據2
  dd:定義雙字型數據
    使用:dd 雙字型數據1,雙字型數據2

3、dup 定義數據大小

功能:dup和db、dw、dd 等數據定義偽指令配合使用,用來進行數據的重復

dup的使用格式:

  • db 重復的次數 dup (重復的字節型數據)
  • dw 重復的次數 dup (重復的字型數據)
  • dd 重復的次數 dup (重復的雙字數據)

二、使用

1、賦值使用

; ax 存放數據內存地址
mov ax, 123BH
; 將 ax 內存地址 存入ds數據段
mov ds, ax
; di 存入偏移地址0
mov di, 0

SS - 棧段寄存器

一、說明

1、寄存器說明

SS 段段寄存器、專門存儲棧數據的寄存器、它與BP變指寄存器配合使用。

  • 功能:SS:數據段地址存儲
  • 功能:BP:數據段偏移地址存儲

二、使用

https://www.cnblogs.com/xiangsikai/p/12467831.html

ES - 附加段寄存器

一、說明

ES 附加段寄存器、專門配合數據內存地址的寄存器、它與DI變指寄存器配合使用。

通常DS與SI取得數據的源地址、ES與DI取得數據的目標地址

  • 功能:ES:數據段地址存儲
  • 功能:DI:數據段偏移地址存儲

二、使用

說明:由於出現了兩個段寄存器,如果想確認是哪個就需要加入段前綴 mov es:[bx],dl

; 使用附加段寄存器
assume cs: code
code segment
    moy ax 0ffffh
    moy ds, ax
    moy ax. 0020h
    mov es, ax
    mov bx, 0
    mov Cx. 12
   s: mov dl, [bx]
    mov es: [bx, d
    inc bx
    loop s
    moy ax, 4c00h
    int 21h
code ends
end

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM