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 ; 上の行と同様