问题描述
我在理解align
时遇到问题。
我尝试运行以下命令:
section .data
align 4
xs: dw 0xA1A2
ys: db 0xB1,0xB2,0xB3,0xB4
看看每个字节是什么,我希望它是内存中的一个连续块,如下所示:
for instance: 4 5 6 7 8 9 A B
(addr divisible by 4):[0xA2,0xA1,0x0,0xB1,0xB4]
为了使ys的地址可被4整除 相反,它更像是:
4 5 6 7 8 9
(addr divisible by 4):[0xA2,0xB4]
显然,我对align的工作方式有误解。任何人都可以清除一下吗?
解决方法
要获得所需的内容,需要将[1] "abc" "def" "ghi"
[2] "abc" "ghi" "xyz"
[3] "def" "ghi" "xyz"
[4] "ghi" "xyz" "abc"
[5] "abc" "def" "ghi" "xyz"
[6] "def" "ghi" "jkl" "xyz"
# (and so on)
指令直接放在align
数据之前。另外,要使其使用零字节作为对齐数据,您必须明确指定它。 (默认值为90h ys
。)像这样:
nop
这是因为该指令不的意思是“继续前进,将所有数据与该边界对齐”。它的意思是“在此特定点将发射的数据一次与该边界对齐”。