美文网首页
ArmV8 A64汇编指令ADD

ArmV8 A64汇编指令ADD

作者: 风海铜锣君 | 来源:发表于2022-02-20 17:53 被阅读0次

ADD 立即数

示例:

add w0, w1, #255

等价于C语言的:

uint32_t w0, w1;
w0 = w1 + 255;

由于立即数ADD指令码中立即数的编码位数为12位,所以立即数的数据范围为0<=imm<=4095

注:但是在测试该汇编语句时,我发现输入4096依然能正确运行,这应该是该指令码被另行转码的结果,但是根据文档描述不应该输入4096及以上的立即数。

ADD 寄存器

示例:

add w0, w1, w2

等价于C语言的:

uint32_t w0, w1, w2;
w0 = w1 + w2

ADD 寄存器 + 位移操作

示例:

add w0, w1, w2, lsl #1

等价于C语言的:

uint32_t w0, w1, w2;
w0 = w1 + (w2 << 1)

移位操作的立即数必须大于等于0并且小于移位寄存器的位数,由于w寄存器是32位,所以也就是说,立即数应该小于32。(如果是x寄存器,则应该小于64)。

注:除了lsl外,还有lsr(逻辑右移),以及asr(算数右移)。

ADD 寄存器 + 位扩展操作

示例:

add w0, w1, w2, sxtb

等价于C语言的:

uint32_t w0, w1, w2;
w0 = w1 + (uint32_t)((int32_t)((int8_t)(w2&0xff)));

sxtb的含义是将一个寄存器的值取低八位进行 带符号扩展 为寄存器的位数,举例假设w1值为3000,w2的值为255,由于255的低八位为0xff,对它进行带符号扩展为32位就是0xffffffff,也就是-1,那么add w0, w1, w2, sxtb的结果为3000+(-1)=2999。其中最后一个字母b表示八位byte。头一个字母s表示带符号扩展。

其它位扩展操作还有:uxtb(低八位无符号扩展)、sxth(低十六位带符号扩展)、uxth(低十六位无符号扩展)等。

相关文章

  • ArmV8 A64汇编指令ADD

    ADD 立即数 示例: 等价于C语言的: 由于立即数ADD指令码中立即数的编码位数为12位,所以立即数的数据范围为...

  • 学习汇编--写一个完整的汇编(一)

    汇编指令 汇编有两类指令组成汇编指令如move,add,sub等,有对应的机器指令,可以被编译为机器指令最终被CP...

  • 汇编三

    完整的汇编指令:#### 汇编由两种指令组成1.汇编指令如mov、add、sub等有对应的机器指令,可以被编译为机...

  • 汇编语言_05

    编写一个完整的汇编 汇编语言由2类指令组成汇编指令:如mov、add、sub等;有对应的机器指令,可以被编译为机器...

  • 汇编(五)

    编写一个完整的汇编 汇编语言由2类指令组成 汇编指令如mov、add、sub等有对应的机器指令,可以被编译为机器指...

  • 汇编(五)

    编写一个完整的汇编 汇编语言由2类指令组成 汇编指令如mov、add、sub等有对应的机器指令,可以被编译为机器指...

  • 汇编基础(三)

    编写一个完整的汇编 汇编语言由2类指令组成1.汇编指令如mov、add、sub等有对应的机器指令,可以被编译为机器...

  • A64汇编 VS UAL汇编的差异

    现在的ARMv8中存在两种形式的汇编指令集,一种为兼容32系统架构的UAL汇编(UAL是对之前A32及T32汇编指...

  • 逆向笔记(三)-汇编指令

    汇编指令 针对汇编来说,汇编指令是必须了解的,而且汇编中汇编指令比较多,但是每一个汇编指令对应的机器码是固定不变的...

  • 16位汇编简记

    汇编: 汇编即是机器指令助记符,机器指令让cpu工作。像是mov、jmp、jcxz等汇编指令都有对应的机器指令。有...

网友评论

      本文标题:ArmV8 A64汇编指令ADD

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