我调用.p2align
了这个汇编指令,它是由gcc
C程序源生成的.
据我所知,对齐访问比未对齐访问更快,asm
程序也不会自动对齐内存位置或优化内存访问,因此您必须这样做.
我真的无法读到这一点.p2align 4,,15
,尤其是最后一部分15
.
正如许多文档报道的那样,跳过明显gcc
产生2 ,
而不是1 的事实; 我得到的是这段asm
内存以这样的方式对齐内存,即每个位置占用2 ^ 4位,这意味着16位,所以我认为WORD
在这种情况下a 是16位长是公平的.
现在15
可能意味着什么?这是多少比特?计数是从0
这样开始的,"实际"数量是16而不是15?
编辑:
我只是将相同的C源转换为32位和64位asm代码,内存总是以相同的方式与同一指令对齐.p2align 4,,15
.这是为什么 ?
Bre*_*ale 22
该.p2align
指令记录在此处.
第一个表达式是所需的两个字节对齐的幂..p2align 4
焊盘在16字节边界上对齐..p2align 5
- 32字节边界等
第二个表达式是用作填充的值.对于x86,最好留下这个并让汇编程序选择,因为有一系列指令是有效的无操作.在一些对齐指令中,您将看到0x90
,这是NOP
指令.
最后一个表达式是填充的最大字节数 - 如果对齐需要更多,则跳过该指令.在这种情况下 - 4,,15
它什么都不做,因为15
无论如何都是产生16字节对齐所需的最大字节数.