急!!!汇编程序想看下定义数据时,内存的分配情况。代码如下:

来源:百度知道 编辑:UC知道 时间:2024/06/28 16:53:52
DSEG SEGMENT ;数据段开始
DATA1 DB 'AB' ;原始数据
DATA2 DW 44,-44,'A',DATA1 ,'a' ;保存结果单元
DSEG ENDS ;数据段结束
SSEG SEGMENT STACK ;堆栈段开始
SKTOP DB 20 DUP(0)
SSEG ENDS ;堆栈段结束
CSEG SEGMENT ;代码段开始
ASSUME CS:CSEG,DS:DSEG, SS:SSEG
START: MOV AX,DSEG ;初始化数据段基址
MOV DS,AX
MOV AX,SSEG ;初始化堆栈段基址
MOV SS,AX
MOV SP,LENGTH SKTOP ;设置堆栈指针

MOV BYTE PTR DATA2,AL ;保存结果
MOV AH,4CH
INT 21H ;返回DOS
CSEG ENDS ;代码段结束
END START ;源程序结束
-----------------------------------------------------------------
我只想看这段代码的内存分配情况:
DSEG SEGMENT ;数据段开始
DATA1 DB 'AB' ;原始数据
DATA2 DW

这样知道原因了啊:
你以为在这里的DATA1表示的是‘AB’但是,好象不是的,用指令显示出来的是00-00表示原来的DATA1是偏移地址的意思,只能这么理解了。至于原因我还不知道,可能是汇编器的解释吧!因为我还没有见到有谁这么用的,根据实际情况只能这么理解了啊!!因为标号毕竟是汇编器的语法!
修改代码:DATA3 DW 01,DATA2,02 加个数据,再看内存,果然是地址。你自己可以试一下!!
你的那中数据定义的方法好象在C语言里面是不允许的,而在汇编里面被解释为地址了!