【发布时间】:2013-02-10 03:59:22
【问题描述】:
我正在用 yasm 编写冒泡排序的开头,作为练习。但是我每次都在下面的最后一条指令中出现段错误,我不明白为什么。
segment .data
arr db 5,6,2,3,8,1
segment .text
global main
main:
xor ecx, ecx ; counter
mov rdx, 6 ; sizeof(arr)
cld
_Do: xor eax, eax ; set swapped = false
for:
movzx esi, byte [arr+ecx]
movzx edi, byte [arr+ecx+1]
cmpsb ; is a[i]>a[i+1]? <--- segfault here every time
;jump to swap next, if I could get there
我的理解是 cmpsb 比较的是 si 和 di 中的字节。为什么要发生段错误?这对我来说一定是非常简单的错误,但我没有看到。通常 cmpsb 用于重复的上下文中,但我认为它也可以在这里工作。谢谢你的帮助!
【问题讨论】: