我正在使用x86汇编语言上课,它开始变得相当快。这本书一直在做,但没有提及它是如何工作的,而是在定义数据时使用equ和=运算符。
所以似乎equ用于定义常量,但= =同样的事情?如果我有一些代码:
.data
count = 100 ; Is this a constant? Of what data type is this?
array WORD count DUP(?)
x_param EQU [EBP + 8] ; Is this a constant?
我问,因为到目前为止我们已经通过声明它的类型来定义数据,但是当没有声明类型时(例如count = 100)它是如何工作的
过去几天(春假)我一直在谷歌搜索和搜索关于这些运算符的论坛,我无法想出任何东西,所以我想我应该问自己。
修改的 我正在使用x86 MASM汇编程序
答案 0 :(得分:7)
首先,你问题的直接答案......
Equ
设置数字。
=
设置数字,直到稍后更改为止。
小心!!! “以后”的定义会让生活中的日常生活变得混乱;特别是有多个源文件。
这是一个有用的技巧,您可以使用这两个指令来定义一堆数字......
你不知道(当你开始时)你想要的确切数量
The_Counter = 0
The_Counter = The_Counter + 1
Fred = The_Counter
The_Counter = The_Counter + 1
Barney = The_Counter
The_Counter = The_Counter + 1
Dino = The_Counter
The_Counter = The_Counter + 1
Arnold = The_Counter
The_Counter = The_Counter + 1
Mr_Slate = The_Counter
The_Counter = The_Counter + 1
现在,正如您所看到的,Fred, Barney, Dino, Arnold, Mr_Slate
可以用这个方案改变它们的价值,这可能是一件坏事;所以,如果你想确保Fred
et.al.不要被其他人(或你自己,错误地)在源文件的另一部分中更改,那么你可以将上述方案中的=
和Equ
组合在一起...... / p>
The_Counter = 0
The_Counter = The_Counter + 1
Fred Equ The_Counter
The_Counter = The_Counter + 1
Barney Equ The_Counter
The_Counter = The_Counter + 1
Dino Equ The_Counter
The_Counter = The_Counter + 1
Arnold Equ The_Counter
The_Counter = The_Counter + 1
Mr_Slate Equ The_Counter
The_Counter = The_Counter + 1
在这种情况下,它们仍然会彼此不同,但它们的实际值不会成为变化的候选者。
虽然这个例子使用Flintstone的字符作为名称,但它可以很容易地变成更有用的东西,比如......
......还有其他47个我现在无法想到的好理由。
哦,只是一个建议;如果你想使用这种方案,我发现将这些Equ
和=
指令等放入它们自己的 include 文件中非常有用;通常命名为SomeFile.Equ
或其他。我个人发现,通过从实际的机器语言指令中分离出这些类型的汇编指令和这些东西,你会发现你的代码更易读,而且更易于维护;大时间的方式更多。 (只是我的建议。)
好问题,而且我自己也困惑了好几个星期。