汇编程序内存访问错误

时间:2014-05-22 14:57:46

标签: assembly 64-bit nasm x86-64

我有一个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

现在它没有任何错误

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