assembly 在Linux x86_64汇编语言中交换数组中的字符串时遇到问题

jdzmm42g  于 2023-10-19  发布在  Linux
关注(0)|答案(1)|浏览(146)

我想在Linux上用x86_64汇编语言实现冒泡排序和快速排序,但遇到了很多麻烦。我不能让一个基本的交换例程(swapij)工作。
任何帮助将不胜感激。谢谢
该计划是建立在:

yasm -f elf64 -g dwarf2 -o testStr.obj testStr.asm
gcc -g -z noexecstack testStr.obj -o testStr
0s0u357o

0s0u357o1#

您没有必要的缓冲区

section     .data
pTempi      db  64
pTempj      db  64

这些db只是旁边的一个字节每(预装值64)。你需要的是这样的东西:

section     .bss
pTempi      resb  64
pTempj      resb  64

你的strcpy不需要被告知要拷贝多少字节吗?

mov     rcx, r8
lea     rdi, [pTempi]
call    getElement          ; rdi contains str from array[i]
strcpy

您提供了目的地址和源地址,但我没有看到您将实际长度传递给strcpy
另外,要特别注意你写的评论。从 getElement 返回时,RSI指向数组第i个64字节记录中的字符串。像“contains str”这样的提及肯定是令人困惑的/错误的,因为寄存器不包含字符串中的任何字符。相反,寄存器包含指向某个字符串的指针。

相关问题