gpt4 book ai didi

assembly - 伪操作和机器操作的区别?

转载 作者:行者123 更新时间:2023-12-05 03:10:12 25 4
gpt4 key购买 nike

在学习汇编语言编程时,我遇到了“Pseudo-op”和“Machin-op”这两个术语。我不确定它们的功能是什么,它们之间有何不同?

最佳答案

除了汇编程序指令外,RISC 体系结构通常具有扩展为多条指令的伪操作。

最常见的类型是伪操作,用于将 32 位常量(例如地址)存入寄存器所需的指令序列。由于 32 位固定指令没有空间容纳任意 32 位立即数,因此机器无法在一条指令中完成。但是,将这对指令与 16 位立即数分开通常没有任何好处,手动进行操作会很烦人。 (IIRC,一些超标量有序 CPU 在背靠背执行时识别此类对,即使它们修改相同的寄存器,仍然并行运行它们。)ARM 汇编程序伪指令 MOV32ADRL 执行此操作。

另一个有趣的例子是 ARM 的 ldr r0, =0x12345678 。它总是汇编成一条指令,但可以从两种策略中进行选择:如果常量可以表示为立即数 ( using ARM's barrel shifter ),则汇编器使用 MOV。如果不是,它会将常量放入附近的文字池并使用 PC 相关负载。所以这个伪操作可以发出指令 数据(我认为仍然在同一部分)。

(LDR 指令的非伪操作形式是支持 ARM 各种寻址模式的正常加载寄存器形式,例如 ldr r0, [r1, r3, lsl #2]r1 + r3 <<2 加载)。 因此根据操作数的不同,相同的助记符可以是伪操作或机器指令


MIPS 将伪指令发挥到极致,正常的 ABI 至少保留 32 个架构寄存器中的一个,供汇编器生成的伪指令用作临时寄存器! (我猜 MIPS 设计者认为 32 确实比需要的多,因为在标准 ABI 中,中断处理程序异步破坏 2 个其他寄存器是正常的,这使得用户空间代码使用它们不安全。我想这简化了设计 vs . 让硬件在中断时保存/恢复架构状态方面有更多帮助,但我没有查看细节。)

关于assembly - 伪操作和机器操作的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40778734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com