Opecode ALIGNB - HobbyOSs/opennask GitHub Wiki

これはデータの境界調整(バウンダリー合わせ)のために使われる

ALIGNB ? は、 ALIGN ?, RESB 1 の省略形
ALIGN疑似命令には数値Xが続く。このXは2の倍数でなければならない。例えば、2,4,8,16など。
この疑似命令は後に続く命令や即値の並びを強制することができる、そのメモリーアドレスはXの倍数となる。
前にある命令/データとALIGN疑似命令の間の空間はNULL命令(もしくはそれと互換のものMOV, EAX, EAXなど)で埋められる。
NULLはデータのアラインメントの区切りの中に入る。
XはALIGN疑似命令が参照されるデフォルトのアラインメント空間以上には大きくできない。
それはデフォルトのアラインメント空間以下の大きさでなければならない
  • 4.11.12 ALIGN and ALIGNB: Data Alignment
    • もし第二引数が指定されていなければ、
    • ALIGNのデフォルト値はNOP、そしてALIGNBのデフォルト値はRESB 1
    • RESBオペコードを使うと、naskは指定したバイト数だけ0x00で埋める
        align   4               ; 4byteまで埋める
        align   16              ; 16byteまで埋める
        align   8,db 0          ; NOPじゃなくて0x00で埋める 
        align   4,resb 1        ; BSSの中身を4バイトまで埋める 
        alignb  4               ; 上の行と同様