Этот сегмент будет всегда печатать "немного", поскольку, даже если вы начнете выполнение в equal
, он будет продолжаться до notequal
:
equal:
lea dx, big
notequal:
lea dx, little
Что бы вынужно что-то вроде:
equal:
lea dx, big
jmp done
notequal:
lea dx, little
done:
; carry on
Кроме того, вы должны сохранить слово 1234h
в некоторой ячейке памяти y
, а затем прочитать байт обратно из того же места.
Если 12h
, то вы в порядке байтов. Значение 34h
означает little-endian.
Все остальное означает, что у вас есть проблема с памятью: -)
Кстати, я почти уверен, что все процессоры x86 имеют младший порядок, поэтомуЕсли вы пишете это на ассемблере x86, вам, вероятно, не нужно для проверки.
В качестве примера вы можете использовать Coding Ground со следующим кодом, чтобы увидеть его в действии:
section .text
global _start
_start:
mov ax, 0x1234 ; load up 1234 hex
mov [myword], ax ; store that word to memory
mov al, [myword] ; get first byte of that
cmp al, 0x12 ; 12 means big endian
je big
little:
mov edx, l_len ; prepare for little message
mov ecx, l_msg
jmp print
big:
mov edx, b_len ; prepare for little message
mov ecx, b_msg
print:
mov ebx, 1 ; file handle 1 = stdout
mov eax, 4 ; 'syswrite' function call
int 0x80
mov eax, 1 ; 'exit' function call
int 0x80
section .data
myword dw 0
l_msg db 'Little endian', 0xa
l_len equ $ - l_msg
b_msg db 'Big endian', 0xa
b_len equ $ - b_msg
В окне вывода отображается, как и ожидалось:
$ nasm -f elf *.asm; ld -m elf_i386 -s -o demo *.o
$ demo
Little endian