0
나는 운동으로 거품 정렬의 시작을 yasm에 씁니다. 그러나 나는 아래의 마지막 명령에서 항상 매번 segfaulting하고 있는데, 나는 왜 그런지 이해하지 못합니다.x86 yasm, segfault on cmpsb; cmpsb의 올바른 사용법?
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는 리피트의 컨텍스트에서 사용되지만 여기에서도 작동 할 것이라고 생각했습니다. 어떤 도움을 주셔서 감사합니다!
고맙습니다. – user2022444