当前位置: 首页 > 知识库问答 >
问题:

移动ARM Arch64寄存器中的32位常数

何嘉运
2023-03-14

我正在寻找一种方法来移动arch64寄存器x1中的任何32位常数。

是否有一种方法可以执行

共有1个答案

汤才捷
2023-03-14

参见MOVK。

$ echo "long foo() {return 0xaf41d32c;}" | aarch64-linux-android-gcc -O2 -S -o- -xc -
    .cpu generic+fp+simd
    .file   ""
    .text
    .align  2
    .global foo
    .type   foo, %function
foo:
    mov x0, 54060
    movk    x0, 0xaf41, lsl 16
    ret
    .size   foo, .-foo
    .ident  "GCC: (GNU) 4.9 20140827 (prerelease)"
    .section    .note.GNU-stack,"",%progbits
 类似资料:
  • 基本上指令有8->16、8->32、8->64、16->32和16->64。 32->64的转换在哪里?我必须使用签名版本吗? 如果是的话,您如何使用完整的64位来表示无符号整数?

  • 本文向大家介绍verilog 移位寄存器,包括了verilog 移位寄存器的使用技巧和注意事项,需要的朋友参考一下 示例 具有异步复位功能的N位深移位寄存器。            

  • 本文向大家介绍Intel x86 Assembly& Microarchitecture 32位寄存器,包括了Intel x86 Assembly& Microarchitecture 32位寄存器的使用技巧和注意事项,需要的朋友参考一下 示例 英特尔生产80386时,他们从16位处理器升级到了32位处理器。32位处理意味着两件事:要处理的数据都是32位,而要访问的内存地址是32位。为此,他们仍然

  • 我可以使用MOV指令将存储在内存中的数据项移动到我选择的通用寄存器中。 现在,不要向我开枪,但以下是如何实现的:

  • 我的数字类型是有符号二的补码整数。 在内存寄存器%rdi/edi/di中,我有0xFFFFFFFF。在%rsi/esi/si中,我有0x8000000。 如何正确添加这些? 我认为答案是: 由于我添加的是完整的32位寄存器,因此可以添加完整的0xFFFFFFFF和0x8000000。 我把一个有符号整数加到一个有符号整数上,它们都是32位的。我实际上是在加-2147483648和0x8000000

  • 我试图比较Peter Cordes在回答“将CPU寄存器中的所有位设置为1”的问题时提到的方法。 因此,我编写了一个基准测试,将所有13个寄存器设置为除、和之外的所有位1。 代码如下所示<代码>乘以32 nop用于避免DSB和LSD影响。 我测试了他提到的以下方法,以及这里的完整代码 为了使这个问题更简洁,我将使用替换下表中的。 下表显示,从组1到组3,当使用64位寄存器时,每个循环多1个周期。