汇编语言
第二章 寄存器
- 一个典型的CPU由运算器、控制器、寄存器等器件构成,它们靠内部总线相连
- 内部总线实现CPU内部各个器件之间的联系,外部总线实现CPU和主板上其他器件的联系
- CPU中,运算器进行信息处理,寄存器进行信息存储、控制器控制各种器件进行工作、内部总线连接各个器件,在它们之间进行数据的传送
- 8086有14个寄存器:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PWS
2.1 通用寄存器
- 8086所有寄存器都是16位的,AX、BX、CX、DX通常用来存放一般性的数据,称为通用寄存器
- 为了兼容上一代 8位寄存器,上述通用寄存器可分为两个独立的8位寄存器使用,分别是高八位寄存器(如AH),低八位寄存器(如AL)
2.2 字在寄存器中的存储
- 8086CPU可以一次性处理以下两种尺寸的数据
- 字节:记为byte,8位
- 字:记为word,两个字节
- 进制区分:十六进制数后加H,二进制数后加B,十进制数后什么都不加
2.3 几条汇编指令
-
mov ax,18 将18送入寄存器AX
-
mov ax,bx 将寄存器BX中的数据送入寄存器AX
-
add ax,8 将寄存器AX中的数值加上8
-
add ax,bx 将AX和BX中的数值相加,结果存在AX中
-
写汇编指令或寄存器的名称时不区分大小写
-
在进行数据传送或运算时,要注意指令的两个操作对象位数应当是一致的
2.4 物理地址
- 每个内存单元在内存空间中都有唯一的地址,称为物理地址
2.5 16位结构的CPU
- 16位结构CPU具有以下结构特性
- 运算器一次最多可以处理16位的数据
- 寄存器的最大宽度为16位
- 寄存器和运算器之间的通路为16位
2.6 8086CPU给出物理地址的方法
- 8086CPU有20位地址总线,但是它是十六位结构,所以采用在内部通过地址加法器采用
物理地址=段地址*16+偏移地址
的方法合成20位的物理地址
比如8086CPU要访问地址为123C8H的内存单元,十六位段地址为1230H,偏移地址为00C8H,1230H*16=12300H,加上00C8H,得到123C8H。
2.8 段的概念
- 一个段的起始地址一定是16的倍数,因为段地址X16必然是16的倍数
- 偏移地址为16位,16位地址的寻址能力为64kb,所以一个段的长度最大为64KB
2.9 段寄存器
- 8086CPU有4个段寄存器:CS、DS、SS、ES,当8086CPU要访问内存时由这四个寄存器提供内存单元的段地址。
2.10 CS和IP
- CS和IP指示了CPU当前要读取指令的地址。CS为代码段寄存器,存储段地址;IP为指令指针寄存器,存储偏移地址。任意时刻,CPU将CS:IP指向的内容当作指令执行
- 8086CPU的工作过程如下
- 从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器
- IP=IP+所读取指令的长度,从而指向下一条指令
- 执行指令,转到步骤1继续这个过程
2.11 修改CS、IP的指令
-
我们可以通过 mov ax,2来修改ax的值,但是mov指令不能用于设置CX和IP的值,可以使用jmp来修改CS和IP的值
- 同时修改CS和IP的内容
Jmp 段地址:偏移地址。例如jmp 2AE3:3 执行后CS=2A3EH,IP=0003H,CPU将从2AE33H处读取指令
- 仅修改IP的内容
Jmp 某一合法寄存器。例如jmp ax,执行前ax=1000H,cs=2000H,ip=0003H,执行后ax=2000H,cs=2000H,ip=1000H
debug 工具自取https://download.csdn.net/download/weixin_45080573/76754300