%macro print 2

        mov ecx,%1

        mov edx,%2

        mov ebx,1

        mov eax,4

int 80h

%endmacro


section .data

        m dq "Big endian number is : 1020304050607080",10

        l equ $-m

        m1 dq "Little endian number : "

        l1 equ $-m1

        number dq 1020304050607080H

        l2 equ $-number

        cntr db 8


section .bss

        digits resb 8

section .text

    global _start

    _start:

        print m,l

        print m1, l1

        mov rbx,0       ;final zero

        mov rax,[number]

        mov rcx,8

        mov rdi,100h

        mov rsi, digits

        mov cl, 8

next:   shl rbx,8

        mov rdx,00

        div rdi

        add rbx, rdx

        jmp again

        print digits, 8

        dec rcx

        jnz next

mov eax, 1

mov ebx, 0

int 80H

    again : mov al, byte[rdx]           ;get byte
        and al, 0F0H                ;mask lower nibble
        shr al, 04H
        cmp al, 0aH
        jb add_30
        add al, 37H
        jmp store

    add_30 : add al, 30H

    store : mov [rsi], al
        inc rsi
        mov al, byte[rdx]
        and al, 0FH
        cmp al, 0aH
        jb add_30h1
        add al, 37H
        jmp store1

    add_30h1 : add al, 30H

    store1 : mov [rsi], al
         inc rsi

当我在fedora的终端上运行这个程序(其目的是以给定的大端格式打印小端格式的数字)时,我得到了这个东西 . (END是我程序的名称)

[dell @ localhost MAL] $ nasm -f elf64 END.asm [dell @ localhost MAL] $ ld -s -o END END.o [dell @ localhost MAL] $ ./END

大端数字是:1020304050607080

小端数:分段故障(核心转储)

一定是什么问题?