%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
小端数:分段故障(核心转储)
一定是什么问题?