汇编语言EQU命令

来源:百度知道 编辑:UC知道 时间:2024/09/23 04:54:26
VAP1 DB ’12345’
VAP2 DW 10 dup(?)
LEN EQU $-VAR1
则LEN= 25,为什么??如何计算的?
A1 DW 0FF00H,5E04H
A2 DB 20DUP(20)
A3 DD?
LEN EQU $-A1
问LEN的值是多少?
LEN=28
为什么?如何计算的 ,我现在想知道的是如何计算这类型的题,如果得出LEN的值是多少?要过程的,就有一个答案不理解也没用。

首先你要知道$代表当前地址,因为db代表字节,所以var1站了5个字节(0~4),dw代表字为两个字节,又因为开辟了10个字的空间,所以var2占了20个字节(5~24),接下来为len分配的空间地址就是25了,用25-0=25,len=25

5个字节与10个字。。。,10*2+5*1=25
补充:2个字,20个字节,1个双字。。。。2*2+20*1+4*1=28

  EQU不是指令集,而是伪指令,一般我们常使用的MASM5.0以上都常用这个伪指令。它不是80X86的指令集合。而汇编在第一次扫描时只扫描了指令,而将伪指令中的东西作为“动态内容”作了标记而已。所以在第一次扫描所得到的清单中是没有看到它占用内存的。所以不会计算其中的数据的。而第二次扫描才能得到。
  指令集是属于机器CPU的,因有的,一个类型CPU就有这样一个指令集。而伪指令则是由汇编软件提供的,比如MASM5.0中提供了EQU的伪指令,那么汇编时是由于MASM5.0进行运算的。而计算空间时所得到的清单文件是关于指令的,所以伪指令并没有计算在内。
  不同类型的CPU会有不同的指令集,不管你使用什么样的汇编软件,同一个类型 的CPU指令集是不会变的!而伪指令是由汇编软件提供,不同的汇编软件有不同的伪指令集。
  CPU的发展和软件的发展都有一个基础,因此出现了向下兼容的现象。80386与80286相比,只在80286指令集的基础上增加了几个指令而成的。而软件也是,MASM6.0只是在5.0部分伪指令集的基础上增加了几条伪指令而已。但6.0却还有一大进步就是将5.0中的两次扫描一次完成。也就是说6.0只有一次扫描。而5.0却是两次扫描。