通用寄存器

在 8086 CPU 中,通用寄存器有 8 个,分别是 AX,BX,CX,DX,SP,BP,SI,DI

下面介绍这几个通用寄存器:

数据寄存器(AX,BX,CX,DX):

数据寄存器有 AX,BX,CX,DX 四个组成,

由于在 8086 之前的 CPU 为 8 位 CPU,所以为了兼容以前的 8 位程序,在 8086 CPU 中,每一个数据寄存器都可以当做两个单独的寄存器来使用,由此,每一个 16 位寄存器就可以当做 2 个独立的 8 位寄存器来使用了 。

AX 寄存器可以分为两个独立的 8 位的 AH 和 AL 寄存器;

BX 寄存器可以分为两个独立的 8 位的 BH 和 BL 寄存器;

CX 寄存器可以分为两个独立的 8 位的 CH 和 CL 寄存器;

DX 寄存器可以分为两个独立的 8 位的 DH 和 DL 寄存器;

除了上面 4 个数据寄存器以外,其他寄存器均不可以分为两个独立的 8 位寄存器 ;

注意在上面标志中的“独立”二字,这两个字表明 AH 和 AL 作为 8 位寄存器使用时,可以看做它们是互不相关的,也就是看做两个完全没有联系的寄存器 X 和 Y 即可,比如指令   MOV   AH , 12H ,CPU 在执行时根本就不会知道 AL 中是什么鬼东西,因为它只认识  AH 。

下面给出一幅 16 位数据寄存器的结构图:

表示 16 位 寄存器 AX 可以表示成两个 8 位寄存器,

其中 AH 表示高位的 8 位寄存器,AL 表示低位的 8 位寄存器 。

AX 寄存器:

如上所说,AX 的另外一个名字叫做累加寄存器或者简称为累加器,其可以分为 2 个独立的 8 位寄存器 AH 和 AL;

在写汇编程序时,AX 寄存器可以说是使用率最高的寄存器(不过,总共才那么 14 个寄存器,哪一个不经常使用咯?),既然 AX 是数据寄存器的话,那么理所当然,其可以用来存放普通的数据,由于其是 16 位寄存器,自然也就可以存放 16 位数据,但是因为其又可以分为 2 个独立的 8 位寄存器 AH 和 AL ,所以,在 AH 和 AL 中又可以独立的存放 2 个 8 位的数据,可以有以下代码(即将 AX 当做普通的寄存器使用,即可以用来暂存数据):

MOV AX,1234H        ;向寄存器 AX 传入数据 1234H
MOV AH,56H         ;向寄存器 AX 的高 8 位寄存器 AH 中传入数据 56H
MOV AL,78H      ;向寄存器 AX 的低 8 位寄存器 AL 中传入数据 78H
3 条语句的执行过程如下:

而既然 AX 又被称作为累加器,自然其还有一点点特殊的地方的:

AX 寄存器还具有的特殊用途是在使用 DIV 和 MUL 指令时使用,DIV 在 8086 CPU 中是除法指令,而在使用除法的时候有两种情况,即除数可以是 8 位或者是 16 位的,而且除数可以存放在寄存器中或者是内存单元中,而至于被除数的话,自然,应该由 AX 来代替了,当除数是 8 位时,被除数一定会是 16 位的,并且默认是放在 AX 寄存器中,而当除数是 16 位时,被除数一定是 32 位的,因为 AX 是 16 位寄存器,自然,放不下 32 位的被除数,所以,在这里还需要使用另一个 16 位寄存器 DX ,其中 DX 存放 32 位的被除数的高 16 位,而 AX 则存放 32 位的被除数的低 16 位,同时,AX 的作用还不仅仅是用来保存被除数的,当除法指令执行完成以后,如果除数是 8 位的,则在 AL 中会保存此次除法操作的商,而在 AH 中则会保存此次除法操作的余数,当然,如果除数是 16 位的话,则 AX 中会保存本次除法操作的商,而 DX 则保存本次除法操作的余数。

上面介绍的是 AX 寄存器在除法操作中的应用,下面还需要介绍一下 AX 在乘法操作中的应用,

当使用 MUL 做乘法运算时,两个相乘的数要么都是 8 位,要么都是 16 位,如果两个相乘的数都是 8 位的话,则一个默认是放在 AL 中,而另一个 8 位的乘数则位于其他的寄存器或者说是内存字节单元中,而如果两个相乘的数都是 16 位的话,则一个默认存放在 AX 中,另一个 16 位的则是位于 16 的寄存器中或者是某个内存字单元中。

同时,当 MUL 指令执行完毕后,如果是 8 位的乘法运算,则默认乘法运算的结果是保存在 AX 中,而如果是 16 位的乘法运算的话,则默认乘法运算的结果有 32 位,其中,高位默认保存在 DX 中,而低位则默认保存在 AX 中。

AX 寄存器在 DIV  指令中的使用:

MOV DX,0H        ;设置 32 位被除数的高 16 位为 0H
MOV AX,8H       ;设置 32 位被除数的低 16 位为 8H
MOV BX,2H       ;设置 16 位除数为 2H
DIV BX             ;执行计算

4 条语句的执行过程如下:

AX 寄存器在 MUL  指令中的使用:

MOV AX,800H      ;设置 16 位乘数为 800H
MOV BX,100H     ;设置 16 位乘数为 100H
MOV DX,0H       ;清空用来保存乘法结果的高 16 位
MUL BX             ;执行计算

4 条语句的执行过程如下:

BX 寄存器:

首先可以明确的是,BX 作为数据寄存器,表明其是可以暂存一般的数据的,即在某种程度上,它和 AX 可以暂存一般性数据的功能是一样的,其同样为了适应以前的 8 位 CPU ,而可以将 BX 当做两个独立的 8 位寄存器使用,即有 BH 和 BL,除了暂存一般性数据的功能外,BX 作为通用寄存器的一种,BX 主要还是用于其专属功能 – 寻址(寻址物理内存地址)上,BX 寄存器中存放的数据一般是用来作为偏移地址使用的。

在 8086 CPU 中,CPU 是根据 <段地址:偏移地址> 来进行寻址操作的,而 BX 中存放的数据表示的是偏移地址的话,自然,便可以通过 <段地址:[BX]> 的方式来完成寻址操作了。

为了介绍 BX 在寻址当中的作用,下面我给出一副示意图:

上面的示意图表示:可以令 BX = 2,然后通过 DS : [BX] 来访问到内存中段地址为 DS,且偏移量为 2 的内存单元了。

上面介绍的这种寻址方式是 BX 在寻址中最最简单的应用了,而对于稍微复杂的寻址方式,

还可以依赖于 SI,DI,BP 等寄存器来一起完成。

BX 寄存器在寻址中的使用:

MOV BX,5H
MOV AH,11H
MOV AH,[BX]     ;设置 AX 的值为偏移地址为 BX 中的值时所代表的内存单元

3 条语句的执行过程如下:

从上图可以看出,在偏移地址为 5 时的内存单元中的数据位 BBH,

而从这幅图上面就可以看出,确实通过 [BX] 找到了偏移地址为 5 处的内存单元,并且将内存单元移入了 AH 中。

CX 寄存器:

CX 寄存器作为数据寄存器的一种呢,其同样具有和 AX,BX 一样的特点,即可以暂存一般性的数据,同时还可以将其当做两个独立的 8 位寄存器使用,即有 CH 和 CL 两个 8 位寄存器,当然,CX 也是有其专门的用途的,CX 中的 C 被翻译为 Counting 也就是计数器的功能,当在汇编指令中使用循环 LOOP 指令时,可以通过 CX 来指定需要循环的次数,而 CPU 在每一次执行 LOOP 指令的时候,都会做两件事:

一件就是令 CX = CX – 1,即令 CX 计数器自动减去 1;

还有一件就是判断 CX 中的值,如果 CX 中的值为 0 则会跳出循环,而继续执行循环下面的指令,当然如果 CX 中的值不为 0 ,则会继续执行循环中所指定的指令 。

CX 寄存器在循环中的使用(输出 5 个白底蓝字的 A):

MOV AX,0B800H
MOV DS,AX       ;使用 80x25 彩色字符模式,内存地址 0xB8000 - 0xBFFFFF
MOV BX,0        ;从 0xB8000 开始
MOV CX,5H       ;循环 5 次
MOV DX,41H      ;A 的16 进制为 41H
MOV AX,01110001B    ;显示白底蓝字
s:  MOV [BX],DX ;显示 ASCII 字符ADD BX,1MOV [BX],AX ;设置字符显示属性ADD BX,1
LOOP s

语句的执行过程如下:

DX 寄存器:

DX 寄存器作为数据寄存器的一种,同样具有和 AX,BX,CX 一样的特点,即可以暂存一般性的数据,同时还可以将其当做两个独立的 8 位寄存器使用,极有 DH 和 DL,同时,DX 作为一个通用寄存器的话,关于 DX 在其他方面的用途,当在使用 DIV 指令进行除法运算时,如果除数为 16 位时,被除数将会是 32 位,而被除数的高 16 位就是存放在 DX 中,而且执行完 DIV 指令后,本次除法运算所产生的余数将会保存在 DX 中,同时,在执行 MUL 指令时,如果两个相乘的数都是 16 位的话,那么相乘后产生的结果显然需要 32 位来保存,而这 32 位的结果的高 16 位就是存放在 DX 寄存器中 。

DX 寄存器在 DIV  指令中的使用(即 2293812 / 256 = 8960  余数为 52):

MOV DX,0023H ;32 位被除数的高 16 位
MOV AX,0034H    ;32 位被除数的低 16 位
MOV BX,100H ;16 的除数
DIV BX  

语句的执行过程如下:


可以看到在语句结束以后,AX = 2300H  即十进制的 8960,而 DX = 34H即十进制的 52 和我们的结果是一致的。

8086数据寄存器介绍相关推荐

  1. MIPS介绍与MIPS汇编的常用指令

    描述 CTF做题时会遇见MIPS汇编的题目,而我们接触的是8086汇编,IDA是不能反汇编的需要自己了解一些MIPS方面的知识; 1. List 1 在不同的设备中,汇编语言对应着不同的机器语言指令集 ...

  2. 王爽著的《汇编语言》第3版笔记

    王爽著的<汇编语言>(第3版)于2013年出版,虽然是2013年出版的,但书中部分内容感觉已过时: (1). 基于intel 8086 CPU介绍,intel 8086是英特尔公司上个世纪 ...

  3. 微型计算机和pc的概念,微型计算机IBM-PC(0520)系统原理及应用

    本书是周明德教授的<微型计算机系统原理及应用>的第六版.曾获全国畅销书一等奖.根据微处理器的新发展,本书从80x86系列微处理器整体着眼,落实到基本的处理器8086,介绍了微型计算机系统原 ...

  4. 操作系统内核Hack:(二)底层编程基础

    操作系统内核Hack:(二)底层编程基础 在<操作系统内核Hack:(一)实验环境搭建>中,我们看到了一个迷你操作系统引导程序.尽管只有不到二十行,然而要完全看懂还是需要不少底层软硬件知识 ...

  5. 微型计算机原理与接口技术考研,微型计算机原理与接口技术

    目录 第1章计算机基础 1.1计算机中的数制 1.1.1常用计数制 1.1.2数制转换 1.2计算机中数据的编码 1.2.1数值数据的编码与运算 1.2.2字符的编码 1.3浮点数基本概念 1.3.1 ...

  6. (转)CC2530 ADC学习笔记

    (转自) http://blog.csdn.net/qq_15647227/article/details/53393253 CC2530 ADC学习笔记 CC2530的ADC最大支持14位(实际上为 ...

  7. 微型计算机系统的框架,微型计算机系统原理及应用

    本书是周明德教授的<微型计算机系统原理及应用>的第六版.曾获全国畅销书一等奖.根据微处理器的新发展,本书从80x86系列微处理器整体着眼,落实到基本的处理器8086,介绍了微型计算机系统原 ...

  8. 计算机原理董洁答案,微计算机原理

    本书第1版自2002年出版后,历经多次再版,始终畅销不衰,已被多所学校选作教材,广受好评,销量近30万册.本次再版,除用一定篇幅介绍微型计算机的新技术外,还加入了与实际工程应用相结合的设计示例,并有详 ...

  9. 微机原理——8086系统的概述与引脚介绍

    概述 8086 是 16 位 CPU , 采用高性能的 N 沟道.耗尽型负载的硅栅工艺(HMOS) 制造.由于受当时制造工艺的限制,为了解决功能多和引脚少的矛盾,部分引脚采用 分时复用 的方式,构成了 ...

最新文章

  1. 管理员信息管理之获取管理员用户列表数据
  2. linux 死锁分析
  3. 文件服务器定时开关机,如何配置作服务器定时开关机.ppt
  4. wav文件头修复_windows文件夹分析(xp版,网络整理)
  5. Codeforces Edu Round 64 (Rated for Div. 2)
  6. dorehtml.php,帝国cms后台实现刷新多栏目内容页的方法详解
  7. 201809-2-买菜
  8. [转载] Python input()函数
  9. L2-018 多项式A除以B (25分)
  10. session与cookie的区别和用法
  11. springcloud整合nacos启动时报错‘com.netflix.client.config.IClientConfig‘ that could not be found
  12. 基于matlab的音频处理论文,基于Matlab的语音信号处理与仿真设计毕业论文
  13. 小米新Logo就加了一行代码?
  14. Agilent E3649A via RS232 to PC 通信终于知道错哪了
  15. java实现 蓝桥杯 算法提高 盾神与条状项链
  16. Android 包大小优化总结
  17. ANR发生的原理是什么, 怎么排查
  18. The release Method
  19. 18天1000万次迭代,AI生成的照片你能分辨真假吗?
  20. javabean 一些这方面的快捷键

热门文章

  1. 【网易中台实践】云信业务中台的敏捷开发
  2. 网易云信3.3.0版本更新啦!
  3. Python 学习笔记12 类 - 使用类和实例
  4. Hadoop学习(二)——MapReduce\Yarn架构
  5. mac电脑简单好用的非主流程序
  6. Linux监控平台搭建( zabbix监控)
  7. 28、OSPF配置实验之负载均衡
  8. 如何在ubuntu上搭建hustoj?
  9. ROS单内网服务器源IP限速\单个下载链接限速
  10. JAVA程序猿面试题汇总