assembly - 将64位寄存器的高32位清零

标签 assembly x86-64 machine-language

使用amd64汇编,将64位寄存器的前32位清零的最佳方法是什么?将eax未涵盖的rax位清零?看来我不能和整个寄存器反对一个64位常量。

最佳答案

movl %eax, %eaxmov eax, eax,取决于使用的汇编程序。

请参阅:英特尔®64和IA-32架构-软件开发人员手册,Volume 1,3.4.1.1:64位模式下的通用寄存器。

32位操作数生成32位结果,在目标通用系统中将其零扩展为64位结果
登记。


关于@HansPassant的评论,我还应该添加:7.3.1.7:

MOVSXD指令对64位数据进行操作。它将32位值符号扩展为64位。

关于assembly - 将64位寄存器的高32位清零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21439289/

相关文章:

assembly - 在 RISC-V 汇编中写入几个 MMIO 寄存器位的更好方法?

assembly - 操作系统如何阻止程序访问内存?

不能在 GCC 内联汇编中强制使用 64 位寄存器

c - 尝试获取addq,但不断获取leaq

assembly - 第一个计算机程序是如何创建的?

c - 'asmlinkage' 修饰符是什么意思?

c++ - MSVC : Reading a specific 64 or 32 bit register (e. g。 R10) 64 位代码?

java - 在 i386 Mac OS 上加载 java x86_64 jnilib

compiler-construction - 有人可以告诉我计算机编程原理的基本知识吗?