汇编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
相关产品推荐
相关产品推荐

