8086 汇编笔记(一):寄存器

简介: 8086 汇编笔记(一):寄存器

前言

8086 CPU 有 14 个寄存器,每个寄存器有一个名称。这些寄存器是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW

一、通用寄存器

8086 CPU 的所有寄存器都是 16 位的,可以存放两个字节。AX、BX、CX、DX 这 4个寄存器通常用来存放一般性的数据,被称为通用寄存器。

8086 CPU 的上一代 CPU 中的寄存器都是 8 位的。

为了保证兼容,使原来基于上代 CPU 编写的程序稍加修改就可以运行在 8086 之上,8086 CPU 的 AX、BX、CX、DX 这 4个寄存器都可分为两个可独立使用的8位寄存器来用:

       1. AX 可分为 AH 和 AL;    

       2. BX 可分为 BH 和 BL;.

       3. CX 可分为 CH 和 CL;

       4. DX 可分为 DH 和 DL。

AX 的低 8 位(0 位~7 位) 构成了 AL 寄存器,高 8位(8 位~15 位) 构成了 AH 寄存器。AH 和 AL 寄存器是可以独立使用的 8 位寄存器。

二、字在寄存器中的存储

出于对兼容性的考虑,8086 CPU 可以一次性处理以下两种尺寸的数据。

字节:记为 byte,一个字节由8个bit组成,可以存在8位寄存器中。

字:记为 word,一个字由两个字节组成,这两个字节分别称为这个字的高位字节和低位字节。

三、汇编指令

书中案例分析,请计算最后 ax 寄存器的值

程序段中的最后一条指令 add ax,bx,在执行前 ax 和 bx 中的数据都为 8226H,相加后所得的值为:1044CH,但是 ax为16 位寄存器,只能存放4位十六进制的数据,所以最高位的1不能在 ax 中保存,ax 中的数据为:044CH。

请计算 al 寄存器的值

程序段中的最后一条指令 add al,93H,在执行前,al 中的数据为 C5H,相加后所得的值为:158H,但是 al 为8位寄存器,只能存放两位十六进制的数据,所以最高位的1丢失,ax 中的数据为:0058H

这里如果将 al 换成 ax 则结果为 0158 H(注意区分八位和十六位寄存器)

在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的,例如:

mov ax,bx
mov bx,cx
mov ax,18H
mov al,18H
add ax,bx
add ax,20000

答案解析:

四、物理地址

每一个内存单元都有唯一的地址,我们将这个唯一的地址称为物理地址。

五、8086 CPU 给出物理地址的方法

8086CPU 采用一种在内部用两个 16 位地址合成的方法来形成一个 20 位的物理地址

1. CPU 中的相关部件提供两个 16 位的地址,一个称为段地址,另一个称为偏移地址;

2. 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件:

3. 地址加法器将两个16 位地址合成为一个20位的物理地址;

4. 地址加法器通过内部总线将20位物理地址送入输入输出控制电路;

5. 输入输出控制电路将20位物理地址送上地址总线;

6. 20位物理地址被地址总线传送到存储器。

地址加法器采用物理地址=段地址x16+偏移地址的方法用段地址和偏移地址合成物理地址

六、段

如图 2.9 所示,我们可以认为:地址10000H~100FFH 的内存单元组成一个段,该段的起始地址(基础地址)为 10000H,段地址为 1000H,大小为 100H

我们也可以认为地址 10000H~1007FH、10080H~100FFH 的内存单元组成两个段,它们的起始地址(基础地址)为:10000H和10080H,段地址为:1000H和1008H,大小都为 80H。

答案解析:从最小为 0H,最大 FFFFH 计算

七、段寄存器

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

八、CS 和 IP

CS 和 IP 是 8086 CPU 中两个最关键的寄存器,它们指示了 CPU 当前要读取指令的地址。CS 为代码段寄存器,IP 为指令指针寄存器

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

图 2.10 说明如下:

       1. 8086CPU 当前状态:CS 中的内容为2000H,IP中的内容为0000H;

       2. 内存 20000H~20009H 单元存放着可执行的机器码:

九、修改 CS、IP 指令

mov 指令不能用于设置 CS、IP 的值!!!

若想同时修改 CS、IP 的内容,可用形如“jmp 段地址:偏移地址”的指令完成,例如

jmp 2AE3:3,执行后:CS=2AE3H,IP=0003H,CPU 将从 2AE33H 处读取指令。

jmp 3:0B16,执行后:CS0003H,IP=0B16H,CPU 将从 00B46H 处读取指令。  

若想仅修改 IP 的内容,可用形如 “jmp 某一合法寄存器” 的指令完成


“jmp 某一合法寄存器” 指令的功能为:用寄存器中的值修改 IP  

答案解析:四次,jmp 前后各一次

相关文章
|
6月前
|
存储 程序员 存储控制器
【读书笔记】汇编语言(第四版)第二章 寄存器
【读书笔记】汇编语言(第四版)第二章 寄存器
|
5月前
|
存储 安全 数据安全/隐私保护
Windows 32 汇编笔记(一):基础知识
Windows 32 汇编笔记(一):基础知识
|
5月前
|
存储 机器学习/深度学习 芯片
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
|
5月前
|
存储 索引
8086 汇编笔记(十一):内中断
8086 汇编笔记(十一):内中断
|
4月前
|
存储 编译器 Linux
Windows 32 汇编笔记(二):使用 MASM
Windows 32 汇编笔记(二):使用 MASM
8086 汇编笔记(十):标志寄存器
8086 汇编笔记(十):标志寄存器
8086 汇编笔记(九):call 指令 和 ret 指令
8086 汇编笔记(九):call 指令 和 ret 指令
|
5月前
|
编译器
8086 汇编笔记(八):转移指令的原理
8086 汇编笔记(八):转移指令的原理
|
5月前
|
存储 数据处理
8086 汇编笔记(七):数据处理的两个基本问题
8086 汇编笔记(七):数据处理的两个基本问题
|
5月前
|
编译器
8086 汇编笔记(六):更灵活的定位内存地址的方法
8086 汇编笔记(六):更灵活的定位内存地址的方法