我知道在MASM中有SIZEOF
和TYPE
,但是NASM呢?正如我发现的,它没有这些。
例如:
array dw 1d, 2d, 3d, 4d
arrSize db $-array ;4 elements * 2 bytes (size of one element) = 8 bytes
这就是我如何在NASM中对SIZEOF array
进行替换。如果我想要数组元素的数量,我可以将 arrSize 除以2(如果数组元素是字)。但如果数组元素是双字(32位),我需要除以4。
在NASM中有没有来自MASM的TYPE
的替代品?如果没有,我如何让程序确定元素本身的大小?
1条答案
按热度按时间imzjd6km1#
NASM保持其指令简单,并具有最少的自动化功能。
它似乎不是MASM
type
、sizeof
和length
运算符的对应指令。幸运的是,NASM采取了一种比在汇编中引入大量类型更好的方法:它开发了一个非常丰富和富有表现力的宏系统。
请考虑以下简单的宏:
你可以像
array my_array, dd, 1, 2, 3
一样使用它。不完全像my_array dd 1, 2, 3
,但很接近。然后,您可以:
my_array_size
。数组的大小(以字节为单位)。my_array_type
。一个数组项的大小(以字节为单位)。my_array_lengthof
。数组中的项目数。您可以调整宏,使其适合您的个人风格(例如:生成
my_array.size
和类似的,或者生成隐式地采用项声明指令的arrdb
、arrdw
、arrdd
变体)。示例:
对生成的二进制文件使用
ndisam -b32
: