汇编语言基础知识总结(三)

407 阅读2分钟

「这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战」。

通用寄存器的命名

在x86架构中 , 一共有四个通用寄存器,以16位x86为例, 分别取名为ax,bx,cx,dx 最大只能装16位的数据

在ARM架构中, 一共有31个通用寄存器,以64位arm为例 从x0到x30

在MIPS架构中,, 一共有32个通用寄存器 ,从00到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/

进制转换基础

  1. 计算机只识别二进制, 汇编中一般使用十六进制表示数据, 使用十六进制是为了方便程序员阅读和开发
  2. 二进制和十六进制转换
0101 1100 1001 0010  //二进制
 
 5    C    9    2    //每四位二进制数对应一位十六进制数

在x86汇编代码中,十六进制写法为如下:

mov ax,2000H  ;h结尾表示十六进制, h不区分大小写

在ARM汇编代码中,十六进制写法为如下:

mov R0,#0x2020202A ;使用0x开头表示  #是固定写法,暂不用理会