对于汇编程序员来说,CPU中主要的部件就是寄存器,这也是我们程序员可以用指令读写的部件,通过指令来实现对CPU的控制。
以8086CPU为例,它所有的寄存器都是16位的,共有14个寄存器分别是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。
以AX为例,寄存器的逻辑结构如下图所示:
其中,0-7表示AX中的第八位,用AL表示,8-15表示高八位,用AH来表示,对于一个数据,我们需要将其转为二进制数据,然后按位存储到里面去。
比如数据18,二进制表示为10010,那么,在AX中的存储为:
这里我们可以看到,由于18的二进制表示只有5位,因此存储的时候5-15分别用0填充。
在存储数据的时候,需要注意:如果我们存储的数据二进制超出了16位,那么超出的部分不会存储,这种情况结果就是错误的。
一个字节由8个bit组成,可以存放在8为寄存器中,一个word,有两个字节组成,分别称为高位字节,和低位字节。在存储的时候,高位字节和低位字节分别存储到寄存器的高位和低位。
下面我们开始学习简单的汇编指令。
这几个指令都比较简单,我们举个例子:
mov ax, 4E20H:这个就表示ax = 4E20H
add ax, 1406H:这个表示ax=ax+1460H,执行之后,ax变成了6226H
看最后一个:
mov ax, 8226H
mov bx, 8226H
add ax, bx
这个例子是这样计算的:ax和bx都是8226H,相加后的值为1044CH,但是ax是16位寄存器,只能存放4位16进制数据,所以结果为ax = 044CH,最高位1被丢掉。
同时,还要注意:我们不能在8为何16位寄存器中进行数据传送,也不能超出寄存器的存储范围,否则就会出错,比如以下指令都是错的:
他们错误的原因就是指令的两个操作对象的位数不一致。