求教汇编高手,汇编变量定义

2019-07-15 19:34发布

求教汇编高手,汇编中变量的定义,以前都是用equ直接分配地址给变量,看网上说这样不好,试了一下用 db,dw 定义,
可为什么不能通过,data    segment就有报错,编译软件使用的是keil uv2,是编译软件的问题吗?
data    segment

buffer1 db 23 dup(?)
buffeer db 0ah,0dh,'$'
buffer2 db 30 dup(?)
buffer3 db 8 dup('0')
count   db 5
handle  dw ?
del     db 8 dup('0')
x       db ?
data    ends

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
woodmice
1楼-- · 2019-07-16 00:20
EQU 不是地址分配,是等价定义语句,定义的是啥等价于啥;
只有 DW DB DD 这些语句才是带地址分配的语句,本身的意义只是给指定类型和长度的数据保留地址空间;
实际分配地址是在链接时完成的;

data segment 只能定义数据,不能定义常数,也就是说你只能用问号保留地址空间,不能指定其内容;

要定义有确定内容的数据,应该在 code segment 内定义
dirtyman
2楼-- · 2019-07-16 04:10
woodmice 发表于 2014-5-28 12:06
EQU 不是地址分配,是等价定义语句,定义的是啥等价于啥;
只有 DW DB DD 这些语句才是带地址分配的语句, ...

谢谢解答,但还是不明白,上面的程序段编译器报的是语法错误,DATA   SEGMENT语法存在问题吗?可从网上下的实例都是这样写的。而buffer1 db 1  也是报语法错误,如果改成buffer1:  db 1就可以通过,怎么跟网上的实例不一样呢?


woodmice
3楼-- · 2019-07-16 08:48
dirtyman 发表于 2014-5-28 13:58
谢谢解答,但还是不明白,上面的程序段编译器报的是语法错误,DATA   SEGMENT语法存在问题吗?可从网上下 ...


你说的这个问题是由于编译器不同造成的,不同软件商提供的编译器细节上有区别很正常;
甚至同一厂家为了和其他厂家的兼容性,会在新版本中修改旧版中的既定细节,引起代码重用出错的问题。
dirtyman
4楼-- · 2019-07-16 12:48
woodmice 发表于 2014-5-29 11:05
你说的这个问题是由于编译器不同造成的,不同软件商提供的编译器细节上有区别很正常;
甚至同一厂家为了 ...

了解了,谢谢解答!

一周热门 更多>