寄存器的种类
现代计算机中,寄存器都是由CPU提供的,寄存器就在cpu里面。
计算器按照存储宽度可以划分如下:
寄存器的分类
说明几点
1.不同的寄存器有不同的功能,这个我们暂时先不用管
- 寄存器是随着硬件不断发展变化的。现在已经有64位的寄存器了,将来可能还会有128位的寄存器
寄存器的结构
寄存器的结构
可以看到,32位的寄存器中是嵌套着1个16位的寄存器,16位的寄存器嵌套着两个八位的寄存器。
大家可以找找规律,16位的寄存器名称就是把32位寄存器名称中的E给去掉了。而8位的寄存器,把16位寄存器划分为高位和低位,高位用H(high)表示,低位用L(lower)表示。
为什么要设计成这种嵌套关系?
1.硬件不断发展的原因。将来要增加64位的寄存器,直接套在32位上就可以。既可以保持兼容,有可以自由扩展
- 存储不浪费。寄存器已经到32位了,我要存储8位的数据,那我们使用8位寄存器就可以。剩下的空间就可以给其他数据使用。
演示
我们可以通过mov指令来演示一下这种嵌套关系
#指定一次如下
mov eax,0xAAAAAAAA
mov ax,0xBBBB
mov al,0xEE
mov ah,0xHH
image.png
连续4次F8,执行4次。结果以此如下图:
image.png
image.png
image.png
根据这个实验,大家就能形象出寄存器的结构
mov指令的用法
立即数的概念
通常把在立即寻址方式指令中给出的数称为立即数。
立即数可以是8位、16位或32位,该数值紧跟在操作码之后
mov eax,0xAAAAAAAA
中0xAAAAAAAA
就是立即数
mov指令的用法
image.png
根据语法,我们可以写这样的指令
mov eax,0xAAAAAAAA
还可以写这样的指令
mov eax,ebx
image.png
注意这里的mov和我们linux系统的mov是不一样的,linux系统的move是移动,而这里mov是拷贝
几个简单指令
ADD 指令:加
SUB 指令:减
AND指令:逻辑与
OR指令:逻辑或
NOT指令:逻辑非
XOR指令:逻辑异或
ADD指令演示
ADD指令是源操作数与目标操作数进行逻辑与运算,运算结果再放到目标地址中
我们写这样两条命令
image.png
按F8后,发现eax中值为2,符合我们的预期
再按F8后
是没有执行吗?
不是,如图
我们可以再增加一体语句
or eax,3
image.png
执行后结果如图:
image.png