将寄存器设置为零有多少种方法?

2024-01-06

我很好奇在 x86 汇编中有多少种方法可以将寄存器设置为零。使用一条指令。有人告诉我,他设法找到了至少 10 种方法来做到这一点。

我能想到的有:

xor ax,ax
mov ax, 0
and ax, 0

在 IA32 下如何将 0 移动到 ax 有很多可能性...

    lea eax, [0]
    mov eax, 0FFFF0000h         //All constants form 0..0FFFFh << 16
    shr  ax, 16                 //All constants form 16..31
    shl eax, 16                 //All constants form 16..31

也许是最奇怪的......:)

@movzx:
    movzx eax, byte ptr[@movzx + 6]   //Because the last byte of this instruction is 0

并且也在 32 位模式下(较长的指令将最终(最重要的)地址字节放在后面)...

  @movzx:
    movzx ax, byte ptr[@movzx + 7]

Edit:

对于 16 位 x86 cpu 模式,未测试...:

    lea  ax, [0]

and...

  @movzx:
    movzx ax, byte ptr cs:[@movzx + 7]   //Check if 7 is right offset

The cs:前缀是可选的,以防ds段寄存器不等于cs段寄存器。

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

将寄存器设置为零有多少种方法? 的相关文章

  • 为 Visual Studio 应用程序设置平台目标的目的是什么?

    对于任何 VS 项目 都可以在该项目的构建属性中设置平台目标 您可以将其设置为任何 CPU x86 x64 或 Itanium 我的问题是 如果我将此值设置为 x86 是否意味着我无法在 x64 计算机上运行该项目 如果是这样 为什么还要使
  • Clang 使用 -nostdlib 生成崩溃代码

    我正在尝试为可执行文件设置自己的运行时环境 但无法使用 clang v3 4 1ubuntu1 目标 x86 64 pc linux gnu 来生成没有段错误的可执行文件 我已将问题简化为以下内容 如果我有一个文件 crt1 c 除了满足
  • 汇编-符号标志和奇偶校验标志

    我不明白什么时候设置标志标志 什么时候设置奇偶校验 据我所知 符号标志表示运算结果的符号 0表示正数 1表示负数 那么为什么在下一个代码中 mov al 5 sub al 124 SF为零 结果是负数 关于PF 为什么a和b中设置了PF a
  • 如何在汇编语言中换行打印多个字符串

    我试图在汇编中的不同行上打印多个字符串 但使用我的代码 它只打印最后一个字符串 我对汇编语言非常陌生 所以请耐心等待 section text global start start mov edx len mov edx len1 mov
  • CALL指令是否总是将EIP指向的地址压入堆栈?

    x86架构中函数调用时是否存在返回地址不入栈的情况 No CALL根据定义 将在跳转到目标地址之前将返回地址压入堆栈 该返回地址是EIP or RIP sizeof call instruction 通常为 5 个字节 英特尔 64 和 I
  • NASM 轮班操作员

    您将如何在寄存器上进行 NASM 中的位移位 我读了手册 它似乎只提到了这些操作员 gt gt lt lt 当我尝试使用它们时 NASM 抱怨移位运算符处理标量值 您能解释什么是标量值并举例说明如何使用 gt gt and lt lt 另外
  • 为什么 Visual Studio 使用 xchg ax,ax

    我正在查看程序的反汇编 因为它崩溃了 并注意到很多 xchg ax ax 我用谷歌搜索了一下 发现它本质上是一个 nop 但是为什么 Visual Studio 会执行 xchg 而不是 noop 该应用程序是一个C NET3 5 64位应
  • 近调用/跳转表并不总是在引导加载程序中工作

    一般问题 我一直在开发一个简单的引导加载程序 并在某些环境中偶然发现了一个问题 在这些环境中 此类指令不起作用 mov si call tbl SI Call table pointer call call tbl Call print c
  • 为什么x86分页没有特权环的概念?

    早在 1982 年 当 Intel 发布 80286 时 他们在分段方案中添加了 4 个特权级别 环 0 3 由全局描述符表 GDT 和局部描述符表 LDT 中的 2 位指定 在 80386 处理器中 Intel 添加了分页功能 但令人惊讶
  • 在 x86-64 CPU 上通过交叉修改代码重现意外行为

    Question 对于可能在 x86 或 x86 x64 系统上触发意外行为的交叉修改代码有哪些想法 在这些系统中 交叉修改代码中的所有操作均已正确完成 但在执行处理器之前执行序列化指令除外修改代码 如下所述 我有一个 Core 2 Duo
  • 两个基本的 ANTLR 问题

    我正在尝试使用 ANTLR 来获取简单的语法并生成汇编输出 我在 ANTLR 中选择的语言是 Python 许多教程看起来非常复杂或详细阐述与我无关的事情 我真的只需要一些非常简单的功能 所以我有两个问题 将值从一个规则 返回 到另一规则
  • Nasm 打印到下一行

    我用 nasm Assembly 编写了以下程序 section text global start start Input variables mov edx inLen mov ecx inMsg mov ebx 1 mov eax 4
  • 为什么在强度降低乘法和循环进位加法之后,这段代码的执行速度会变慢?

    我正在读书阿格纳 雾 https en wikipedia org wiki Agner Fog s 优化手册 https en wikipedia org wiki Agner Fog Optimization 我遇到了这个例子 doub
  • 68HC11计算sin(x)的汇编代码

    68HC11 使用泰勒级数或查找表计算正弦值的汇编代码是什么 显示值只能是整数 查找表如何工作 在这种情况下 如何使用它来实现泰勒级数 http en wikipedia org wiki Taylor series 如果您正在寻找浮点解决
  • Intel 64 和 IA-32 上的 MESI 有何意义

    MESI 的要点是保留共享内存系统的概念 然而 对于存储缓冲区 事情就变得复杂了 一旦数据到达 MESI 实现的缓存 下游内存就会保持一致 然而 在此之前 每个核心可能对内存位置 X 中的内容存在分歧 具体取决于每个核心的本地存储缓冲区中的
  • 寄存器寻址模式与直接寻址模式

    我在试卷中遇到过这个问题 它指出 哪种给定的寻址模式更快 为什么 寄存器寻址方式 直接寻址方式 现在根据我的说法 寄存器寻址模式应该更快 因为寄存器是计算机中最快的存储位置 这是正确答案吗 请帮忙 谢谢 两种寻址模式之间的区别是 地址的来源
  • “rep stos”x86 汇编指令序列有什么作用?

    我最近偶然发现了以下汇编指令序列 rep stos dword ptr edi For ecx重复 存储内容eax到哪里edi指向 递增或递减edi 取决于方向标志 每次 4 个字节 通常 这用于memset型操作 通常 该指令简单地写成r
  • 使用 (float&)int 进行类型双关可以正常工作,(float const&)int 会像 (float)int 一样转换吗?

    VS2019 发布 x86 template
  • 如何在 Linux x86_64 上模拟 iret

    我正在编写一个基于 Intel VT 的调试器 由于当 NMI Exiting 1 时 iret 指令在 vmx guest 中的性能发生了变化 所以我应该自己处理vmx主机中的NMI 否则 guest会出现nmi可重入错误 我查了英特尔手
  • 使用 NEON 优化 Cortex-A8 颜色转换

    我目前正在执行颜色转换例程 以便从 YUY2 转换为 NV12 我有一个相当快的函数 但没有我预期的那么快 主要是由于缓存未命中 void convert hd uint8 t orig uint8 t result uint32 t wi

随机推荐

  • Java 中 TSP 的动态编程方法

    我是初学者 我正在尝试使用动态编程方法编写一个工作旅行推销员问题 这是我的计算函数的代码 public static int compute int unvisitedSet int dest if unvisitedSet length
  • 为什么 UIButton 圆角时出现粗糙的黑边?

    我正在添加一个UIButton 带有背景图像 到导航栏并设置带有边框的圆角 我在角落处看到奇怪的黑色轮廓 这是我用来创建按钮的代码viewDidLoad ProfileImageService profileImageService Pro
  • WordPress 删除空的 span 标签

    我使用 WordPress 编辑器 我想在 span 标签中显示一个图标 如下所示 div class box around div class box left span class fa fa search span div div c
  • 从 Inherited QThread 迁移到 Worker 模型

    所以通过我之前的问题得到了很多帮助 中断QThread睡眠 https stackoverflow com questions 37119319 interrupting qthread sleep and PySide 将信号从 QThr
  • Tkinter 鼠标颜色

    我现在正在开发一个项目 我需要一个像这样的黑色鼠标光标 我用过root config cursor arrow black black 但它不想改变光标的颜色 我使用的是 Windows 如果这有帮助的话 Windows 默认安装了黑色光标
  • 使用 Python BeautifulSoup 抓取 NSE 期权价格,涉及编码校正

    2020 年 12 月更新 I have 实现了整个 FnO 宇宙的完全自动化 分钟级数据收集 自动适应不断变化的 FnO 宇宙 退出和新条目 在非市场时间关闭 节假日关闭 包括新宣布的节假日 在年度 Muhurat 交易数据期间自动启动
  • 如何在 Materialize 中使用

    div class col s12 ul class tabs li class tab col s4 a href test1 class active tab1 a li li class tab col s4 a href test2
  • 如何覆盖属性类型?

    鉴于我有以下结构 type AB A string B string 但现在我想创建一个新类型 它可以扩展键 但也可以覆盖 A 属性 所以最终类型应该是 A number B string 所以我尝试将 AB 类型分配给我的最终类型 并用新
  • ActionView::Template::Error(变量@fontAwesomeEotPath_iefix 未定义)

    我在尝试加载任何页面时收到错误 ActionView Template Error variable fontAwesomeEotPath iefix is undefined in app assets stylesheets boots
  • Visual Basic 6.0 远程数据库如何实现?

    我需要 VB6 代码来通过互联网将 mdb 文件从一台 PC 连接到另一台 PC 当我更新 保存数据库时 它必须通过互联网更新到另一端 PC 我写了一个VB6简单的数据库程序 可以保存学生的Roll Num 姓名 地址 它可以在我的电脑上运
  • Spring 项目的 Java 9 Jigsaw(模块)有什么计划吗?

    Java 9 计划很快发布 7 月 27 日 是否有计划发布模块化的 Spring 项目的 Java 9 兼容版本 Java 9 项目 Jigsaw Spring 5 Spring 的下一个主要版本 不会是模块化的 但是 您可以使用 Spr
  • 鉴于不再支持 HONEYCOMB BOOT COMPLETED,我如何才能发现我的设备已重新启动?

    我正在 Android 4 0 3 中开发应用程序 据我了解 不再支持 HONEYCOMB BOOT COMPLETED 事件谷歌的文档 http developer android com about versions android 3
  • PHP Profiler 具有方法执行计数、次数等,无需扩展

    除了 CI 的默认分析器之外 是否有任何类或库可以在我的本地 php 环境中用于分析 查找瓶颈 查看不必要的执行时间等 我要远程使用它 我的主机没有安装任何调试扩展 我不想要求他们安装 如果有任何 PHP 解决方案 那就太好了 如果可能 请
  • 如何在android中垂直居中对齐文本

    我有阿拉伯语文本 因此我将重力设置为右侧以便从右侧开始文本 正文从现在开始 但另一个问题是文本从页面顶部开始渲染 但我需要将文本垂直居中 尽管我尝试了几种变体 但我无法使其垂直居中 这是我的 xml 文件的示例
  • 在屏蔽数组上使用 numpy.median

    在屏蔽数组的情况下 我对 numpy median 的输出有点困惑 这是一个简单的例子 假设导入了 numpy 我的版本是 1 6 2 gt gt gt a 3 0 4 0 5 0 6 0 numpy nan gt gt gt am num
  • 如何使用 Publishers.CombineLatest 获取 1 个发布者

    我正在尝试使用 2 个发布商 并将它们流式传输到从这两个值映射的 1 个发布商 我的代码是 class ViewModel let email CurrentValueSubject
  • solr boost查询与单独排序

    我想将所有 inv 0 可能的值从 0 到 1000 的文档降级到结果集的末尾 我还有其他排序选项 例如 name desc 也作为查询的一部分 例如下面是我的 solr 文档 Doc1 name apple Inv 2 Doc2 name
  • 在 hybris 中我们一次可以创建多少个扩展?

    通过使用ant modulegen hybris将创建七个扩展 如驾驶舱 核心 立面 店面 测试 初始数据和完整流程 无论如何 还有创建比这个扩展更多的扩展吗 预先感谢 使用 ant modulegen 命令 您可以生成满足特定要求的扩展包
  • AWS API网关:匿名用户无权执行API

    尝试发布到我在 API 网关中创建的 API Message User anonymous is not authorized to perform execute api Invoke on resource arn aws execut
  • 将寄存器设置为零有多少种方法?

    我很好奇在 x86 汇编中有多少种方法可以将寄存器设置为零 使用一条指令 有人告诉我 他设法找到了至少 10 种方法来做到这一点 我能想到的有 xor ax ax mov ax 0 and ax 0 在 IA32 下如何将 0 移动到 ax