0
我想知道是否有人能夠幫助我理解爲什麼我的裝配程序給了我一個分段錯誤。 (不要擔心,這是一個相當短節目。)簡單的裝配程序給出了分段錯誤
segment .data
a dq 175
b dq 4096
segment .text
global _start
_start:
mov rax, [a] ; move *a into rax
add rax, [b] ; add *b to rax
xor rax, rax ; set to zero
ret ; return
它應該增加a和b的值,然後返回它們作爲最後的退出代碼的程序終止時,對不對?那麼echo $?
應該打印由於4271
?xor
,它應該打印0。
但是,是的,編譯使用:nasm -f elf64 -l main.lst main.asm -o main.o && ld main.o -o main.exec
然後運行:./main.exec && echo $?
幫助是極大的讚賞一如既往。
哦爆炸,現在如此明顯 – user3728501
爲什麼你將rad移動到rdi btw? PS:我在Linux上,所以我認爲我需要int 0x80而不是mov al,60 – user3728501
不,'rax'的高部分是0,所以'mov al,60'使'rax' 60(sys_exit)。 'rdi'是第一個(唯一的)參數。 64位Linux使用'syscall'而不是'int 0x80'。 'int 0x80'仍然可以在64位代碼中使用,舊的32位系統調用號碼(我被告知)。 –