nasm idiv 为负值

2024-04-10

尝试将正数除以负数。

目前我的程序将正确划分,并且我可以正确访问其余部分。

但是当我输入一个正数除以一个负值时,它根本不会被除。

我知道有一种方法可以“签名扩展”并且它会正确划分。我只是看不懂说明书

movsss $imm/%reg %reg/mem 移动,符号扩展 231 movzss $imm/%reg %reg/mem 移动,零扩展

当然那是 att 语法,我需要 intel 语法

这是我的代码

xor rdx, rdx
mov rax, [input]
mov rcx, [input2]
idiv rcx

想法如何除以负数?


如果除数是带符号的 64 位值,则无需对其执行任何操作。同样,如果被除数是有符号的 128 位值,则无需对其执行任何操作,只需将其前 64 位加载到rdx和低 64 位rax.

现在,如果任何数字已签名但短于idiv预计,您需要对该数字进行符号扩展。符号扩展非常简单。您只需用数字的最高有效位(符号位)填充空的顶部位即可。对于非负数,您用 0 填充该空间;对于负数,您用 1 填充该空间。有一些可用的指令可以对累加器中当前保存的值进行符号扩展。他们是:cbw, cwde, cdqe, cwd, cdq, cqo。最后三个符号延伸到dx/edx/rdx。最有可能的是你需要cqo代替xor rdx, rdx像这样:

mov rax, [input]
cqo ; sign extends rax into rdx:rax
mov rcx, [input2]
idiv rcx

As for “但是当我输入一个正数除以一个负值时,它根本不会被除”,不可能。它要么进行除法,要么调用除法异常(除以 0 或溢出),没有第三种选择。

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

nasm idiv 为负值 的相关文章

  • I 类型指令的 MIPS 周期数 (addi)

    So on https en wikipedia org wiki Cycles per instruction https en wikipedia org wiki Cycles per instruction它说 对于多周期MIPS
  • x86 实模式下的段大小

    我对实模式下段的大小有一个疑问 因为它们不能超过 64K 但可以小于那个 http support microsoft com kb 120069 我的问题是这些段大小和基地址是如何初始化的 就像保护模式下有 GDT 和 LDT 一样 实模
  • 如何查看JVM中JIT编译的代码?

    有什么方法可以查看 JVM 中 JIT 生成的本机代码吗 一般用法 正如其他答案所解释的 您可以使用以下 JVM 选项运行 XX UnlockDiagnosticVMOptions XX PrintAssembly 根据特定方法进行过滤 您
  • 现代 x86 硬件不能将单个字节存储到内存中吗?

    说到 C 的并发内存模型 Stroustrup 的C 编程语言 第 4 版 第 1 节 41 2 1 说 就像大多数现代硬件一样 机器无法加载或存储小于单词的任何内容 然而 我的 x86 处理器已经有几年的历史了 它可以并且确实存储小于单词
  • 当非特权用户运行 C/asm 程序时,会对 Linux 造成什么危害?

    我一直在考虑一种场景 让用户 可以是任何人 可能有恶意 提交在 Linux PC 我们称之为基准节点 上运行的代码 目标是为单线程例程创建一种自动化基准测试环境 假设一个网站向代理发布了一些代码 该代理将此代码交给基准节点 而基准节点仅与代
  • x86-64 Linux 中不再允许使用 32 位绝对地址?

    64 位 Linux 默认使用小内存模型 将所有代码和静态数据置于 2GB 地址限制以下 这确保您可以使用 32 位绝对地址 旧版本的 gcc 对静态数组使用 32 位绝对地址 以便节省相对地址计算的额外指令 然而 这不再有效 如果我尝试在
  • 汇编编程语言:程序仅当输入为 ESC 时退出,并在退出前要求确认(y/n),否则循环

    我只是汇编语言编程的初学者 我们的第一个任务是让程序仅在输入为 ESC 时退出 退出之前请求确认 y n 否则循环 我知道 ESC 在 ASCII 代码中具有等效值 但我对插入位置或是否需要添加更多内容感到困惑 请帮我 这是程序 model
  • 左/右旋转进位的实际用途

    循环左进位和循环右进位指令有哪些实际用途 在我的汇编课上 我们无法想出一个有用的好例子 如果要将位从一个操作数移出并移入另一个操作数 SHL EAX 1 move sign bit of EAX RCL EDX into LSB of ED
  • 汇编中如何计算负数

    我是汇编新手 我有一个关于如何表示负数的问题 我有三个 DWORDS 变量 比方说 result DWORD 0 i DWORD 3 j DWORD 5 我想计算这个公式 结果 i j 8 但是 当我执行 i j 时 由于符号 结果将是一个
  • 为什么我可以使用 ret 退出 main?

    我即将弄清楚程序堆栈到底是如何设置的 我了解到用以下方式调用该函数 call pointer 实际上等同于 mov register pc programcounter add register 1 where 1 is one instr
  • 一条指令可以同时处于两种寻址模式吗?

    我在书中读到了以下内容从头开始编程 处理器有多种不同的访问数据的方式 称为 寻址模式 最简单的模式是立即模式 其中 要访问的数据嵌入在指令本身中 例如 如果我们想将寄存器初始化为 0 而不是给出 计算机要从中读取 0 的地址 我们将指定立即
  • 遍历内存编辑每个字节

    我正在编写汇编代码 提示用户输入一串小写字符 然后输出包含所有大写字符的相同字符串 我的想法是迭代从特定地址开始的字节 并从每个字节中减去 20H 将小写变为大写 直到到达具有特定值的字节 我对 Assembly 相当缺乏经验 所以我不确定
  • Clang 使用 -nostdlib 生成崩溃代码

    我正在尝试为可执行文件设置自己的运行时环境 但无法使用 clang v3 4 1ubuntu1 目标 x86 64 pc linux gnu 来生成没有段错误的可执行文件 我已将问题简化为以下内容 如果我有一个文件 crt1 c 除了满足
  • 即使我确实为变量设置了初始值,数据段也没有被初始化

    我已经编写了一个代码 该代码应该生成某种数字列表 但是即使我为它们分配了初始值 我的数据段变量也没有被初始化 This is how DS 0000 looks when I run it 这是我的代码 但数据段只保留垃圾值 MODEL s
  • orpd等SSE2指令有什么意义?

    The orpd指令是 压缩双精度浮点值的按位逻辑或 这不是做完 全相同的事情吗por 按位逻辑或 如果是这样 拥有它还有什么意义呢 请记住 SSE1orps https www felixcloutier com x86 orps首先 实
  • 在 x86 程序集中将整数打印到控制台

    当我在 16 位汇编中添加两个值时 将结果打印到控制台的最佳方法是什么 目前我有这个代码 CODE START mov ax 1 put 1 into ax add ax 2 add 2 to ax current value mov ah
  • 页面错误陷阱的成本

    我有一个应用程序 它定期 每 1 或 2 秒后 通过分叉自身来获取检查点 因此 检查点是原始进程的一个分支 它一直保持空闲状态 直到原始进程发生某些错误时被要求启动 现在我的问题是fork的写时复制机制的成本有多大 每当原始进程写入内存页面
  • 在 x86 ASM 中测试零通常哪个更快:“TEST EAX, EAX”与“TEST AL, AL”?

    测试 AL 中的字节是否为零 非零通常哪个更快 TEST EAX EAX TEST AL AL 假设之前有一个 MOVZX EAX BYTE PTR ESP 4 指令加载了一个带有零扩展的字节参数到 EAX 的其余部分 防止了我已经知道的组
  • 为什么在强度降低乘法和循环进位加法之后,这段代码的执行速度会变慢?

    我正在读书阿格纳 雾 https en wikipedia org wiki Agner Fog s 优化手册 https en wikipedia org wiki Agner Fog Optimization 我遇到了这个例子 doub
  • 如何知道寄存器是否是“通用寄存器”?

    我试图了解寄存器必须具备什么标准才能被称为 通用寄存器 我相信通用寄存器是一个可以用于任何用途的寄存器 用于计算 将数据移入 移出等 并且是一个没有特殊用途的寄存器 现在我读到了ESP寄存器是通用寄存器 我猜是ESP寄存器可以用于任何事情

随机推荐

  • C# 枚举条目名称中可以有连字符吗

    有没有办法让枚举条目的名称中带有连字符 例如 enum myEnum ok not ok 我看过有关的问题具有友好名称的枚举 https stackoverflow com questions 1415140 c enums can my
  • FB.getLoginStatus 弹出窗口内的 FB.login 被阻止

    我正在尝试使用 Facebook Javascript SDK 将 Facebook 登录集成到我的网站中 根据Facebook开发者文档提供的分步说明here https developers facebook com docs java
  • 模板函数中的默认模板需要空尖括号 <>

    gcc 11 2 似乎不能 https godbolt org z eY7x3MojP编译这个 template
  • 如何检查 params[:some][:field] 是否为零?

    我尝试了代码 这让很多人受益匪浅 如何测试rails中是否存在参数 https stackoverflow com questions 5629402 how to test if parameters exist in rails 但它不
  • STL容器内存问题[重复]

    这个问题在这里已经有答案了 我正在 Linux Fedora 10 和 CentOS 5 中使用 gcc 4 3 2 并使用 STL 容器实现我自己的图形库 然后我发现了一些内存问题 当我构建图表时 我使用了大量内存来查看top或其他内存使
  • Ngxs - 调用 Angular 服务:好的做法吗?

    当我使用ngxs我的应用程序应该做什么 我的组件调用一个服务 并且该服务调度一个操作 结果作为有效负载 我的组件调度一个动作 我的 状态调用服务 我的观点是 Dispatched Action 本身应该是不可变的 并且不用于返回结果 相反
  • 如何从我的应用程序启动默认音乐播放器?

    我制作了一个应用程序ListView 当我点击ListView项目 一个 ogg声音文件应该开始播放 不在我的应用程序中 而是在用户的默认音乐播放器应用程序中 我怎样才能做到这一点 Try this Intent it new Intent
  • Java - 作为普通代码运行字符串[重复]

    这个问题在这里已经有答案了 有没有办法将字符串作为代码运行 我的意思是如果我运行的字符串有价值System out println Hello World 我可以像普通代码一样运行该字符串 然后输出将是 Hello World 吗 例如 S
  • 如何将单个图像转换为 MP4 视频?

    如何将单个图像转换为 mp4 视频 例如 我需要播放同一张图像20秒 持续时间将是动态的 我知道这是可能的ffmpeg 我在谷歌和SO中搜索 但不幸的是 我无法找到正确的教程 我只是想要一个正确的方向 欢迎任何意见或建议 基本语法是 ffm
  • 无法登录在 django 管理后端创建的超级用户

    我试图在 django 管理后端创建超级用户 但不知何故我无法让他们登录 这是我的用户类别 class User AbstractBaseUser PermissionsMixin email models EmailField uniqu
  • 如何在点击时将图像设置为背景图像?

    我有一个活动显示带有不同图像的网格视图 当单击其中一个图像时 我希望单击的图像成为另一个活动的背景图像 我怎样才能做到这一点 这是我的活动 显示网格视图 public class HelloGridViewActivity extends
  • 在 Python Pandas 中将列转换为行

    我有以下 Python pandas 数据框 fruits numFruits 0 apples 10 1 grapes 20 2 figs 15 I want apples grapes figs Market 1 Order 10 20
  • 如何在omnet++ Veins中实现RSU到RSU通信?

    我正在尝试在 Veins 中实现 RSU 到 RSU 的通信 为此 我在 RSU 模块 RSU ned 文件 中添加了一个输入输出门 module RSU parameters string applType type of the app
  • 将班次数据(开始和结束时间)分解为每小时数据

    我有一个 df 如下 显示一个人何时开始轮班 结束轮班 工作时数和日期 Business Date Number PayTimeStart PayTimeEnd Hours 0 2019 05 24 1 2019 05 24 11 00 0
  • 在 python 脚本中使用 easy_install ?

    easy install python 扩展允许从控制台安装 python Egg 例如 easy install py2app 但是是否可以在 python 脚本中访问 easy install 功能 我的意思是 不调用 os syste
  • Vim 命令日志

    是否可以记录我在 VIM 中输入的所有命令以供以后分析 我的意思是每个简单的命令 例如动作或更改文本 即jjjjjjkkkcw
  • mySLComposerSheet 上的格式字符串未使用错误数据参数

    我有点困惑为什么我收到错误 格式字符串未使用数据参数 有其他人在 iOS6 的 Xcode 4 5 中得到这个或修复这个问题吗 IBAction facebookPost id sender if SLComposeViewControll
  • jQuery 验证将类添加到错误元素?

    我有以下使用 jQuery Validate 的代码 register validate debug true errorClass error validClass success errorElement span highlight
  • jquery 如果 div id 有孩子

    This if 条件给我带来了麻烦 if div id myfav has children do something else do something else 我尝试了以下所有方法 if myfav hasChildren do so
  • nasm idiv 为负值

    尝试将正数除以负数 目前我的程序将正确划分 并且我可以正确访问其余部分 但是当我输入一个正数除以一个负值时 它根本不会被除 我知道有一种方法可以 签名扩展 并且它会正确划分 我只是看不懂说明书 movsss imm reg reg mem