我有一个Assembler 64位问题我只是简单地使用div - > 7/2,但我得到一个内存访问错误,不知道为什么
section .text
global _start:
_start:
xor rdx, rdx
mov rax, 7
mov rbx, 2
div rbx,
mov rax, rdx
ret
我正在使用64位寄存器,所以寄存器没有问题,所以一切都应该正常但我得到一个错误不知道为什么
修改
我知道这不是汇编程序的问题,但是我做错了但不确定是什么
我正在使用nasm
更新代码
section .text
global _start:
_start:
xor rdx, rdx
mov rax, 7
mov rbx, 2
div rbx,
int 80h
mov rax, 1
现在它没有任何错误
答案 0 :(得分:2)
如果使用ret
作为链接器,则可以使用GCC
。您必须为条目标签main
命名。别忘了用exitcode填充EAX
。
<强> TEST.ASM:强>
extern: printf
section .data
fmt: db `result: %lu remainder: %lu\n`
section .text
global main:
main:
xor rdx, rdx
mov rax, 7
mov rbx, 2
div rbx
mov rdi, fmt
mov rsi, rax
; mov rdx, rdx
xor eax, eax
call printf
mov eax, 0
ret
构建&amp;运行强>
nasm -felf64 test.asm
gcc -otest -m64 test.o
./test
如果使用LD
作为链接器,则必须自己管理退出。将ret
块替换为:
mov ebx,0 ; exit code, 0=normal
mov eax,1 ; exit command
int 0x80 ; interrupt 80 hex, call kernel
或(推荐用于x86-64):
mov rax, 60 ; sys_exit
mov rdi, 0 ; return 0 (success)
syscall ; syscall
构建&amp;运行强>
nasm -felf64 test.asm
ld -e main -m elf_x86_64 -I/lib64/ld-linux-x86-64.so.2 -lc -o test test.o
./test