Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly x86组装设备vs=_Assembly_Operators_Constants_Masm - Fatal编程技术网

Assembly x86组装设备vs=

Assembly x86组装设备vs=,assembly,operators,constants,masm,Assembly,Operators,Constants,Masm,我正在学习一门x86汇编语言课程,它的发展相当快。这本书一直在做一件事,但没有提到它是如何工作的,那就是在定义数据时使用eq和=运算符 看来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 con

我正在学习一门x86汇编语言课程,它的发展相当快。这本书一直在做一件事,但没有提到它是如何工作的,那就是在定义数据时使用eq和=运算符

看来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汇编程序,这是您问题的直接答案

eq
以石头形式设置数字

=
设置数字,直到您稍后更改它

当心!!!“以后”的定义会把你弄糊涂;特别是对于多个源文件

下面是一个有用的技巧,您可以使用这两个指令来定义一组数字,当

  • 您需要表示唯一值的名称(即数学上的“唯一”,如中所示,您希望保证它们都不相同)
  • 你根本不在乎他们是什么
  • 您可能希望在开发过程中添加或删除这些值
  • 你不知道(当你开始的时候)你到底想要多少

    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
等。不要在源文件的另一部分被其他人(或你自己)更改,然后你可以像这样在上面的方案中组合
=
eq

    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个我现在想不出来的好理由

哦,只是一个建议;如果您想使用这种方案,我发现将这些
eq
=
指令等放入它们自己的include文件中非常有益;通常命名为
SomeFile.eq
或其他名称。我个人发现,通过将这些汇编指令和类似的东西从实际的机器语言指令中分离出来,你会发现你的代码更易读,也更易于维护;重要的是更多。(这是我的建议。)


这个问题问得好,我自己也困惑了好几个星期。

你忘了提到你用的是哪种汇编程序。请再添加一个标签。另外,不要在谷歌上搜索或使用论坛,而是先查看汇编程序的官方手册。请参阅关于和的手册。TL;DR:
eq
可以定义常量数字或可重新分配的文本,
=
可以重新分配数字。好吧,那么如果我声明a=1或b eq 1,它们都是32位数据类型(DWORD)吗?不,它们都有值
1
。数据类型将取决于您在何处以及如何使用它们。哦,好的,现在这是有意义的。非常感谢。