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