「这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战」。
通用寄存器的命名
在x86架构中 , 一共有四个通用寄存器,以16位x86为例, 分别取名为ax,bx,cx,dx 最大只能装16位的数据
在ARM架构中, 一共有31个通用寄存器,以64位arm为例 从x0到x30
在MIPS架构中,, 一共有32个通用寄存器 ,从31
在x86架构中,不同精度cpu 通用寄存器名称有所区分:
;在x86架构中,不同精度cpu 通用寄存器名称有所区分:
0x1122334455667788
================ rax (64 bits) ;字母r开头表示64位寄存器 r是registers的意思
======== eax (32 bits) ;e开头表示32位寄存器 e是扩展的意思 extend
==== ax (16 bits) ;默认ax表示16位寄存器
== ah (8 bits)
== al (8 bits)
e是扩展的意思,在386以前,CPU的寄存器的16位的,用AX,BX等表示, 386及以后的CPU,它们的寄存器的32位的,所以就用多一个E来表示
在ARM架构中,不同精度cpu 通用寄存器名称同样有所区分:
0x1122334455667788
================ xN (64 bits) ;x开头表示64位寄存器 从x0到x30
======== WN (64 bits) ;WN表示64位寄存器中的低32位 64位cpu中才有 32位中没有W这种命名
======== RN (32 bits) ;字母R开头表示32位寄存器 不一定是大写也有小写
在64位cpu中WN是XN的低32位, 属于xN的一部分, WN数据改了,xN也会跟着一块改, 也就是说WN无法独立存在, 同时ARM中并没有提供16位和8位寄存器的访问和使用
汇编代码初探
工具: godbolt.org/
进制转换基础
- 计算机只识别二进制, 汇编中一般使用十六进制表示数据, 使用十六进制是为了方便程序员阅读和开发
- 二进制和十六进制转换
0101 1100 1001 0010 //二进制
5 C 9 2 //每四位二进制数对应一位十六进制数
在x86汇编代码中,十六进制写法为如下:
mov ax,2000H ;h结尾表示十六进制, h不区分大小写
在ARM汇编代码中,十六进制写法为如下:
mov R0,#0x2020202A ;使用0x开头表示 #是固定写法,暂不用理会