x86 binarySearch实现中的分段错误

问题描述

给出一个BinarySearch测试,该测试将4个参数传递给我的.s文件

  1. 指向int数组的指针
  2. 代表数组开头的int
  3. 代表数组结尾的整数
  4. 目标元素

我正在尝试在x86-64中编写binarySearch方法,但是遇到了分段错误,原因是我认为与尝试访问随机或类似的内存有关,但是我不知道该怎么办特别是造成它。是否有任何在线编译器可以让我用.s文件编译.cpp文件?那可以帮助我调试它。

但是无论如何,看一下代码是:

    global binarySearch

    section .text



binarySearch:

    push rsi
    push rbx    ; beginning of the array
    push rdx    ; end of the array
    push rcx    ; target
    push rdi

    ; mov rdx,rbx
    dec rdx
    ; mov rbx,0

startBinarySearch:
    xor rax,rax
    cmp rbx,rdx
    jg notFound
    mov rax,rbx
    add rax,rdx
    shr rax,1

    mov rdi,rsi
    add rdi,rax
    add rdi,rax
    cmp rcx,[rdi]

    je found
    jg largePivot
    jmp smallPivot

largePivot:
    inc rax
    mov rbx,rax
    jmp startBinarySearch

smallPivot:
    dec rax
    mov rdx,rax
    jmp startBinarySearch

notFound:
    mov rax,-1
    jmp end

found:
    jmp end

end:
    pop rdi
    pop rcx
    pop rdx
    pop rbx
    pop rsi
ret

这是我写的.asm版本的措辞,但翻译显然没有正确翻转。

关于造成此细分错误的原因,是否有任何显而易见的原因?我曾在几个地方看到过,这可能与在我推送变量后对变量进行异或运算有关,但以前这是行不通的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)