You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NASM中是否有MASM的TYPE替代方案?如何自动获取数组元素大小?

NASM中替代MASM TYPE操作符的方案

NASM没有提供和MASM的TYPE操作符完全等价的内置功能,但可以通过以下几种方式自动确定数组元素的大小:

1. 用宏模拟TYPE功能

定义一个宏来匹配不同的数据类型,返回对应的字节大小:

%macro TYPE 1
    %ifidn %1, db
        1
    %elifidn %1, dw
        2
    %elifidn %1, dd
        4
    %elifidn %1, dq
        8
    %else
        %error "不支持的数据类型"
    %endif
%endmacro

使用示例:

array   dw 1, 2, 3, 4
arrSize equ $-array          ; 数组总大小,8字节
elemSize equ TYPE dw         ; 获取字类型的大小,2字节
elemCount equ arrSize / elemSize  ; 元素个数,4

2. 关联类型符号自动计算

通过定义一个和数组元素同类型的符号,利用地址差获取元素大小:

elemType dw 0  ; 该符号的类型与数组元素一致
array    dw 1, 2, 3, 4
elemSize equ $ - elemType    ; 自动得到元素大小2字节
elemCount equ ($ - array) / elemSize

后续如果修改数组类型(比如改成dd),只需同步修改elemType的类型,elemSize会自动更新,无需手动调整数值。

3. 使用NASM的%size伪指令

%size伪指令可以返回指定符号的字节大小,通过定义单个元素的符号来获取:

elem dw 0
elemSize equ %size(elem)     ; 返回elem的字节大小2
array dw 1,2,3,4
elemCount equ ($-array)/elemSize

内容的提问来源于stack exchange,提问作者Powarito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 04:40:39