我正在上一门x86汇编语言类(class),并且开始发展很快。这本书一直在做一件事,而没有提到它是如何工作的,那就是在定义数据时使用了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汇编器
最佳答案
首先,立即回答您的问题...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
等。不要在源文件的另一部分中被他人(或您自己,错误地)更改,则可以在上述方案中将=
和Equ
组合在一起,如下所示... 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
和=
指令等放入它们自己的包含文件中非常有好处;通常命名为SomeFile.Equ
或其他名称。我个人发现,通过将这类汇编程序指令和此类内容与实际的机器语言指令分离开来,您会发现代码更加清晰易懂,并且更易于维护。大时间的方式更多。 (只是我的建议。)这是一个很好的问题,这个问题使我自己困惑了数周。
关于assembly - x86组装设备vs =,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28948274/