装配冒泡排序交换

2024-03-23

我正在尝试在 x86 程序集中进行冒泡排序(是的,它必须是冒泡排序,因为我不关心不同类型排序的速度优化),并且出于某种原因,我的代码不会交换必要的值。这是我的代码

mov eax, list                   ;store list in eax
mov edx,[eax+4*edi-4]           ;temp = var1
cmp edx,[eax+edi*4]             ;compare
JLE SECOND_LOOP                 ;jump if var1 < var2
mov [eax+4*edi-4],[eax+edi*4]   ;var1 = var2
mov [eax+edi*4], edx            ;var2 = temp
jmp SECOND_LOOP

在最后一条 mov 指令中,它应该将临时值加载回地址,但事实并非如此。 EAX 寄存器具有数组的起始地址,其中包含我的值列表

0x*starting address* 0a 00 00 00 ec ff ff ff 05 00 00 00 0c 00 00 00 1e 00 00 00 fb ff ff ff ea
0x*address after   * ff ff ff 37 00 00 00 34 00 00 00 00 00 00 00

下一个地址包含更多的数字。以十进制表示,数字是10 -20 5 12 30 -5 -22 55 52 0。基本上现在我正在尝试移动FFFFFFEC to 0000000A然后移动0000000A to FFFFFFEC。我可以将其存储到临时寄存器 EDX 中,但无法将 EDX 的值存储到特定地址中。有什么帮助吗?


我想我会使用指向列表当前位置的指针,而不是每次使用时都需要缩放的索引:

    mov esi, offset list
top:
    mov edi, esi
inner:
    mov eax, [edi]
    mov edx, [edi+4]
    cmp eax, edx
    jle no_swap
    mov [edi+4], eax
    mov [edi], edx
no_swap:
    add edi, 4
    cmp edi, list_end - 4
    jb inner
    add esi, 4
    cmp esi, list_end - 4
    jb top
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

装配冒泡排序交换 的相关文章

  • SSE加载和添加

    假设我有两个由两个类型数组表示的向量double 每个尺寸为2 我想添加相应的位置 所以假设向量i0 and i1 我想补充一下i0 0 i1 0 and i0 1 i1 1 一起 由于类型是double 我需要两个寄存器 诀窍是把i0 0
  • 如何使用 Java 确定 Windows 是 32 位还是 64 位体系结构?

    如何使用 Java 确定 Windows 是 32 位还是 64 位体系结构 我不太相信读取 os arch 系统变量 如果用户在 64 位系统上运行 64 位 JVM 则它可以工作 如果用户在 64 位系统上运行 32 位 JVM 则它不
  • “mov offset(%rip),%rax”有什么作用?

    Does rax获取偏移量加上这条指令的地址 还是下一条指令的地址 从微代码的角度来看 如果答案是下一条指令可能会更容易 下一个 这是 x86 上的一般规则 另请参阅分支 在 Intel 手册第 2 卷第 2 2 1 6 RIP 相对寻址部
  • 为什么允许 gcc 从结构推测加载?

    显示 gcc 优化和可能出现故障的用户代码的示例 下面代码片段中的函数 foo 将仅加载结构成员 A 或 B 之一 至少这是未优化代码的意图 typedef struct int A int B Pair int foo const Pai
  • 在什么类型的情况下汇编速度不够快,因此您需要直接的硬件/布尔逻辑解决方案?

    我已经开始通读装配艺术 https nostarch com assembly2 htm 其中有一个关于布尔逻辑的部分 其中指出 当然 使用 Pascal C 甚至汇编语言等语言指定编程问题的解决方案比使用布尔方程指定解决方案要容易得多 因
  • 使用指针作为函数参数时的段前缀

    我有一个汇编 c 问题 我刚刚读到了有关段前缀的内容 例如 ds varX 等 前缀对于逻辑地址的计算很重要 我也读到 默认值是 ds 一旦您使用 ebp 寄存器来计算地址 就会使用 ss 对于代码 cs 是默认值 这一切都是有道理的 现在
  • 使用汇编器 8086 显示表的总和

    我正在编写一些代码 允许我对表进行求和 然后使用汇编语言显示其结果 这是我到目前为止所想到的 data segment tab db 9 dup 3 5 8 4 7 1 6 7 0 resultat db data ends code se
  • 在 Windows 8/10 上调用静态链接函数每次都会崩溃,但在 Windows 7 上则不然

    问题 我已经建立了https github com reorg pg repack https github com reorg pg repack生成二进制文件的项目 该二进制文件与 postgres 9 6 可再发行组件链接 我使用由
  • 自定义键盘中断处理程序

    我正在尝试编写一个简单的程序 将标准键盘中断替换为自定义的键盘中断 以减少变量 但是 如果不调用旧处理程序 它就无法工作 这是我的中断处理程序 handler proc push ax push di dec EF pushf when t
  • x86 汇编中 cmove 指令的用途?

    反汇编可执行文件时我遇到了cmove操作说明 我已经在互联网上搜索过 但我只发现这是一个有条件的移动 如果源和目的地相等mov发生 我还不明白为什么我需要它 因为它不会改变操作数 它的目的是什么 The CMOVcc指令不比较源和目标 它们
  • 如何关闭MIPS-GCC自动指令重排序?

    继这个问题之后 使用跳转 和链接 指令的奇怪 MIPS 汇编器行为 https stackoverflow com questions 3807480 weird mips assembler behavior with jump and
  • 不知道如何一次打印整个日历[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 cseg segment assume cs cseg ds cseg org 100H begin mov es cs video mov
  • 比较击键 - 装配 CCS64

    I want to compare keystrokes in assembly CCS64 If I type in the same key in a row I want to do something example A A do
  • x86 Assembly:很难找到无限循环挑战的想法

    我打算和我的朋友们进行一场类似于 corewars 的比赛 我们使用与原始游戏相同的内存网格 在游戏中 我们每个人都应该写一个 保险箱 它是一个不超过 25 行的无限循环 每个 安全 都有一个技巧或代码可以停止循环 从而破坏 安全 例如 S
  • 什么是微编码指令?

    我看过很多参考微编码指令的文献 这些是什么以及为什么使用它们 CPU 读取机器代码并将其解码为内部控制信号 将正确的数据发送到正确的执行单元 大多数指令映射到一个内部操作 并且可以直接解码 例如 在 x86 上 add eax edx只是将
  • 在 NASM 中使用 istruc 时:“警告:尝试初始化 BSS 部分‘.bss’中的内存:忽略 [-w+other]”

    在搜索这个错误时我发现this https stackoverflow com questions 65731514 nasm attempt to initialize memory in bss section 77001709问题 但
  • 在长模式下更改 GDT 并更新 CS

    我正在编写一个简单的自制 64 位操作系统 通过 UEFI 启动它 这意味着当我的代码开始执行时 它已经处于长模式 并且启用了分页 现在 退出 UEFI 引导服务后 我想用我自己的控制结构替换 UEFI 构建的所有控制结构 成功更改 CR3
  • 分配内存空间的宏

    我需要让一个汇编程序员来计算帕斯卡三角形 https en wikipedia org wiki Pascal 27s triangle 这样帕斯卡三角形的每一行都与其他行分开存储在内存中 我想做一个 但我不知道如何使用宏在汇编中做到这一点
  • 我试图在 AAM 指令之后使用 AX 中存储的值将其除以 2,为什么它不适用于 2 位数字输出?

    英语不是我的母语 请原谅输入错误 我将在此处显示的代码是一项作业 我真的需要了解发生了什么事 我在 DosBox 0 74 和 TASM 汇编器中使用 Intel 8086 语法 当我必须除以 2 时 代码的问题在于三角形的面积 注意 程序
  • gcc 如何知道内联汇编中使用的寄存器大小?

    我有内联汇编代码 define read msr index buf asm volatile rdmsr d buf 1 a buf 0 c index 使用该宏的代码 u32 buf 2 read msr 0x173 buf 我发现反汇

随机推荐

  • 展开操作视图时导航抽屉图标(汉堡包和箭头)动画

    我在用着AppCompat and Toolbar 我确保当导航抽屉图标从汉堡包转变为箭头时会有动画 反之亦然 我使用以下技术https stackoverflow com a 26469738 72437 https stackoverf
  • 使用boost创建线程池

    是否可以使用boost的线程创建线程池 我正在查看 boost 的库 但找不到线程池管理器 或类似的东西 有办法做到吗 tnx 我知道答案已被接受 如果您现在需要这个 并且您懒得编写自己的线程池 您可以尝试使用带有并发提示的 boost a
  • Phoenix 频道:向特定客户端发送推送

    您好 我正在尝试使用 Elixir phoenix 重新实现 Whatsapp 功能 我在计算以下内容时遇到问题 如果聊天室中的所有人都收到了消息 我想向消息所有者发送 已收到 状态 以便他可以显示双勾号 但是 如何向某一特定客户端进行广播
  • 如何使用 .yml 文件更新现有 Conda 环境

    如何使用另一个 yml 文件更新预先存在的 conda 环境 当处理具有多个需求文件的项目时 这非常有用 即base yml local yml production yml etc 例如 下面是一个base yml文件有 conda fo
  • Gremlin 删除所有顶点

    我知道如何在 Gremlin 中通过 id 删除顶点 但现在我需要清理数据库 如何删除多个顶点 删除1v是这样的 ver g v 1 g removeVertex ver 我的意思是类似SQL的东西TRUNCATE 如何在不删除类的情况下删
  • 使用 pd.read_html 解析 html 表,其中单元格本身包含完整表

    我需要从 html 解析一个表 该表在较大的表中嵌套有其他表 如下所示pd read html 每个嵌套表都会被解析 然后作为行 插入 连接 我希望将这些嵌套表分别解析为自己的表pd DataFrames并将插入的对象作为相应列的值 如果这
  • 我的视频没有关键帧,怎么可能?

    当我在视频上运行以下行时 它仅输出 P 帧和 B 帧 没有 I 帧 ffprobe select streams v show frames show entries frame pict type of csv 00000 MTS 视频怎
  • EntityConnection 和打开的 SqlConnection

    我有一个关于采用 CodeFirst 方法的 EntityFramework 的问题 基于 EntityConnection 源代码和文档 我无法使用已打开的 SqlConnection 创建它 它要求应该关闭 我们有一些不同的数据库数据层
  • Gradle 项目刷新失败。安卓工作室

    尝试在 Android Studio 上运行我的应用程序时出现此错误 有谁知道原因可能是什么 谢谢 Gradle MyApp refresh failed Error Cannot locate factory for objects of
  • StackOverflowException 加载 XsltCompiledTransform

    加载 XslCompiledTransform 时 我遇到一些大型 xslt 崩溃 iis StackOverflowException 而旧的 已弃用的 XslTransform 工作正常 大模板是否存在一些已知问题 奇怪的是 相同的 X
  • 获取 Woocommerce 自定义电子邮件内容的自定义电子邮件占位符值

    我在 WooCommerce 中创建了自己的电子邮件课程 因为我的电子邮件内容中需要一个自定义参数 所以我已将带有此自定义参数的占位符添加到 wc 电子邮件触发函数中 public function trigger order id fir
  • 如何使用 Jersey for java 在浏览器中呈现新的 .jsp 文件?

    我的网站进入一个登录页面 当用户登录时我想重定向到另一个页面 我有一个 POST 方法 将 用户名 和 密码 发送到服务器 服务器检查用户名和密码是否正确存在 这是我的方法 POST Path logIn public void signI
  • 如何使用 jQuery 防止页面卸载?

    在我的程序中 如果用户尝试离开页面 他将收到一个对话框 询问他是否确定要离开 如果用户选择不离开页面 我应该如何实现 取消 选项 源 JavaScript 代码 window unload function var c confirm Ar
  • 如何处理“伪终端不会被分配,因为 stdin 不是终端”。

    ssh t remotehost vim tmp x txt 我知道我可以运行上面这样的命令 但我希望能够在远程计算机上运行任何本地 bash 代码 因此 我想调用远程 bash s 以便可以处理任何本地 bash 代码 ssh t rem
  • 有没有办法强制对 .NET 标准项目的项目引用到特定的 TargetFramework

    我是 GitHub 项目的贡献者 最近我们的项目遇到了一些问题 NET Standard 2 0 项目正确安装到 NET Framework 4 5 项目中 https github com wojtpl2 ExtendedXmlSeria
  • 在 python 中创建字符串数组的最佳方法是什么?

    我对 Python 及其库比较陌生 我想知道如何创建具有预设大小的字符串数组 这在java中很容易 但我想知道如何在python中做到这一点 到目前为止我能想到的就是 strs size 当我尝试对其调用字符串方法时 调试器会给出错误 X
  • lightbox-0.5 jquery 兼容性问题

    我正在尝试从这里集成 jquery lightbox 插件 http leandrovieira com projects jquery lightbox http leandrovieira com projects jquery lig
  • UWP 应用程序不会进入暂停状态

    在我的 UWP 应用程序中 我使用应用程序服务作为进程中后台任务来与 win32 应用程序通信以获取信息 我的应用程序甚至不会进入挂起状态 它始终保持在运行状态 但是当我终止我的 win32 应用程序时 它将处于挂起状态 要使应用程序暂停状
  • CSS硬件加速宽度?

    我正在尝试构建一个 Phonegap 应用程序 该应用程序将允许用户通过移动中间分隔线来更改两列布局的大小 我能够让它工作 但存在一个巨大的用户体验问题 它很滞后 这并不可怕 但在最新的 iPad 上 它甚至很明显 这让我很担心 这是我的
  • 装配冒泡排序交换

    我正在尝试在 x86 程序集中进行冒泡排序 是的 它必须是冒泡排序 因为我不关心不同类型排序的速度优化 并且出于某种原因 我的代码不会交换必要的值 这是我的代码 mov eax list store list in eax mov edx