汇编语言入门:段寄存器

接着上一篇“段的概念”,本篇详细讲解“段寄存器”


段寄存器的基本概念

段寄存器就是提供段地址的寄存器

8086CPU有4个段寄存器:CS、DS、SS、ES

当8086CPU要访问内存时,由着4个寄存器提供内存单元的段地址


CS和IP寄存器介绍

CS和IP是8086CPU中最重要的寄存器,它们指示了CPU当前要读取指令的地址

CS为代码段寄存器,IP为指令指针寄存器

mov AX, 0123H指令的过程图示:

汇编语言入门:段寄存器_第1张图片

说明:IP寄存器中存储偏移地址,每次读取指令后,IP的值增加相应的指令长度(如上图就是3,第三四次是2)而CS暂时不变;一个操作码占一个字节,后面的操作数具体而定,所以一条指令的大小也要具体而定;比如上面的图中,mov AX, 0123H由于0123H占2个字节,所以该指令共占(2+1)=3个字节长度

在8086CPU加电启动或复位后(即CPU刚开始工作时)CS和IP被设置为CS=FFFFH,IP=0000H

即在8086CPC机刚启动时,CPU从内存FFFF0H单元中读取指令执行

FFFF0H单元中的指令是8086PC机开机后执行的第一条指令


修改CS、IP寄存器的指令

修改AX寄存器的指令:mov AX, 23
mov指令可以改变8086CPU大部分寄存器的值,被称为传送指令

但是mov指令不能修改CS、IP寄存器的值!!

8086CPU为CS、IP提供了专门的指令来修改它们的值:jmp指令

jmp指令可以同时修改CS、IP的值:

jmp 2E3:3   ; 要得到物理地址套用公式即可
jmp 3:0B16  ; 3相当于0003

jmp指令还可以只修改IP寄存器的值:

mov ax, 200H
jmp ax  ; IP地址(偏移地址)转移到200H,类似于:mov IP, ax的意思

下图是一个“死循环”:
汇编语言入门:段寄存器_第2张图片
程序最后一直在左边的段循环……


代码段

对于8086PC机,在编程时可以根据需要将一组内存单元定义为一个段

汇编语言入门:段寄存器_第3张图片

这段长度为10个字节的指令,假设存放在从123B0H~123B9H的一组内存单元中,就可以认为123B0H~123B9H这段内存单元是用来存放这段代码的,是一个代码段,它的段地址为123BH,长度为10个字节

通过修改CS、IP的值让CPU来执行代码指令
(任意时刻,CS、IP指向的就是“指令”,这一点切记!)

最后小结:8086CPU的工作过程
1. 从CS: IP指向的内存单元读取指令,读取的指令进入指令缓冲器
2. IP指向下一条指令
3. 执行指令并重复步骤一(循环往复)

你可能感兴趣的:(汇编语言)