在 GNU 汇编器中处理或记住 cmp 的向后参数的好方法是什么?

2023-12-20

以下是一些采用 Intel 语法的汇编代码:

// Jump to done if rsi >= rax.
cmp rsi, rax
jae done

这对我的大脑来说是有道理的:如果 rsi “高于或等于” rax,你就会跳, 匹配中参数的顺序cmp操作说明。将此与 GNU 语法:

// Jump to done if rsi >= rax.
cmp %rax, %rsi
jae done

每次这都让我很伤脑筋。当我来到这个新鲜的地方时,这并没有帮助 一段时间没有编写汇编代码后,我去查找以下语义cmp and jae查看Intel手册,发现都是用“第一”来表述的 和“第二个”操作数,它与我在屏幕上看到的不匹配 我的面前。

结束抱怨。我的问题:

  1. 还有其他表达方式吗cmp or jae到 GNU 汇编器所以 操作数的顺序cmp匹配所引用的逻辑比较 经过jae?

  2. 假设(1)的答案是否定的,有没有人有好办法让我 看看这个,以便我下次能记住它是如何工作的?有什么更好的吗 比“GNU 倒退”?

请注意,我是not询问如何在 GNU 汇编器中使用 Intel 语法;我知道这是可能的。我正在现有的 GNU 语法代码库中工作,并要求一些助记符或其他方式来帮助我在头脑中记住这一点。


在 GAS 中你可以使用.intel_syntax noprefix以获得您更熟悉的语法,但您不能只是在 AT&T 语法中交换它们。

我想说请记住,在英特尔语法中mov x,y意味着“使 x 等于 y”,而在 AT&T 语法中,它是“将 x 复制到 y”,一旦您掌握了该约定,请将其扩展到您遇到的其他指令。

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

在 GNU 汇编器中处理或记住 cmp 的向后参数的好方法是什么? 的相关文章

  • Visual Studio:如何正确构建和指定 x64 和 x86 的配置和平台

    使用 Visual Studio 2012 Professional 和 Ultimate 以及所有最新更新 如何正确指定配置和平台以正确构建 x86 和 x64 当您第一次创建 Winforms 应用程序时 Visual Studio 会
  • __stack_chk_fail_local 和 -fno-stack-protector - 如何让它工作?

    Update 我刚刚发现问题出在我的项目 libxml2 中包含的预构建库上 它是在启用堆栈保护的情况下构建的 因此依赖于 stack chk fail local方法 我现在已经重建了该库 fno stack protector也是 一切
  • Haswell 及其后续产品上的 A20 系列是否仍会被屏蔽?

    维基百科引用了英特尔手册中的这一说法 A20M 的功能主要由较旧的操作系统使用 现代操作系统不使用 在较新的 Intel 64 处理器上 A20M 可能不存在 现在的手册中实际上有这样一个短语 但它是含糊不清的 Does A20M 实际上仅
  • 汇编程序中的过程调用如何工作?

    我刚刚开始摆弄 ASM 我不确定我对过程调用的理解是否正确 假设代码中的某个时刻有一个过程调用 call dword ptr 123 该过程仅包含一个命令 ret ret 0004 该过程调用的效果是什么 返回值将存储在哪里 我在某处读到
  • 函数地址不是实际代码地址

    在 Visual Studio 2008 C 中调试一些代码时 我注意到函数指针变量中的地址不是函数本身的实际地址 这是一个外部 C 函数 int main void printaddr const char print debug sho
  • 在汇编中初始化字符串数组

    我想创建一个数据数组 在初始化数据部分保存 5 个字符串 每个字符串正好有 4 个字符 每个字符串都有一些初始数据 例如第一个字符串的 abcd 第二个字符串的 efgh 等等 无效的 0任何字符串都不需要字符 如何用汇编语言初始化字符串数
  • 无法理解寄存器和变量之间的汇编mov指令

    我在 64 位 Linux 上使用 NASM 汇编器 有一些关于变量和寄存器的东西我无法理解 我创建一个名为 msg 的变量 msg db hello world 现在 当我想写入标准输出时 我移动msg to rsi注册 但我不明白mov
  • 从 make 文件中禁用 make 内置规则和变量

    我想根据传递禁用内置规则和变量 r and R options http www gnu org software make manual make html Options Summary从 make 文件内部到 GNU make 也欢迎
  • 了解近调用指令编码

    通过反汇编一些二进制代码 我发现了近调用指令call 0x8ae编码为e8 97 08 00 00 查看指令集参考 我发现这些指令被编码为 call XX XX XX XX lt gt e8 XX XX XX XX being XX XX
  • 问题与 Assembly x86-32 RET n 指令有关

    我知道 Ret n 的含义 但我无法弄清楚它在维护程序运行时堆栈方面的作用 我在那里有点困惑 ret 和栈有关系吗 ret n就好像ret add esp n 您可以将其用于 caller pops 调用约定 Plain ret就好像pop
  • execve() 无法启动 C 程序

    我正在尝试使用生成一个新进程execve from unistd h在 Linux 上 我尝试向它传递以下参数execve bin ls bin ls NULL 但没有得到结果 我也没有收到错误 程序只是退出 发生这种情况有原因吗 我尝试以
  • 最佳 SSE 无符号 8 位比较

    我试图找到使用 SSE 最高 SSE 4 2 执行 8 位无符号比较的最佳方法 我正在处理的最常见情况是比较 gt 0U 例如 mm cmpgt epu8 v mm setzero si128 1 当然 这也可以被认为是对非零的简单测试 但
  • 如何在 Visual Studio 2013 中启用汇编语言支持

    我一直在寻找 每个人都只提供了一个简单的答案 右键单击项目 自定义构建规则 勾选 Microsoft Macro Assembler But sadly In 2013 its not the same Here is the screen
  • ASM 中从小端到大端的快速转换

    我在 C 中有一个 uint 类型数组 在检查程序是否在小端机器上运行后 我想将数据转换为大端类型 因为数据量可能会变得非常大 但总是均匀的 所以我想考虑将两个 uint 类型作为 ulong 类型 以获得更好的性能并在 ASM 中对其进行
  • JE/JNE 和 JZ/JNZ 之间的区别

    在 x86 汇编代码中 有JE and JNE完全一样JZ and JNZ JE and JZ只是完全相同的事物的不同名称 条件跳转时ZF 零 标志 等于 1 相似地 JNE and JNZ只是条件跳转的不同名称 什么时候ZF等于 0 Yo
  • 深入了解事物如何打印到屏幕上(cout、printf)以及我在教科书上似乎找不到的真正复杂内容的起源

    我一直想知道这个问题 但至今还没有找到答案 每当我们使用 cout 或 printf 时 它们到底是如何打印在屏幕上的 文本是如何显示出来的 这里可能是一个相当模糊的问题 无论你给我什么 我都会工作 那么基本上这些功能是如何制作的 是汇编吗
  • 返回中断处理程序后程序计数器去了哪里?

    您好 我想知道当程序从中断服务程序返回时程序计数器去哪里 我知道当中断事件发生时PC被压入堆栈 但是下一个或同一个 刚刚执行的一个 被压入堆栈的地址是什么 当我们有 first instruction interrupt event her
  • 如何在 gdb 中给定地址处的汇编指令上中断?

    0x0000000000400448
  • RAM 到 RAM 的 DMA 传输

    我的一个朋友告诉我 在 x86 架构上 DMA 控制器无法在两个不同的 RAM 位置之间传输 它只能在RAM和外设 如PCI总线 之间传输 这是真的 因为 AFAIK DMA 控制器should能够在位于总线上并具有地址的任意设备之间 特别
  • 为什么这个 IA32 汇编代码有 3 个 leaal 指令?

    我编译了这个C函数 int calc int x int y int z return x 3 y 19 z 我在 calc s 中得到了这个 我正在注释正在发生的事情 file calc c text globl calc type ca

随机推荐

  • 向 data.tree 中的每个节点添加数字

    我有以下树 library data tree data acme t1 lt acme gt acme levelName 1 Acme Inc 2 Accounting 3 New Software 4 New Accounting S
  • 如何在 Symfony2 中注入特定的 Doctrine 实体管理器?

    在使用相同数据库的多个项目中 我们制作了一个 Symfony2 Bundle 来映射所有常用功能 现在的问题是我们有第二个数据库 并且我们需要与第一个数据库相同类型的服务 config yml doctrine dbal default c
  • ITelephony.aidl 未在 Eclipse 中编译

    我正在使用的代码这个答案 https stackoverflow com questions 7121508 android taking complete control of phone is it possible how 71215
  • 尝试使用 Maven 从命令行运行 Java7 Hello World 项目

    尝试使用 maven 从命令行运行 Java Hello World 项目 如果我从 eclipse 中运行代码 我的项目运行正常 但如果我尝试执行 maven package 包 则会出现以下错误 这是我的来源 public class
  • 单击新页面时分页不链接到 where 子句

    我有一个 where 子句 显示 id 上一页的输入值的所有类别 分页工作为我提供了正确的页数 而 where 子句为我提供了正确的记录 但是 当我单击页码时 页面上显示的记录不是下一组所需记录 而是所有记录 到每个页面的链接未标识 whe
  • Pyspark应用foreach

    我是 Pyspark 的菜鸟 我假装玩了一下几个函数 以更好地理解如何在更现实的场景中使用它们 有一段时间 我尝试对 RDD 中的每个数字应用特定的函数 我的问题基本上是 当我尝试打印从 RDD 中获取的内容时 结果是 None My co
  • Angular 4:“找不到名称‘require’

    我正在构建一个应用程序角4 and webpack 我的组件之一中有以下内容 ngOnInit require assets js regular expresions js 当我尝试编译时 我得到 错误于 C SRC Sandbox ea
  • Performance.now() 在 requestAnimationFrame 之前调用 - Performance.now() 具有更大的 t

    所以我有一个简单的功能 var start function lastFrame performance now requestAnimationFrame t gt interval t 还有我的间隔函数 只是为了测试目的 我堵塞了每个
  • jQuery 渐变插件?

    有没有什么好的jQuery渐变插件 我找到了一个 但它使用旧的 jQuery 当我使用最新版本时 所以它可能不适用于最新版本 我不知道你是否已经测试过这些插件 JQuery 渐变插件 http www ajaxupdates com jqu
  • 如何在 ASP.NET CORE 中为多个策略创建自定义授权属性

    我想授权一个操作控制器可以通过多个策略访问 e g Authorize Policies ManageAllCalculationPolicy Policies ManageAllPriceListPolicy public async T
  • Angular 基本 href 未显示在 URL 中

    我正在尝试将我的角度应用程序部署到生产环境 该环境在 url 中具有额外的位置步骤 例如www 生产服务器 com name of my app 附加到其后 当我通过 localhost 4200 上的 Angular cli 运行它并通过
  • python 求图交集

    有谁知道如何找到这两个图的交集 下图 energ ac price compvend and energ ac1 price compven1是一组x y values 请注意以下代码 它从数据库获取值 然后绘制两个图表 我只能手动获取路口
  • javascript中的运算符和事件

    update for i in window if i onhashchange console log i window i prints onchangechange undefined 在支持 onhashchange 事件的浏览器上
  • Eclipse GIT:当前分支未配置为拉取

    我正在和一个朋友一起开发一款基于图块的 RPG 他必须离开几个星期 我们决定是时候使用版本控制 git 了 我开始后悔了 几个小时后 我们设法让它工作到以下地步 我在 github 上创建了一个存储库 将他添加为协作者 我将eclipse中
  • ElasticSearch 0.90.2 在请求端口 9300 时出现 StreamCorruptedException

    我刚刚在 Windows XP 上解压了 elasticsearch 0 90 2 zip 并启动了 bin elasticsearch bat 我已将 JAVA HOME 设置为 C Program Files Java jre7 因为第
  • 占位符不适用于 Internet Explorer

    以下格式的文本框占位符不适用于 Internet Explorer 是否有办法在 Internet Explorer 中显示 TextBox 的占位符
  • 如何恢复 pip 升级

    我刚才执行了以下命令 pip install upgrade ipykernel 然而 我得到了 Requirement already satisfied ipykernel in anaconda3 lib python3 8 site
  • Pandas DataFrame 上的条件逻辑

    如何将条件逻辑应用于 Pandas DataFrame 请参阅下面所示的数据框 data desired output 0 1 False 1 2 False 2 3 True 3 4 True 我的原始数据显示在 数据 列中 所需的输出显
  • 如何在 Java 中执行 Windows 命令?

    我正在开发一个项目 它将为您提供 Windows 命令列表 当您选择一个时 它将执行该命令 但是 我不知道该怎么做 我打算在 Visual C 或 C 中完成它 但 C 类太复杂 我不想在 Visual C 中制作表单和垃圾 在控制台应用程
  • 在 GNU 汇编器中处理或记住 cmp 的向后参数的好方法是什么?

    以下是一些采用 Intel 语法的汇编代码 Jump to done if rsi gt rax cmp rsi rax jae done 这对我的大脑来说是有道理的 如果 rsi 高于或等于 rax 你就会跳 匹配中参数的顺序cmp操作说