assembly - EQU 与 DC.B.有什么不同?

标签 assembly

我刚刚开始学习汇编语言。我想到了 EQU 的概念。起初这完全有道理,直到我到达 DC.B。 DC.B 和 EQU 有什么区别?不能对每个常数都使用 EQU 吗?

最佳答案

我不熟悉您的特定汇编程序语法,因此这个答案是一个有根据的猜测。

EQU 伪指令用于告诉汇编器您希望有一个命名符号常量(通常从其他汇编器值(包括其他 EQU 定义)计算得出),您可以在汇编源文本中的其他位置引用该常量/em>。你必须始终写

 symbolname EQU constantexpression

这允许您在源文本的其他位置写入符号名称而不是常量表达式。但这个名称本身对最终汇编的程序二进制数据没有直接影响。

“DC.B”(我假设“定义常量(字节)”用于告诉汇编器,您使用最终的汇编程序在源文件中的相对位置嵌入了一个数据字节”。你写

optionalname DC.B  constantexpression

将常量表达式的计算值放入汇编程序二进制数据的数据字节中。

所以,你可以写

 AnEvenNumber  EQU    2
 MyEvenNumber  DC.B   AnEvenNumber

第一行仅生成一个命名常量,如果没有第二行,则对您的二进制文件没有影响。第二行在二进制文件中生成一个字节,其中包含由命名符号常量指定的值。

请注意,DC.B 指令还允许使用可选名称;该符号也可以用在代码中的其他位置。根据汇编器的复杂程度,您也许可以定义

 LocationOfEvenNumber EQU  MyEvenNumber

      DC.W    LocationOfEvenNumber

现在在二进制文件中生成一个单词,“指向”您的二进制数据字节。

关于assembly - EQU 与 DC.B.有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11672666/

相关文章:

assembly - 这个功能需要多长时间?

linux - 为什么我们在映射内存时需要 MAP_PRIVATE 标志?

c++ - 如何在 VS 中使用 asm 中的浮点变量

assembly - NASM 引导加载程序的奇怪行为

c - 了解反编译的汇编代码

assembly - Mips:计算两个输入的总和

linux - nasm 汇编 linux 计时器或 sleep

linux - nasm 无法识别字符串常量中的换行符

performance - 通过 mov, xor 交换变量的成本

c - 如何使用 WatCom 生成带有声明的段偏移量的 RAW BIN