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

 

posted @ 2020-03-11 12:14  kevin.Xiang  阅读(2358)  评论(0编辑  收藏  举报