汇编之---寄存器篇

典型的CPU是由运算器
器件功能
运算器进行信息处理
寄存器进行信息存储
控制器控制各种器件进行工作
内部总线在以上器件之间进行数据的传送
我们可以通过汇编指令改变各种寄存器中的内容来实现对CPU的控制,不同的CPU,寄存器的个数不同

8086是16位机, 字长为16,16位结构,这几种说法描述了一个CPU具有下面几方面的结构特性:

  1. 运算其器一次最多可以处理16位的数据
  2. 寄存器的最大宽度为16位
  3. 寄存器和运算器之间的通路为16位
内存单元的地址在送上地址总线之前,必须在CPU中处理、传输、暂时存放。8086是16位结构的CPU,这也就是说,在8086内部,能够一次性处理、传输、暂时存放的信息的最大长度是16位的。
8086CPU有20位地址总线,可以传送20位地址,达到1MB的寻址能力,而CPU内部一次性处理、传输、暂时存储的地址为16位,如果将地址简单的从CPU内部发出,那么表现出来的寻址能力只有64KB.
为此,引入段地址。地址加法器采用物理地址=段地址*16+偏移地址的方法合成物理地址,当8086CPU要读写内存时:
  1. CPU中相关部件提供两个16位的地址,一个称为段地址,另一个成为偏移地址
  2. 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件
  3. 地址加法器将两个16位地址合成一个20位的物理地址
  4. 地址加法器通过内部总线将20位物理地址送入输入输出控制电路
  5. 输入输出控制电路将20位物理地址送上地址总线
  6. 20位物理地址被地址总线传送到存储器
段地址存放在段寄存器中,存放指令的段地址,8086CPU有4个段寄存器:CS、DS、SS、ES,当8086CPU要访问内存时由这4个段寄存器提供内存单元的段地址。(通用寄存器:AX、BX、CX、DX)
代码段寄存器:CS,指令指针寄存器:IP,假设CS中的内容为M,IP中的内容为N,8086CPU将从内存M*16+N单元开始,读取一条指令并执行。在8086CPU加电启动或复位后(即CPU刚开始工作时)CS和IP被设置为CS=FFFFH,IP=0000H,即在8086PC机刚启动时,CPU从内存FFFF0H单元中读取指令执行,FFFF0H单元中的指令是8086PC机开机后执行的第一条指令
在内存中,指令和数据没有任何区别,都是二进制信息,CPU在工作的时候怎么知道那些是指令那些是数据呢?现在可以确定的是,CPU将CS:IP指向的内存单元中的内容看做指令,因为在任何时候,CPU将CS、IP中的内容当作指令的段地址和偏移地址,用它们合成指令的物理地址
如何修改CS、IP的值?我们可以通过mov指令修改通用寄存器的值,但该指令对于CS、IP并不适用,可以使用“jmp 段地址:偏移地址“指令来实现:
jmp 3:0B16,执行后:CS=0003H,IP=0B16H,CPU将从00B46H处读取指令
jmp ax,指令执行前:ax=1000H,CS=2000H,IP=000H
        指令执行后:ax=1000H,CS=2000H,IP=1000H
        也就是用寄存器中的值修改IP(CS值不变)
代码段是在编程时将一组代码存放在一组地址连续、起始地址为16的整数倍的内存单元中,这段内存称为代码段。前面有提过,要让CPU执行我们放在代码段的指令,必须将CS:IP指向我们所定义的代码段中的第一条指令的首地址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值