汇编语言学习笔记2——寄存器(cpu工作原理)

一个典型的cpu有运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。

8086cpu有14个寄存器,它们的名称为:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。8086cpu所有寄存器都是16位的,可以存放两个字节。其中AX、BX、CX、DX通常用来存放一些一般性数据,被称为通用寄存器。

一个16位寄存器所能存放的数据的最大值为2^16^-1。

8086上一代cpu中的寄存器都是8位的,为了保证兼容性,4个通用寄存器都可以分为两个独立的8位寄存器使用。例如AX可以分为AH(高位)和AL(低位),AX的低8为构成了AL寄存器,高8位构成了AH寄存器。

物理地址

cpu访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间,将这个唯一的地址称为物理空间。

16位cpu特征:
  • 运算器一次最多可以处理16位的数据。
  • 寄存器的最大宽度为16位。
  • 寄存器和运算器之间的通路是16位的。
8086cpu给出物理地址的方法

8086有20位地址总线,可以传送20位地址,寻址能力为1M。而8086内部为16位结构,只能传送16位的地址,表现出的寻址能力只有64K。
为了解决这个问题,8086cpu采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。
182049382539826.jpg
其中加法器合成物理地址的方法为:物理地址 = 段地址 x 16 + 偏移地址
注意:

  • 内存并没有被划分为一个一个的段,段的划分来自于cpu。
  • 段地址 x 16必然是16的倍数,所以一个段的起始地址也一定是16的倍数。
  • 偏移地址为16位,16位地址的寻址能力为64k,所以一个段的最大长度为64K。

cpu在访问内存单元时必须向内存提供内存单元的物理地址。8086cpu在内部用段地址和偏移地址相加的方法形成最终的物理地址。
cpu可以用不同的段地址和偏移地址形成同一个物理地址:
182049556137855.png

“数据在21F60H中”对于8086PC机有两种描述:

  • 数据存在内存2000:1F60单元中;
  • 数据存在内存的2000段中的1F60H单元中;
段寄存器

段寄存器就是提供段地址的,8086cpu有4个段寄存器:CS、DS、SS、ES。

CS和IP是8086cpu中最关键的寄存器,他们指示了cpu当前要读取指令的地址。其中CS为代码段(指令)寄存器,IP为指令指针寄存器。
182050061752263.jpg

  • 从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;
  • IP=IP+所读取指令的长度,从而指向下一条指令;
  • 执行指令;

在8086cpu加电启动或复位后,CS和IP被设置为CS=FFFFH,IP=0000H。即在8086PC机刚启动时,cpu从内存FFFF0H单元中读取执行的指令,这是开机后执行的第一条指令。
如果说,内存中的一段信息曾被cpu执行过,那么,它所在的内存单元必然被CS:IP指向过。

修改CS、IP的指令

在cpu中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对cpu的控制。程序员可以通过改变CS、IP中的内容来控制cpu执行目标指令。

如果想要改变AX中的值,我们可以用mov ax,123,但mov指令不能用于设置CS、IP的值。8086cpu为CS、IP提供了另外的指令来改变它们的值——转移指令jmp
使用方法为jmp 段地址:偏移地址,例如:jmp 222F:2或者22FC:3
如果仅修改IP的内容,可以使用jmp 某一合法寄存器,例如jmp ax或者jmp bx

8086机中,任意时刻,cpu将CS:IP指向的内容当作指令执行。

实验
使用DEBUG

在64位系统下无法使用debug工具,可以用DOSBox和DEBUG32.exe代替,或者使用虚拟机安装一个32位的系统。

DEBUG使用

R命令:查看、改变cpu寄存器的内容。
D命令:查看内存中的内容。
E命令:改写内存中的内容。
U命令:将内存中的机器指令翻译成汇编指令。
T命令:执行一条机器指令。
A命令:以汇编指令的格式在内存中写入一条机器指令。
G命令:相当于下断电,g 0022即运行到偏移地址为22的位置停止,可以用来跳出循环。

转载于:https://www.cnblogs.com/starsli/p/4740585.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值