我将准确列出我不明白的内容,并将我无法理解的部分也显示给您。
首先,
.Align 指令
- .align 整数,填充。.align 指令使生成的下一个数据以模整数字节对齐
1.~? :“导致生成的下一个数据以模整数字节对齐”意味着什么? 我可以推测生成的下一个数据是内存到寄存器的传输,不是吗?模将意味着除法的其余部分。我不明白“要对齐模整数字节”.......
简单数据声明的剩余部分是什么,由剩余部分对齐生成的下一个数据将如何有用?如果下一个数据是模对齐的,也就是说下一个生成的数据,无论这意味着什么,是整数的余数吗?这完全没有意义。
.align 8
例如,在 x86 中针对从 C 编译的数据字节发出的 .align 指令char
具体是char CHARACTER = 0;
什么?还是直接使用该指令专门编码,而不是编译 C 后的初步汇编代码?我在 Assembly 中进行了调试,并注意到任何 C/C++ 数据声明,如chars
、ints
、floats
等,都会将指令插入.align 8
到它们中,并添加其他指令,如.bss
、.zero
、.globl
、.text
、.Letext0
、.Ltext0
。
所有这些指令的目的是什么,或者至少是我的主要要求?我学习了很多主要的 x86 汇编指令,但从未被介绍或指出所有这些奇怪的指令。它们如何影响操作码,它们都是必需的吗?