美文网首页
进一步学习通用寄存器

进一步学习通用寄存器

作者: 豆瓣奶茶 | 来源:发表于2018-12-13 00:14 被阅读18次

    寄存器的种类

    现代计算机中,寄存器都是由CPU提供的,寄存器就在cpu里面。
    计算器按照存储宽度可以划分如下:


    寄存器的分类

    说明几点

    1.不同的寄存器有不同的功能,这个我们暂时先不用管

    1. 寄存器是随着硬件不断发展变化的。现在已经有64位的寄存器了,将来可能还会有128位的寄存器

    寄存器的结构

    寄存器的结构

    可以看到,32位的寄存器中是嵌套着1个16位的寄存器,16位的寄存器嵌套着两个八位的寄存器。

    大家可以找找规律,16位的寄存器名称就是把32位寄存器名称中的E给去掉了。而8位的寄存器,把16位寄存器划分为高位和低位,高位用H(high)表示,低位用L(lower)表示。

    为什么要设计成这种嵌套关系?

    1.硬件不断发展的原因。将来要增加64位的寄存器,直接套在32位上就可以。既可以保持兼容,有可以自由扩展

    1. 存储不浪费。寄存器已经到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,0xAAAAAAAA0xAAAAAAAA就是立即数

    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

    相关文章

      网友评论

          本文标题:进一步学习通用寄存器

          本文链接:https://www.haomeiwen.com/subject/ekpmhqtx.html