小编Dee*_*Dee的帖子

在 x86 汇编中交换 2 个整数

我有一个指向整数数组开头的整数指针,并且我正在尝试交换程序集 x86 中的两个值。这是我的代码:

movq (%rdi,%rcx,4),%r8     # SWAP
movq 4(%rdi,%rcx,4),%r9   
movq %r9,(%rdi,%rcx,4)
movq %r8,4(%rdi,%rcx,4)
Run Code Online (Sandbox Code Playgroud)

rdi包含指针,并且两个值的地址计算是正确的(rcx第一次迭代中只是 0),但是,这是我进行交换时发生的情况:

(gdb) x/5wd $rdi
0x602010:    31    1    2    3
0x602020:    0
(gdb) x/5wd $rdi
0x602010:    1     2    2    3
0x602020:    0
(gdb) x/5wd $rdi
0x602010:    1     31    2    3
0x602020:    0
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,第三个值被第一个和第二个值的交换所替换,我不明白为什么。关于我应该在哪里寻找错误的任何建议?

c assembly swap x86-64

2
推荐指数
1
解决办法
652
查看次数

标签 统计

assembly ×1

c ×1

swap ×1

x86-64 ×1