我想知道是否有人可以帮助我理解为什么我的汇编程序给我一个分段错误。 (别担心,这是一个相当短的程序。)
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 $?
一如既往地非常感谢帮助。
答案 0 :(得分:3)
ret
标签不能_start
,因为它不是call
。
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
mov rdi, rax
mov al, 60 ; sys_exit
syscall
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
mov rdi, rax
mov al, 60 ; sys_exit
syscall
试试吧。 (未经测试!)