您的位置:首页 > 其它

汇编语言入门:段寄存器

2018-02-14 11:07 513 查看
接着上一篇“段的概念”,本篇详细讲解“段寄存器”

段寄存器的基本概念

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

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

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

CS和IP寄存器介绍

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

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

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




说明: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的意思


下图是一个“死循环”:



程序最后一直在左边的段循环……

代码段

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



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

通过修改CS、IP的值让CPU来执行代码指令

(任意时刻,CS、IP指向的就是“指令”,这一点切记!)

最后小结:8086CPU的工作过程

1. 从CS: IP指向的内存单元读取指令,读取的指令进入指令缓冲器

2. IP指向下一条指令

3. 执行指令并重复步骤一(循环往复)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息