【发布时间】:2020-02-14 06:28:24
【问题描述】:
我想将一个 64 位整数的上半部分和下半部分分开,并将它们放入两个寄存器中。
【问题讨论】:
-
这是多次重复,但
uint32_t lower = bignum & 0xffffffff, upper = bignum >> 32; -
我知道你必须在 C 中移动位,但我只能在汇编中的寄存器中移动它,而寄存器只能保存 32 位,所以我不确定如何获得低 32 位。
-
您使用的是什么汇编器/硬件。如果您只有 32 位寄存器和一个 64 位数字 - 它已经在两个寄存器之间拆分。这是ARM还是x86?见Storing a 64 bit decimal in two 32 bit registers (ASSEMBLY - NASM 和Accessing and Modifying Upper Bits in x86 and x64 Registers
-
查看 C 编译器输出的函数,该函数采用 uint64_t 参数并返回高半部分或低半部分。
标签: assembly x86 cpu-registers