我无法理解该.quad功能在装配中的工作原理.
从我在线阅读的内容来看,它为当前部分中的每个表达式生成一个64位二进制补码值.我理解二进制补码是什么以及该部分引用.quad被调用的行的事实.
.quad通常在汇编中调用的地点和时间?
另外,为什么.quad要用来生成任何东西?
该.quad指令用于定义64位数值.以类似的方式.byte指令如何工作.
.quad 0x123456789ABCDEF0, 2, 3
Run Code Online (Sandbox Code Playgroud)
将编译为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
Run Code Online (Sandbox Code Playgroud)
(为了比较,.byte 0x12, 2, 3将编译为三个字节12 02 03).
通常在汇编中调用.quad的地点和时间?
嗯..它是汇编程序指令,在编译期间使用,它只会生成机器代码.它不能被"召唤".您可以调用/执行由它定义的机器代码,但这是非常罕见的使用模式,通过以数字方式将它们定义为操作码来生成指令,如果您有可以从助记符生成它的手头汇编程序.
另外,为什么要使用.quad生成任何东西?
如果要在数据段中设置64b数字1000000000000(1e12),则将其定义为.quad 1000000000000比计算单独的字节值并将其定义为更方便.byte 0, 16, 165, 212, 232, 0, 0, 0,在.quad汇编程序将执行解析并拆分为字节的情况下您.
.quad .L3(来自评论)
.L3在代码中的某处是标签,因此它是一些内存地址,因此它是一些64位数(对于具有平面内存映射的x86 64b目标平台).如果你想在内存中的某个地方拥有该值,那么使用这个.quad .L3简单的方法如何用该值(.L3标签的地址)生成8个字节.
该switch代码用于间接跳转,选择由开关值索引的内存中的特定值,然后跳转到存储在表中的内存中的地址.有点像jmp [table + index*8],当table+index*8点.L3数值时,那么jmp会跳转到.L3地址.
| 归档时间: |
|
| 查看次数: |
4742 次 |
| 最近记录: |