x86 汇编等式 vs =

2024-01-06

我正在上一门 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)

过去几天(春假)我一直在谷歌上搜索有关这些运算符的论坛,但我想不出任何东西,所以我想我应该问自己。

EDIT我正在使用 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 and =指令等纳入自己的include文件;一般命名SomeFile.Equ管他呢。我个人发现,通过将这些类型的汇编指令和此类内容与实际的机器语言指令分离,您会发现您的代码更加清晰,并且更易于维护;更重要的是。 (只是我的建议。)

这是个好问题,也是一个让我自己困惑了好几周的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

x86 汇编等式 vs = 的相关文章

  • 为什么此 NASM 代码会打印我的环境变量?

    本学期我刚刚完成计算机体系结构课程 除其他外 我们一直在涉足 MIPS 汇编并在 MARS 模拟器中运行它 今天 出于好奇 我开始在我的 Ubuntu 机器上摆弄 NASM 基本上只是将教程中的内容拼凑起来 并感受一下 NASM 与 MIP
  • 该程序如何知道该字符串存储的确切位置?

    我用 Radare2 反汇编了一个 C 程序 在这个程序中有很多调用scanf像下面这样 0x000011fe 488d4594 lea rax var 6ch 0x00001202 4889c6 mov rsi rax 0x0000120
  • 是否有必要每个机器码只能映射到一个汇编代码?

    假设这两者本质上是相同的 push 1 and 0x1231 这表示每个汇编指令都映射到一个机器代码 但是否每个机器码只能映射到一个汇编代码呢 MIPS汇编语言有几个 伪指令 例如 move 在内部只是一个带有隐式 0 操作数的 add
  • 对于 Swift 中的计算器

    只是要警告你 我是 Swift 的新手 我仍在适应它的工作原理 我一直在尝试在课堂上完成这个计算器项目 问题是 我需要练习简化代码 现在 当按下数字按钮时 我将其保存在这样的数组中 IBAction func buttonPressed s
  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • MFENCE/SFENCE/etc“序列化内存但不序列化指令执行”?

    英特尔系统编程指南第 8 3 节中有关 MFENCE SFENCE LFENCE 的说明 以下指令是内存排序指令 而不是序列化指令 这些指令会耗尽数据内存子系统 它们不序列化指令执行流 我试图弄清楚为什么这很重要 在多线程代码中 对内存的写
  • x86 asm 的 NASM 语法中的括号是什么意思?

    给出以下代码 L1 db word 0 mov al L1 mov eax L1 括号里是什么意思 L1 代表 这个问题专门针对 NASM Intel 语法汇编的另一个主要风格是 MASM 风格 当不涉及寄存器时 括号的工作方式有所不同 S
  • &(与符号)和 && 或 | 之间的区别(管道)和||在 Objective-C 中?

    我想知道Objective C是否关心我是写 还是 我相信一个与号 会或应该导致如果左侧已经为假 则右侧将不会被评估 这适用于 Objective C 吗 Yes 这些运算符在 C 和 Objective C 中的功能相同 就像在 C 中一
  • 如何在 x86 ASM 中将整数转换为浮点值?

    我需要将一个整数 二进制补码 乘以一个浮点常数 这是我所拥有的 data pi dd 3 14 int dd 0ah code fld pi fmul ST 1 ST 我怎样才能转换int乘以浮点值pi 你需要fild操作说明 这是一个参考
  • x86-64 AMD 上 CALL 指令的操作数生成

    以下是示例程序 objdump 的输出 080483b4
  • 3 操作数 imul 指令在 ia-32 汇编中到底起什么作用?

    我正在阅读说明 imul 0xffffffd4 ebp ebx 4 eax 我对它到底在做什么感到困惑 我明白那个imul乘法 但我无法弄清楚语法 我知道并且更喜欢 Intel MASM 语法 所以我将使用它 请注意 操作数的顺序在 AT
  • “空合并”(??) 运算符的用途是什么? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 随着新的 PHP 版本 PHP 7 的发布 引入了新功能 这些新功能中有一个我不熟悉的操作符 这Nul
  • “+=”和“=+”有什么区别? [复制]

    这个问题在这里已经有答案了 我有一段简单的代码 可以打印出整数 1 10 i 0 while i lt 10 i 1 print i 然后 如果你只改变第 3 行的一个运算符 它会打印出无限数量的 1 整数 我明白为什么这样做 为什么运行第
  • Prolog 中的运算符 `-->` 有什么作用?

    什么是 gt Prolog 中的运算符做什么以及它和之间有什么区别 我正在使用 SWI Prolog 它用于定义 DCG Definite Clause Grammar 规则与普通谓词相反 看本教程 http www metalevel a
  • 计算PE文件中入口点的文件偏移量

    In http en redinskala com finding the ep http en redinskala com finding the ep 有关于如何查找 exe 文件中入口点的文件偏移量的信息 在这里我可以读到 EP 文
  • execve() 无法启动 C 程序

    我正在尝试使用生成一个新进程execve from unistd h在 Linux 上 我尝试向它传递以下参数execve bin ls bin ls NULL 但没有得到结果 我也没有收到错误 程序只是退出 发生这种情况有原因吗 我尝试以
  • 帮助我改进更多 SSE2 代码

    我正在寻找一些帮助来改进 core2 cpu 上的双线性缩放 sse2 代码 在我的 Atom N270 和 i7 上 此代码比 mmx 代码快大约 2 倍 但在 core2 cpu 下它只等于 mmx 代码 代码如下 void Conve
  • “==”对象相等的标准定义是什么?

    There seems与普遍理解之间的不匹配 以及它的实际作用 给出这个问题的一些背景 typeof new Number 1 returns object typeof new String 1 returns object typeof
  • 修改字符数组,修改部分向后显示

    我刚刚开始学习汇编 我正在尝试修改字符数组 这是我的汇编代码 data data byte Five 0 code Asm proc lea rax data mov dword ptr rax Four ret Asm endp end
  • ESP 和 EBP 寄存器是什么?

    我发现ESP寄存器是当前堆栈指针 EBP是当前堆栈帧的基指针 但是 我不理解这些定义 我刚刚开始学习如何在汇编程序中编码 What I understand is that ESP points towards the stack itse

随机推荐

  • 如何用ReentrantLock加锁?

    我希望以下测试仅打印 已锁定 一次 但它最终会打印该行 public class LocKTest Test public void testLock Lock lock new ReentrantLock while true if lo
  • Python 2.6 JSON解码性能

    我正在使用jsonPython 2 6 中的模块用于加载和解码 JSON 文件 然而 我目前的表现比预期的要慢 我正在使用一个大小为 6MB 的测试用例json loads 需要 20 秒 我以为json模块有一些本机代码来加速解码吗 我如
  • 你可以在 Laravel 中扩展 Command 类吗

    我目前正在开发一个使用 Laravel 4 的应用程序 我正在构建一个评论系统 并拥有用于创建 更新 删除的基本命令 接下来我要做的是为评论将附加到的特定对象 例如博客文章 创建命令 所以如果我的命令文件被调用CreateCommentCo
  • 即使 JSON feed 正确,fullCalendar 事件也不会显示

    与其他人一样 我在将 JSON feed 事件呈现在日历中时遇到问题 问题通常是错误的 JSON 格式 但事实并非如此 因为我已经使用 JSONlint 对其进行了验证 并在 Site Master 中对 JSON 提要进行了硬编码 并得到
  • OOP 有什么规则吗?

    最近听说OOP Java 有9条规则 我只知道四种 抽象 多态 继承和封装 OOP 还有更多规则吗 似乎您正在寻找的是面向对象设计的原则 http www butunclebob com ArticleS UncleBob Principl
  • 在 xml 中自动生成 JUnit 结果的最佳方法是什么?

    我目前正在 JUnit 中编写一系列测试 我需要将结果自动导出为 XML 我读到 执行此操作的最佳方法是扩展 RunListener 类并以这种方式编写 XML 下面是我迄今为止所做的示例 但我正在努力解决如何提取已运行的每个测试的信息 D
  • 将条件面板与 checkboxGroupInput 中的值结合使用

    我想使用 checkboxGroupInput 然后 如果选中某个框 我想要一个条件面板 一个玩具示例在这里 shinyUI fluidPage sidebarLayout sidebarPanel checkboxGroupInput i
  • 互信息,Kullback Leibler 两个彩色图像之间的散度

    我正在研究一个使用互信息进行图像分类的项目 它要求我使用彩色图像的概率分布 要么我想计算Matlab中的互信息或Kullback Leibler散度 谁能帮我解决这个问题吗 我将彩色图像的熵计算为 I imread s1 png rgb c
  • 如何在hive中使用order by和collect_set()操作

    在表 1 中 我有 customer id item id 和 item rank 根据某些销售额的项目排名 我想收集每个 customer id 的项目列表 并根据 item rank 排列它们 Customer id item id r
  • 如何将输入类型日期的默认值设置为今天?

    给定一个输入元素
  • Cypress 装置 - 无法读取未定义的属性(读取“数据”)

    我正在尝试使用固定装置来保存不同测试的数据 特别是用户凭据 这是代码的示例 当进行第二次测试时 我得到了 Cannot read properties of undefined reading data 有什么想法以及如何解决这个问题吗 这
  • PHP 删除点和连字符

    您好 我需要从变量时间和日期中删除点和连字符 这是我的代码 todaydate date Y m d n time utc mktime date G date i date s NowisTime date G i s time utc
  • Supervisorctl 不使用 Sqs 我得到了错误

    安装并配置后supervisor我有一些工作正在排队LaravelWeb应用程序 我的服务器操作系统是centOs运行后supervisor我收到这个错误 Symfony Component Debug Exception FatalThr
  • 不区分大小写 preg_replace_callback

    在下面的函数中 我想匹配关键字不区分大小写 应匹配 蓝色瑜伽垫 和 蓝色瑜伽垫 但是 目前仅当关键字大小写相同时才匹配 mykeyword 蓝色瑜伽垫 post gt post content preg replace callback b
  • 释放模式下不显示菜单

    我希望我为测试条目创建的菜单应该处于调试模式 但是当我发布 启动 我的应用程序时 不应为测试条目显示菜单 有人可以帮助我吗 检查IS DEBUG MODE在您的应用程序中标记并在其中添加代码 Use PackageManager得到一个Ap
  • 如何去掉不必要的括号?

    Same as this https stackoverflow com questions 10999835 regular expression to remove multiple parenthesis但是JavaScript 几个
  • 将外部 JavaScript(来自 CDN)捆绑到 React 组件中

    有哪些选项可以将外部 javascript sdk 捆绑到 React 组件中 我尝试在index html中包含javascript并通过window xyz引用它 它运行良好 但我无法进行生产构建 因为 javascript 不是以这种
  • C# 中的 JSON-RPC 客户端示例代码

    我需要一个简单的 C JSON RPC 1 0 客户端 最好使用 NET 2 0 或更高版本 我查看了 JRock 0 9 他们有几个示例 包括 Yahoo reader 但示例演示的是 JSON 而不是 JSON RPC 我知道我可以使用
  • 如何从 SQL 转换为 NoSQL/MapReduce?

    我有使用关系数据库的背景 但最近开始涉足 CouchDB 并对一些非关系操作 在 SQL 中很简单 在 CouchDB 中并不是一流函数感到惊讶 如果您花点时间将下面的每个 SQL 语句映射到其 MapReduce 等效项 我将不胜感激 S
  • x86 汇编等式 vs =

    我正在上一门 x86 汇编语言课程 它的进展速度相当快 本书一直在做一件事 但没有提及它是如何工作的 那就是在定义数据时使用 equ 和 运算符 所以看起来 equ 是用来定义常量的 但是 是一样的吗 如果我有一些代码 data count