Assembly 运行程序后获取NASM分段错误(堆芯转储)。我在下面附上的程序中有什么错误?

Assembly 运行程序后获取NASM分段错误(堆芯转储)。我在下面附上的程序中有什么错误?,assembly,segmentation-fault,nasm,coredump,Assembly,Segmentation Fault,Nasm,Coredump,当我在fedora的终端上运行这个程序(其目的是从给定的大端格式以小端格式打印数字)时,我得到了这个东西。(END是我的程序名) [dell@localhostMAL]$nasm-f elf64 END.asm [dell@localhostMAL]$ld-s-o END.o [dell@localhost马尔]$/完 大端号码是:1020304050607080 小端数字:分段故障(堆芯转储) 一定是什么问题?x86处理器是小端数,因此数字dq 1020304050607080H将以小端数布局

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

[dell@localhostMAL]$nasm-f elf64 END.asm

[dell@localhostMAL]$ld-s-o END.o

[dell@localhost马尔]$/完

大端号码是:1020304050607080

小端数字:分段故障(堆芯转储)


一定是什么问题?

x86处理器是小端数,因此
数字dq 1020304050607080H
将以小端数布局为您提供
1020304050607080H
。为什么要使用
dq
而不是
db
来处理字符数据?最后一行(
inc rsi
)后面是什么?
mov al,byte[rdx]
@rkhb,控件应该跳回标签“next”中的第6行,即打印数字,8@Michael,实际上我不太擅长汇编语言,所以这只是我自己写代码的一次尝试。我明白你说的关于dq,db的意思了。但并没有得到你们想在下一条评论中说的话,“不会是一个有效的地址”。我可以知道那里出了什么问题吗。
%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