8086 汇编笔记(一):寄存器 您所在的位置:网站首页 输出寄存器符号新国标 8086 汇编笔记(一):寄存器

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

2024-07-16 02:42| 来源: 网络整理| 查看: 265

前言

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 前后各一次 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有