我会列出我不明白的东西,并向您展示我无法理解的部分。“.align”x86汇编程序指令是做什么的?
首先,
.align伪指令
- .align伪整数,垫。 .align指令导致生成的下一个数据以整数个字节对齐
1.〜? :“”隐含的原因导致生成的下一个数据以模数整数字节对齐?“我可以推测,生成的下一个数据是内存到内存的转移,不是吗? Modulo意味着一个部门的其余部分。我不明白“对齐模整数字节” .......
这将是一个简单的数据声明的剩余部分,以及如何将在未来产生的数据被一个余数排列有用吗?如果下一个数据是模对齐的,那就是说下一个生成的数据,无论如何意味着,是整数的余数?这绝对没有意义。
在x86中针对从C char
编译的数据字节(即char CHARACTER = 0;
)发出的.align指令,具体指的是.align 8
指令是什么?或者直接用该指令编码,而不是在编译C之后的初步汇编代码?我已经调试在大会和发现任何C/C++数据声明,像chars
,ints
,floats
等将插入指令.align 8
他们每个人,并添加其他指令像.bss
,.zero
,.globl
,.text
,.Letext0
,.Ltext0
。
什么是所有这些指令,或至少我主要问?我学习了很多主要的x86汇编指令,但从未被引入或指出所有这些奇怪的指令。它们如何影响操作码,并且都是必需的?
这只是表示汇编器会将下一个字节放在一个可以被* integer *整除的地址上,所以如果这样的话。最后一个字节放在'0x0eda',那么通常下一个字节将放在'0x0edb',但有一个'.align 8'指令,下一个字节将放在'0x0ec0',下一个地址这是可以被8整除的 – microtherion
请注意.align适用于汇编程序输出的任何内容,例如机器代码,而不仅仅是您在C中称为“数据” – nos