问题描述
给出一个BinarySearch测试,该测试将4个参数传递给我的.s文件:
- 指向int数组的指针
- 代表数组开头的int
- 代表数组结尾的整数
- 目标元素
我正在尝试在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 (将#修改为@)