zoukankan      html  css  js  c++  java
  • 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的使用。

  • 相关阅读:
    iphone, iphone4, ipad 图标和背景图片问题(转)
    ios项目icon和default图片命名规则 (转)
    ios判断设备是iphone还是ipad
    cocos2d学习(一)helloWorld
    判断设备是否是 iphone5
    字节对齐(转)
    NSArray排序
    C++复习之运算符重载,数组排序,vector
    socket编程(转)
    win32下的socket编程
  • 原文地址:https://www.cnblogs.com/chaoguo1234/p/14621884.html
Copyright © 2011-2022 走看看