计算机系统基础(三)之通用寄存器

计算机系统基础(三)之通用寄存器

本文主要结合上文关于标志寄存器的内容,解释关于通用寄存器相关的知识。


前言

提示:本章主要介绍8086CPU的通用寄存器


提示:以下是本篇文章正文内容,下面案例可供参考

一、通用寄存器是什么?

通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。除此之外,它们还各自具有一些特殊功能。汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途,只有这样,才能在程序中做到正确、合理地使用它们。

二、8086CPU的通用寄存器

8086 CPU 中寄存器总共为 14 个,且均为 16 位 。即 AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES 共 14 个。而这 14 个寄存器按照一定方式又分为了通用寄存器,控制寄存器和段寄存器。
其中通用寄存器共有 8 个:AX,BX,CX,DX,BP,SP,SI,DI.八个寄存器都可以作为普通的数据寄存器使用。

AX,BX,CX,DX 称作为数据寄存器:

  • AX (Accumulator):累加寄存器,也称之为累加器;
  • BX (Base):基地址寄存器;
  • CX (Count):计数器寄存器;
  • DX (Data):数据寄存器;

SP 和 BP 称作为指针寄存器:

  • SP (Stack Pointer):堆栈指针寄存器;
  • BP (Base Pointer):基指针寄存器;

SI 和 DI 称作为变址寄存器:

  • SI (Source Index):源变址寄存器;
  • DI (Destination Index):目的变址寄存器;

3.八个通用寄存器介绍

3.1 数据寄存器

数据寄存器由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 位寄存器 ;

3.1.1 AX 寄存器:

AX寄存器可以分为 2 个独立的 8 位寄存器 AH 和 AL;如上图,AX的低8位(0位 ~ 7位)构成了AL寄存器,AX的高8位(8位 ~ 15位)构成了AH寄存器.在写汇编程序时,AX 寄存器可以说是使用率最高的寄存器。

  • AX的主要用途: 乘、除运算,字的输入输出,中间结果的缓存
  • AL 字节的乘、除运算,字节的输入输出,十进制算术运算
  • AH 字节的乘、除运算,存放中断的功能号
    示例:

数据:20000
二进制表示:0100111000100000
在寄存器AX中的存储:
在这里插入图片描述
在这里插入图片描述

3.1.2 BX 寄存器:

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

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

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

3.1.3 CX 寄存器:

CX 寄存器作为数据寄存器的一种,具有暂存一般性的数据的功能,也可以将其当做两个独立的 8 位寄存器使用,即有 CH 和 CL 两个 8 位寄存器。
此外CX也有专门的用用途,就是计数器的功能。当在汇编指令中使用循环 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		;循环 5MOV DX,41H		;A16 进制为 41H
MOV AX,01110001B	;显示白底蓝字
s:  MOV [BX],DX	;显示 ASCII 字符
    ADD BX,1
    MOV [BX],AX	;设置字符显示属性
    ADD BX,1
LOOP s

在这里插入图片描述

未完待续

  • 1
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

果粒橙_LGC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值