本文主要结合上文关于标志寄存器的内容,解释关于通用寄存器相关的知识。
提示:本章主要介绍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组成,由于在 8086 之前的 CPU 为 8 位 CPU,所以为了兼容以前的 8 位程序,在 8086 CPU 中,每一个数据寄存器都可以当做两个单独的寄存器来使用,由此,每一个 16 位寄存器就可以当做 2 个独立的 8 位寄存器来使用了 。
AX寄存器可以分为 2 个独立的 8 位寄存器 AH 和 AL;如上图,AX的低8位(0位 ~ 7位)构成了AL寄存器,AX的高8位(8位 ~ 15位)构成了AH寄存器.在写汇编程序时,AX 寄存器可以说是使用率最高的寄存器。
数据:20000
二进制表示:0100111000100000
在寄存器AX中的存储:
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 中的值时所代表的内存单元
CX 寄存器作为数据寄存器的一种,具有暂存一般性的数据的功能,也可以将其当做两个独立的 8 位寄存器使用,即有 CH 和 CL 两个 8 位寄存器。
此外CX也有专门的用用途,就是计数器的功能。当在汇编指令中使用循环 LOOP 指令时,可以通过 CX 来指定需要循环的次数,而 CPU 在每一次执行 LOOP 指令的时候,都会做两件事:
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,1
MOV [BX],AX ;设置字符显示属性
ADD BX,1
LOOP s