gpt4 book ai didi

assembly - .quad 指令如何在汇编中工作?

转载 作者:行者123 更新时间:2023-12-04 15:26:44 27 4
gpt4 key购买 nike

我无法理解 .quad函数在汇编中起作用。

从我在线阅读的内容来看,它为当前部分中的每个表达式生成一个 64 位二进制补码值。我明白什么是二进制补码以及该部分引用的行 .quad被称为。

何时何地 .quad通常在汇编中调用?
另外,为什么要使用 .quad生成什么?

最佳答案

.quad 指令用于定义 64 位数值。以类似的方式 .byte 指令如何工作。

.quad 0x123456789ABCDEF0, 2, 3

将编译为 24 字节:
F0 DE BC 9A 78 56 34 12 02 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00

(为了比较, .byte 0x12, 2, 3 将编译为三个字节 12 02 03 )。

Where and when is .quad usually called in assembly?



嗯..它是汇编指令,在编译过程中使用,它只会产生机器代码。它不能被“称为”。您可以调用/执行由它定义的机器代码,但这是非常罕见的使用模式,通过以数字方式将它们定义为操作码来生成指令,如果您手头有可以从助记符生成它的汇编程序。

Also, why use .quad to generate anything?



如果要在数据段中设置 64b 数 1000000000000 (1e12),将其定义为 .quad 1000000000000 比计算单独的字节值并将其定义为 .byte 0, 16, 165, 212, 232, 0, 0, 0 方便得多,在 .quad 的情况下,汇编器将进行解析和拆分成字节给你。

.quad .L3 (from comment)


.L3 是代码中某处的标签,所以它是一些内存地址,所以它是一些 64 位数字(对于具有平面内存映射的 x86 64b 目标平台)。如果您想在内存中的某个地方使用该值,那么使用 .quad .L3 是一种简单的方法,即如何使用该值( .L3 标签的地址)生成 8 个字节。
switch 代码用于间接跳转,在由开关值索引的内存中选择特定值,然后跳转到表中存储在内存中的地址。类似于 jmp [table + index*8] ,当 table+index*8 指向 .L3 值时,那么 jmp 会跳转到 .L3 地址。

关于assembly - .quad 指令如何在汇编中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43005411/

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