• 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的使用。

  • 相关阅读:
    扩展中国剩余定理
    bzoj 3816&&uoj #41. [清华集训2014]矩阵变换
    THUSC2017
    bzoj 4521: [Cqoi2016]手机号码
    bzoj 4871: [Shoi2017]摧毁“树状图”
    bzoj 2300 : [HAOI2011]防线修建
    bzoj 3853 : GCD Array
    HEOI 2017 游记
    bzoj3926: [Zjoi2015]诸神眷顾的幻想乡 广义后缀自动机模板
    bzoj 4310 跳蚤
  • 原文地址:https://www.cnblogs.com/chaoguo1234/p/14621884.html
Copyright © 2020-2023  润新知