NASM中的ALIGN ALIGNB SECTALIGN

ALIGN与ALIGNB

NASM中的ALIGN与ALIGNB是用来字节对齐的,它们接收2个参数,第一个参数是必须的,表示对齐的字节数(必须是2的幂),第二个参数是可选的,表示为了对齐而进行填充的内容,如果不提供,默认用NOP填充(等价于RESB 1)。

align   4               ; align on 4-byte boundary        
align   16              ; align on 16-byte boundary        
align   8,db 0          ; pad with 0s rather than NOPs         
align   4,resb 1        ; align to 4 in the BSS         
alignb  4               ; equivalent to previous line

ALIGN和ALIGNB可以在struct中使用:

struc mytype2   
    mt_byte:        
       resb 1        
       alignb 2   
    mt_word:         
        resw 1         
        alignb 4  
    mt_long:         
        resd 1  
    mt_str:         
       resb 32 
endstruc    

需要注意的是,ALIGN和ALIGNB对齐的起始点是相对于当前SECTION的,而不是整个可执行文件的地址空间。

SECTALIGN

SECTALIGN是用来对SECTION进行字节对齐的。

在进行SECTION定义的时候,可以使用align=属性来进行字节对齐,而SECTALIGN macro不同,它可以在任何时候进行字节的对齐。

一旦使用了SECTALGIN,对齐字节数只能增加,不能减少。比如SECTALIGN 16之后,就无法SECTALIGN 8。

ALGIN和ALIGNB底层默认都是调用的SECTALIGN,如果想关闭这个默认实现,可以调用SECTALIGN OFF,如果想打开调用SECTALIGN ON。调用SECTALIGN ON/OFF只是关闭ALIGN和ALIGNB的默认实现,不影响SECTALIGN的使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值