[应用相关] 汇编程序equ与data的区别是啥,求助

[复制链接]
961|16
 楼主| stly 发表于 2019-9-22 11:36 | 显示全部楼层 |阅读模式
chenjunt 发表于 2019-9-22 11:41 | 显示全部楼层

data定义变量在DATA区,编译器会检查空间范围
equ是宏定义,只是简单替换
songqian17 发表于 2019-9-22 11:45 | 显示全部楼层
这个取决于你的工具是如何定义这些伪指令的。。。。
chenho 发表于 2019-9-22 11:48 | 显示全部楼层
data定义变量区的数据,equ只是符号,在预处理时就处理掉。
happy_10 发表于 2019-9-22 11:54 | 显示全部楼层
equ的用法是符于后面的数据为别名,至于是地址还是立即数在程序中体现。
bqyj 发表于 2019-9-22 12:00 | 显示全部楼层
没有用过汇编语言。
zhuhuis 发表于 2019-9-22 12:04 | 显示全部楼层
equ是宏定义,只是简单替换。。。
zhuhuis 发表于 2019-9-22 12:09 | 显示全部楼层

汇编没怎么使用,C语言更通用一些。
pangb 发表于 2019-9-22 12:14 | 显示全部楼层

记着一个原则:EQU只是作宏一样的替换,如果你不能确定一表达式中EQU的内容会不会被错误分析为(由于优先级或其它语法问题)其它信息,那就请(),以保证你得到正确的结果
zhuhuis 发表于 2019-9-22 12:19 | 显示全部楼层

1、EQU 指令用于将一个数值或寄存器名赋给一个指定的符号名。
格式: 符号名 EQU 表达式
符号名 EQU 寄存器名
表达式必须是一个简单再定位表达式。
用 EQU 指令赋值以后的字符名,可以用作数据地址、代码地址、位地址或者直接当做一个立即数使用。
比如:
s equ bx+si
mov cx,[s]
那么上面两句代码相当于如下指令:
mov cx,[bx+si]
2、DATA 指令用于将一个内部 RAM 的地址赋给指定的符号名。
格式: 符号名 DATA 表达式
数值表达式的值在 0-255 之间,表达式必须是一个简单再定位表达式。
比如:
TEM DATA 50H
tem即是一个地址
DATA(数据地址赋值命令)。
功能:将数据地址或代码赋与规定的字符名称。
格式:WATER DATA 30H。
※EQU与DATA区别:
1)、EQU须先定义后使用,而DATA可无须如此。
2)、EQU可把汇编符号赋给一个字符名称,而DATA
伪指令不能。
3)、DATA可用于表达式,而EQU不行。
 楼主| stly 发表于 2019-9-22 12:23 | 显示全部楼层
我提出的用法是在汇编程序当中的,还是想知道关于汇编多点 。
zhuhuis 发表于 2019-9-22 12:25 | 显示全部楼层
而data定义就是立即数 是定义变量区的数据,equ只是符号
huanghuac 发表于 2019-9-22 12:29 | 显示全部楼层
equ和data都是符号定义伪指令,但是它们对符号定义的数值的范围不同,equ可以是任何数值常量,data必须是00H~7FH范围的数值常量。数值的大小关系到是否符合指令的寻址方式,如果不符合,翻译(build)时就会报错。
R2D2 发表于 2019-9-22 12:30 | 显示全部楼层
equ只是简单替换,纯汇编可以用equ定义变量地址,因为变量地址分配是编程者分配的,如果出现冲突那由编程者负责,解决。
data、ds、db这些伪指令则是给变量分配内存地址的意思,如果要跟其他语言混合编程,那么汇编语言必须用这些伪指令分配变量,严禁使用equ。
ss equ 20h  ; ss可能是变量地址,也可能是常数,总之编译器见到ss直接替换,并不会认为20h这个地址被占用了。
ss data 20h   ;把20h这个地址交给ss这个变量占用。
ss ds 1   ;把一个字节的变量交给ss这个变量占用,ss的地址在编译期间是不确定的,连接(link)的时候确定具体地址。
 楼主| stly 发表于 2019-9-22 12:36 | 显示全部楼层

嗯,预料中的结果,先结贴吧,多谢大家啦
paotangsan 发表于 2019-10-15 13:04 | 显示全部楼层
不懂汇编语言
木木guainv 发表于 2019-10-16 08:29 | 显示全部楼层
没用过汇编程序
您需要登录后才可以回帖 登录 | 注册

本版积分规则

433

主题

7058

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部