8086数据寄存器介绍
通用寄存器
在 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数据寄存器介绍相关推荐
- MIPS介绍与MIPS汇编的常用指令
描述 CTF做题时会遇见MIPS汇编的题目,而我们接触的是8086汇编,IDA是不能反汇编的需要自己了解一些MIPS方面的知识; 1. List 1 在不同的设备中,汇编语言对应着不同的机器语言指令集 ...
- 王爽著的《汇编语言》第3版笔记
王爽著的<汇编语言>(第3版)于2013年出版,虽然是2013年出版的,但书中部分内容感觉已过时: (1). 基于intel 8086 CPU介绍,intel 8086是英特尔公司上个世纪 ...
- 微型计算机和pc的概念,微型计算机IBM-PC(0520)系统原理及应用
本书是周明德教授的<微型计算机系统原理及应用>的第六版.曾获全国畅销书一等奖.根据微处理器的新发展,本书从80x86系列微处理器整体着眼,落实到基本的处理器8086,介绍了微型计算机系统原 ...
- 操作系统内核Hack:(二)底层编程基础
操作系统内核Hack:(二)底层编程基础 在<操作系统内核Hack:(一)实验环境搭建>中,我们看到了一个迷你操作系统引导程序.尽管只有不到二十行,然而要完全看懂还是需要不少底层软硬件知识 ...
- 微型计算机原理与接口技术考研,微型计算机原理与接口技术
目录 第1章计算机基础 1.1计算机中的数制 1.1.1常用计数制 1.1.2数制转换 1.2计算机中数据的编码 1.2.1数值数据的编码与运算 1.2.2字符的编码 1.3浮点数基本概念 1.3.1 ...
- (转)CC2530 ADC学习笔记
(转自) http://blog.csdn.net/qq_15647227/article/details/53393253 CC2530 ADC学习笔记 CC2530的ADC最大支持14位(实际上为 ...
- 微型计算机系统的框架,微型计算机系统原理及应用
本书是周明德教授的<微型计算机系统原理及应用>的第六版.曾获全国畅销书一等奖.根据微处理器的新发展,本书从80x86系列微处理器整体着眼,落实到基本的处理器8086,介绍了微型计算机系统原 ...
- 计算机原理董洁答案,微计算机原理
本书第1版自2002年出版后,历经多次再版,始终畅销不衰,已被多所学校选作教材,广受好评,销量近30万册.本次再版,除用一定篇幅介绍微型计算机的新技术外,还加入了与实际工程应用相结合的设计示例,并有详 ...
- 微机原理——8086系统的概述与引脚介绍
概述 8086 是 16 位 CPU , 采用高性能的 N 沟道.耗尽型负载的硅栅工艺(HMOS) 制造.由于受当时制造工艺的限制,为了解决功能多和引脚少的矛盾,部分引脚采用 分时复用 的方式,构成了 ...
最新文章
- 管理员信息管理之获取管理员用户列表数据
- linux 死锁分析
- 文件服务器定时开关机,如何配置作服务器定时开关机.ppt
- wav文件头修复_windows文件夹分析(xp版,网络整理)
- Codeforces Edu Round 64 (Rated for Div. 2)
- dorehtml.php,帝国cms后台实现刷新多栏目内容页的方法详解
- 201809-2-买菜
- [转载] Python input()函数
- L2-018 多项式A除以B (25分)
- session与cookie的区别和用法
- springcloud整合nacos启动时报错‘com.netflix.client.config.IClientConfig‘ that could not be found
- 基于matlab的音频处理论文,基于Matlab的语音信号处理与仿真设计毕业论文
- 小米新Logo就加了一行代码?
- Agilent E3649A via RS232 to PC 通信终于知道错哪了
- java实现 蓝桥杯 算法提高 盾神与条状项链
- Android 包大小优化总结
- ANR发生的原理是什么, 怎么排查
- The release Method
- 18天1000万次迭代,AI生成的照片你能分辨真假吗?
- javabean 一些这方面的快捷键