汇编每天1分钟 (4) | 寄存器 AX、BX、CX、DX

我们从前面几篇文章了解到数据、指令大部分是存储在内存的,那么CPU的寄存器是充当什么角色呢?

寄存器就是你的口袋。身上只有那么几个,只装最常用或者马上要用的东西。
内存就是你的背包。有时候拿点什么放到口袋里,有时候从口袋里拿出点东西放
在背包里。
—— 来自某乎网友的回答

额,放错图了

汇编语言中的AX、BX、CX、DX作为CPU内部的通用寄存器中的数据寄存器助记符,用来存放参与运算的数据或是存储运算的结果。

AX:寄存器称为累加器,常用于存放算术、逻辑运算中的操作数或结果。另外,所有的I/O指令都要使用累加器与外设接口传递数据。
BX:寄存器称为基址寄存器,常用来存放访问内存时的地址。
CX:寄存器称为计数寄存器,在循环、串操作指令中用作计数器。
DX:寄存器称为数据寄存器,在寄存器间接寻址中的I/O指令中存放I/O端口的地址。

AX、BX、CX、DX每个寄存器可以将高、低8位分别作为独立的8位寄存器使用。其中的高8位用AH、BH、CH、DH表示,低8位用AL、BL、CL、DL表示。

AX = AH + AL
BX = BH + BL
CX = CH + CL
DX = DX + DL

H是英文单词high(高)的简写,L是LOW(低)的简写,因此AH表示高8位寄存器,AL位为低8位寄存器。

图1-1

如图1-1所示,寄存器AX中的数据为1B01H,其中1B存放在AH(高8位),01存放在AL(低8位)。

为什么要区别高低位寄存器?

简单的单片机的寄存器只能放下8位(bit),即1byte。区分低8位和高8位,可以兼容简单的单片机。

下面我们通过debug工具来进行一些基础的寄存器操作:

挂载masm5目录,并执行debug:

图1-2

在debug命令下,执行r命令观察ax寄存器的值:

图1-3

执行a命令,输入mov ax,1B01,准备把1B01赋值给ax:

图1-4

执行t命令,确认执行mov ax,1B01:

图1-5

如图1-5所示,ax的数据由0000变更为1B01。

继续a命令,我们尝试给AH、AL赋值:

图1-6

如图1-6所示,我们给AH赋值1F,AL赋值02,最终AX的值由1B01变更为1F02。

从上文知晓AH、AL为8位寄存器(一个字节,8bit),我们来试试将16位赋值给AH、AL看看会出现什么情况:

图1-7

如图1-7所示,执行过程中报了错误,AX的值没有发生变更。因此得出结论,8位寄存器只允许进行8位的赋值。

你可能感兴趣的:(汇编每天1分钟 (4) | 寄存器 AX、BX、CX、DX)