请教一道简单的汇编语言题

设某数据段定义如下:
DATA SEGMENT
DA1 DB ‘COMP’,00H,9AH
DA2 DB 6 DUP(?)
COUNT EQU $-DA1
DATA ENDS
试回答:
(1) DA1+2字节单元的内容是_____。
(2) COUNT的值是______。

不要只填空,帮忙详细解释一下定义的内存变量的储存方式,比如说汇编程序是怎样处理字符‘COMP’,如何为之分配空间?伪指令语句语句“COUNT EQU $-DA1”是不是也被储存在逻辑数据段内?谢谢!

设某数据段定义如下:
DATA SEGMENT ;定义数据段
DA1 DB ‘COMP’,00H,9AH ;按字节定义数据 先从DA1地址开始

;存放一个字符串‘COMP’再存放00H和9AH
DA2 DB 6 DUP(?) ;继续从下一个地址DA2开始 为程序保留6个字节的存储空间
COUNT EQU $-DA1 ;EQU为等价伪指令 定义COUNT 等价于 $-DA1
; $-DA1 中 $代表目前指令指针所指的地址
;比DA1地址多了12个字节的地址空间,即$=DA1+12
; $-DA1 =12

DATA ENDS
试回答:
(1) DA1+2字节单元的内容是( 'M' )。;;按顺序DA1+2字节单元比DA1往下走3个单元
(2) COUNT的值是( 12 )。

伪指令语句语句“COUNT EQU $-DA1”在逻辑数据段内不会分配地址的,其作用在汇编时,用$-DA1(即12)替换指令中的COUNT符号。

'M' 为字符M的ASCII编码。追问

谢谢!我还有一些问题。这个, $代表目前指令指针所指的地址,那么这个指令指针它是怎么走的?是不是我分配一个内存空间指令指针就加一? 比如说执行这条语句“ DA2 DB 6 DUP(?)”指令指针走6个(加6)?执行这条指令“COUNT EQU $-DA1 “后指令指针走1个? 是这么回事吗?

追答

$---在这里指的是COUNT EQU $-DA1 这个为指令语句的地址标号 经推算可知为DA1+12
执行完COUNT EQU $-DA1 指令后地址不会增1,因为这条指令并不为数据分配地址。
还有什么问题都可以找我,俺回答的比较详细了,别忘了给俺加点分。

在此叫指令指针的确不妥,应叫做数据指针用来分配地址更好些。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-08
DA1 DB ‘COMP’,00H,9AH

这个语句让系统为DA1开始分配6个字节的空间,分别是:'C','O','M','P’,00H,9AH,其中DA1+0的内容是'C',DA1+1的内容是'O',DA1+2的内容是'M',……以此类推。

DA2 DB 6 DUP(?)
这个语句让系统从DA2开始分配6个字节,不初始化内容。所以COUNT的值是12,因为6+6=12。本回答被网友采纳
第2个回答  2012-07-08
$代表目前指令指针所指的地址,说法不正确,应该是当前被汇编程序翻译的语句的地址。
指令指针是CS:IP,不要混淆概念

COUNT EQU $-DA1 不会分配地址,当然不会加了