8086所有寄存器简介

上传人:鲁** 文档编号:507611963 上传时间:2023-12-12 格式:DOCX 页数:28 大小:50.76KB
返回 下载 相关 举报
8086所有寄存器简介_第1页
第1页 / 共28页
8086所有寄存器简介_第2页
第2页 / 共28页
8086所有寄存器简介_第3页
第3页 / 共28页
8086所有寄存器简介_第4页
第4页 / 共28页
8086所有寄存器简介_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《8086所有寄存器简介》由会员分享,可在线阅读,更多相关《8086所有寄存器简介(28页珍藏版)》请在金锄头文库上搜索。

1、8086所有寄存器简介8086寄存器简介 首先浅要介绍一下 Intel CPU 的发展史吧: Intel CPU 系列,最初是 4 位微处理器 4004,然后到到 8 位微处理器的 8008 , 再到 8 微微处理器 8080,以及稍后的 16 位微处理器 8086, 由 8086 开始,Intel 进入现在所谓的 x86 时代 。 Intel 8086 为 16 位 CPU ,而因为在 8086 之前的 CPU 都是 8 位 CPU,这样也就造成了很多的外设也只支持 8 位, 因此 Intel 紧接着就退出了 8 位的 8088 CPU,因此 Intel 8088 也就可以看做是 8086

2、的 8 位版本; 如果是但从汇编语言的角度上来说,8086 和 8088 是没有区别的,即 8086 上跑的程序可以不加修改的移植到 8088 , 8088 上跑的程序也可以不加修改的移植到 8086 上, 当然,还是有些特殊的地方是不同的,而这些基本上在这里可以忽略掉, 在 8088 CPU 之后,Intel 又推出了 80186 ,80286 ,这两款 CPU 均是 16 位 CPU , 而对于 80186 来说,其与 8086 的区别可以简单的看做是 80186 多了几条指令而已, 而 80286 则不同,80286 的地址总线数目有了变化, 20 在 8086 , 8088 , 801

3、86 上,CPU 的地址总线都是 20 根,即可最大寻址 2即达到 1MB 的寻址能力, 24而对于 80286 CPU 来说,其地址总线数目达到了 24 根,从而最大寻址能力为 2 即 16MB, 由于支持更多的物理内存寻址,因此 80286 便开始成为了多任务,多用户系统的核心。 而后来,Intel 又推出了 80386 ,80386 为 32 位微处理器,Intel 80x86 家族的 32 位微处理器始于 80386; 同时 80386 也完全兼容先前的 8086/8088,80186,80286,并且 80386 全面支持 32 位数据类型和 32 位操作, 32 并且 80386

4、的数据总线根数和地址总线根数均达到了 32 根,从而可以最大物理寻址为 2即 4GB 。 而之后的 80486 也是 32 位微处理器,而后又出来了 Pentium 和 Pentium Pro 等等第五代微处理器, 这些处理器虽然也是 32 位微处理器,但是他们的数据总线和地址总线都有所扩展, 比如 Pentium 的数据总线达到 64 位,而 Pentium Pro 的地址总线位数达到了 36 位 。 好,关于 Intel CPU 的介绍就到这里了,下面就要开始回归中心,看 CPU 中的寄存器了, 首先,从学习的角度来说,从 8086/8088 CPU 下手是不错的选择,而我这里选择的也是

5、8086 CPU 而已, 说实在的,像 80386 CPU 我也还没有研究过,像奔腾这些,呵呵,扯更远了, 说到底也就只能拿 8086 出来晒晒而已,当然,从 8086 开始也是学习的最佳路径 。 说了这么久,到底寄存器是什么呢?其实很简单,寄存器就是个存储信息的单元或者说是器件又或者说是容器而已, 就比如内存也是一个存储介质或者说是存储单元而已,其实寄存器从理解上来说和内存差不多, 只不过寄存器位于 CPU 内部,而内存位于 CPU 外部, 而且,寄存器比内存可是珍贵得多啊,就拿内存和硬盘来比,肯定是内存在使用上珍贵得多,是 PC 中的稀有资源, 而寄存器是 CPU 中的稀有资源,内存和寄存

6、器相比就像硬盘和内存相比一样 。 而对于一个汇编程序员来说,CPU 中主要可以使用的也就是寄存器而已,汇编程序员可以使用指令来读写 CPU 中的寄存器, 从而可以实现对于 CPU 的控制,当然,不同的 CPU ,寄存器的个数和结构都是不一样的, 比如 8086 CPU 中,寄存器的个数也就 14 个而已, 并且 8086 CPU 中所有的寄存器的结构为 16 位,即一个寄存器中可以存放下 2B 即 2 个字节, 而到了 80386 CPU 中,寄存器的个数也比 8086 增多了,比如在 80386 中添加了系统地址寄存器等寄存器, 同时寄存器的结构也变了,比如在 80386 中绝大多数的寄存器

7、为 32 位,而有些寄存器则是 16 位 。 8086 CPU 中寄存器总共为 14 个,且均为 16 位 。 即 AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES 共 14 个。 而这 14 个寄存器按照一定方式又分为了通用寄存器,控制寄存器和段寄存器。 通用寄存器: AX,BX,CX,DX 称作为数据寄存器: AX (Accumulator):累加寄存器,也称之为累加器; BX (Base):基地址寄存器; CX (Count):计数器寄存器; DX (Data):数据寄存器; SP 和 BP 又称作为指针寄存器: SP (Stack Pointer)

8、:堆栈指针寄存器; BP (Base Pointer):基指针寄存器; SI 和 DI 又称作为变址寄存器: SI (Source Index):源变址寄存器; DI (Destination Index):目的变址寄存器; 控制寄存器: IP (Instruction Pointer):指令指针寄存器; FLAG:标志寄存器; 段寄存器: CS (Code Segment):代码段寄存器; DS (Data Segment):数据段寄存器; SS (Stack Segment):堆栈段寄存器; ES (Extra Segment):附加段寄存器; 通用寄存器 从上面可以知道,在 8086 C

9、PU 中,通用寄存器有 8 个,分别是 AX,BX,CX,DX,SP,BP,SI,DI , 至于为什么给它们取名做通用寄存器,那是因为,这些个寄存器每一个都有自己专门的用途, 比如 CX 作为计数寄存器,则是在使用 LOOP 指令循环时用来指定循环次数的寄存器, 如果它们每一个都只有一个专用的作用,那就它们只能称之为专用寄存器了, 正是因为这些个寄存器还可以用来传送数据和暂存数据,所以才称它们为通用寄存器 。 下面就按顺序来一一介绍这几个通用寄存器了: 数据寄存器: 数据寄存器有 AX,BX,CX,DX 四个组成, 由于在 8086 之前的 CPU 为 8 位 CPU,所以为了兼容以前的 8

10、位程序, 在 8086 CPU 中,每一个数据寄存器都可以当做两个单独的寄存器来使用, 由此,每一个 16 位寄存器就可以当做 2 个独立的 8 位寄存器来使用了 。 AX 寄存器可以分为两个独立的 8 位的 AH 和 AL 寄存器; BX 寄存器可以分为两个独立的 8 位的 BH 和 BL 寄存器; CX 寄存器可以分为两个独立的 8 位的 CH 和 CL 寄存器; DX 寄存器可以分为两个独立的 8 位的 DH 和 DL 寄存器; 1 8086寄存器简介 除了上面 4 个数据寄存器以外,其他寄存器均不可以分为两个独立的 8 位寄存器 ; 注意在上面标志中的“独立”二字,这两个字表明 AH

11、和 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 寄存器可以说是使用率最高的

12、寄存器, 既然 AX 是数据寄存器的话,那么理所当然,其可以用来存放普通的数据,由于其是 16 位寄存器, 自然也就可以存放 16 位数据,但是因为其又可以分为 2 个独立的 8 位寄存器 AH 和 AL , 所以,在 AH 和 AL 中又可以独立的存放 2 个 8 位的数据, 可以有以下代码: MOV AX,1234H ;向寄存器 AX 传入数据 1234H MOV AH,56H ;向寄存器 AX 的高 8 位寄存器 AH 中传入数据 56H MOV AL,78H ;向寄存器 AX 的低 8 位寄存器 AL 中传入数据 78H 3 条语句的执行过程如下: 而既然 AX 又被称作为累加器,自然

13、其还有一点点特殊的地方的: AX 寄存器还具有的特殊用途是在使用 DIV 和 MUL 指令时使用, DIV 在 8086 CPU 中是除法指令,而在使用除法的时候有两种情况,即除数可以是 8 位或者是 16 位的, 而且除数可以存放在寄存器中或者是内存单元中,而至于被除数的话,自然,应该由 AX 来代替了, 当除数是 8 位时,被除数一定会是 16 位的,并且默认是放在 AX 寄存器中, 而当除数是 16 位时,被除数一定是 32 位的,因为 AX 是 16 位寄存器,自然,放不下 32 位的被除数, 所以,在这里还需要使用另一个 16 位寄存器 DX , 其中 DX 存放 32 位的被除数的

14、高 16 位,而 AX 则存放 32 位的被除数的低 16 位, 同时,AX 的作用还不仅仅是用来保存被除数的,当除法指令执行完成以后, 如果除数是 8 位的,则在 AL 中会保存此次除法操作的商,而在 AH 中则会保存此次除法操作的余数, 当然,如果除数是 16 位的话,则 AX 中会保存本次除法操作的商,而 DX 则保存本次除法操作的余数。 上面介绍的是 AX 寄存器在除法操作中的应用,下面还需要介绍一下 AX 在乘法操作中的应用, 当使用 MUL 做乘法运算时,两个相乘的数要么都是 8 位,要么都是 16 位, 2 8086寄存器简介 如果两个相乘的数都是 8 位的话,则一个默认是放在

15、AL 中, 而另一个 8 位的乘数则位于其他的寄存器或者说是内存字节单元中, 而如果两个相乘的数都是 16 位的话,则一个默认存放在 AX 中, 另一个 16 位的则是位于 16 的寄存器中或者是某个内存字单元中。 同时,当 MUL 指令执行完毕后,如果是 8 位的乘法运算,则默认乘法运算的结果是保存在 AX 中, 而如果是 16 位的乘法运算的话,则默认乘法运算的结果有 32 位, 其中,高位默认保存在 DX 中,而低位则默认保存在 AX 中。 AX 寄存器在 DIV 指令中的使用: MOV DX,0H MOV AX,8H MOV BX,2H DIV BX 4 条语句的执行过程如下: ;设置 32 位被除数的高 16 位为 0H ;设置 32 位被除数的低 16 位为 8H ;设置 16 位除数为 2H ;执行计算 AX 寄存器在 MUL 指令中的使用: MOV AX,800H MOV BX,100H MOV DX,0H MUL BX 4 条语句的执行过程如下: ;设置 16 位乘数为 800H ;设置 16 位乘数为 100H ;清空用来保存乘法结果的高 16 位 ;执行计算 3 8086寄存器简介 BX 寄存器: 首先可以明确的是,BX 作为数据寄存器,表明其是可以暂存一般的数据的, 即在某种程度上,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号