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

汇编TYPE/LENGTHOF/SIZEOF对数组字符串的作用及取值计算问题

MASM 中TYPE、LENGTHOF、SIZEOF操作符的工作逻辑

以下三个都是MASM汇编器提供的编译期操作符,所有计算都在编译阶段完成,最终会替换为常量写入生成的机器码中,作用逻辑如下:

  • TYPE:返回目标数据声明时的基础类型对应的单元素字节大小,常见返回值:BYTE返回1、WORD返回2、DWORD返回4、QWORD返回8,和数据集的元素总数无关。
  • LENGTHOF:返回目标数据集的元素总个数,DUP声明的批量元素会自动统计总数,字符串的每个字符独立算作1个BYTE元素。
  • SIZEOF:返回目标数据集占用的总字节数,等价于 TYPE 目标 * LENGTHOF 目标 的计算结果。
习题答案

给定数据定义:

.data
    myBytes BYTE 30h,70h,0A0h,60h
    myWords WORD 3 DUP(?),4000h
    myString BYTE "hello!!"

各指令执行后EAX的值如下:

  • a. mov eax,TYPE myBytes:myBytes基础类型为BYTE,TYPE返回1,EAX = 0x1
  • b. mov eax,LENGTHOF myBytes:myBytes共声明4个BYTE元素,LENGTHOF返回4,EAX = 0x4
  • c. mov eax,SIZEOF myBytes:总字节数=1*4=4,EAX = 0x4
  • d. mov eax,TYPE myWords:myWords基础类型为WORD,单元素占2字节,TYPE返回2,EAX = 0x2
  • e. mov eax,LENGTHOF myWords:3 DUP(?)对应3个元素,加额外声明的4000h共4个元素,LENGTHOF返回4,EAX = 0x4
  • f. mov eax,SIZEOF myWords:总字节数=2*4=8,EAX = 0x8
  • g. mov eax,SIZEOF myString:字符串"hello!!"共7个字符,每个占1字节,总大小7,EAX = 0x7

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:36:07