我们从前面几篇文章了解到数据、指令大部分是存储在内存的,那么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位的赋值。
网友评论