- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 64 位 Linux 上运行的 NASM 中实现一个数组的选择排序。
数组声明为:
section .bss
strbuf resb 10
small resb 1 ; current minimum value
mov [var1], [var2]
每当我需要交换两个元素时,我都需要使用寄存器作为临时占位符。在跟踪哪些寄存器保存哪些信息方面,这很快变得笨拙!
; ====== Sorting begins here ======
sorting:
mov edi, strbuf ; outer loop pointer
mov esi, strbuf ; inner loop pointer
mov eax, 0 ; inner loop counter
mov ebx, 0 ; outer loop counter
innerloop:
; store the value of first element in [small]
mov edx, [esi]
mov [small], edx
; compare the current small value with the value pointed by esi
mov edx, [esi]
cmp [small], edx
jg new_small
inc esi
inc eax
cmp eax, 9
jle innerloop
cmp eax, 9
jg innerloop_done
new_small:
mov [small], edx ; save the new small value
mov ecx, esi ; save its index in ecx
inc esi
inc eax
cmp eax, 9
jle innerloop
innerloop_done:
; When the inner loop is completed...
; First, do the swap
push rax
mov eax, [edi]
mov edx, [small]
mov [ecx], edx
pop rax
inc edi ; move the outer loop pointer forward
inc esi ; move the inner loop pointer forward
inc ebx ; increment the outer loop counter (the unsorted array becomes smaller)
inc eax ; increment the inner loop counter (same reason as above)
cmp ebx, 9
jle innerloop
; ====== Sorting ends here ======
最佳答案
如果这应该在 64 位模式下执行,则必须使用 64 位地址,这意味着当您获取这些地址并将它们放入寄存器时,这些接收寄存器也必须是 64 位的,否则您将截断地址和访问内存不是你想要的。
另外,您没有调试器来单步执行您的代码吗?
关于assembly - 在 x86 NASM 或 YASM 程序集中实现选择排序的麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10370476/
在 Android 中集成 FFMPEG 库时出现上述错误。以下是屏幕截图。有人可以帮我整合这个库吗?我正在使用 Ubuntu OS 来实现这一点。 最佳答案 只需安装yasm sudo apt-ge
构建将近半小时后,出现以下错误。到目前为止,谷歌搜索没有任何帮助...... In file included from external/chromium_org/third_party/yasm/
我正在尝试通过 brew 安装 ffmpeg。我用 yasm 得到的错误是 “错误:在安装 ffmpeg 之前,您必须‘brew link pkg-config yasm’” 这样做时,我被告知我的权
org 0x7c00是在平面二进制文件中获取正确绝对地址的正常方法,但我对我希望使用的另一种方法感到好奇。 我尝试使用section boot vstart=0x7c00 align=1告诉YASM正
我有一个 x86_64 汇编程序,我试图在 Linux 上调试,但是当我尝试使用 gdb 时,它会随机跳过并循环执行相同的指令对或重复指令。它还似乎根据我设置断点的位置循环执行不同的指令。 我试着在线
我遇到了一个奇怪的问题。我试图安装 x264。当运行 sudo ./configure --enable-shared 时,它给出了: 找不到汇编器最低版本是 yasm-0.7.0如果您真的想在没有
我正在尝试为使用 的英特尔语法编写的 x86_64 汇编源代码64 位寄存器 .我使用以下命令行标志: yasm foo.asm -a x86 -m amd64 我不断收到以下错误: warning:
假设我声明了以下内容: section .bss buffer resb 1 这些说明位于.text部分: mov al, 5 ; mov-i
我想在c代码中调用ASM函数,如何将参数传递给ASM代码? #include extern int * asm_mod_array(int *ptr,int size); int main()
我需要 Microsoft Visual 2015 中的 Windows 10 中的 YASM 软件,谁能告诉安装 yasm 的步骤。 我已经使用了下面的链接。 https://github.com/
我有一个以原始模式读取字符的程序。也就是说,任何输入的字符都会被立即读取,而不是被缓冲。 我想知道如何执行退格。也就是说,当我按下退格键时,它应该删除左边的字符并将光标向左移动一位。 我尝试输出一个退
我有一个以原始模式读取字符的程序。也就是说,任何输入的字符都会被立即读取,而不是被缓冲。 我想知道如何执行退格。也就是说,当我按下退格键时,它应该删除左边的字符并将光标向左移动一位。 我尝试输出一个退
我正在尝试让 libtool 和 yasm 一起工作。 yasm 从我的 .asm 源创建正确的 .o 文件,但我不知道如何获取 libtool 构建相关的 .lo 和 .dep 文件。它想要构建共享
这个问题在这里已经有了答案: Can't run executable linked with libc (1 个回答) 关闭 2 年前。 当尝试在 linux (x86-64) 上从汇编代码 (y
我已经使用 yasm 汇编了代码,并链接到我的 C++ 程序,但我无法在 gdb 中对来自汇编语言文件的符号设置断点。 命令行可能不是很清楚,但我们开始吧: "g++" -ftemplate-dep
我正在尝试在 64 位 Linux 上运行的 NASM 中实现一个数组的选择排序。 数组声明为: section .bss strbuf resb 10 small resb 1 ; curre
我正在尝试使用 yasm 汇编下面的代码。我在 yasm 报告错误“错误:操作数 2 的大小无效”的地方添加了“此处”注释。为什么会发生这个错误? segment .data a db 25
我有一个关于 nasm 及其与 C++ 的链接的问题。我将一个小测试函数声明为 extern "C"void __cdecl myTest( byte i1, byte i2, int stride,
我正在尝试编写一个即时编译器,但我有一段代码不想工作。我的平台是 x86-64 ubuntu。 我在 yasm 中编写了以下代码: bits 64 mov rdx, 1 mov rcx, 'A' mo
我想在 yasm 程序中使用 POSIX 线程(或简称 pthread)库实现并行处理。 代码 这是我程序中最重要的部分。 section .data pThreadID1 dq
我是一名优秀的程序员,十分优秀!