Я играю с кодом загрузчика.
Мой код должен печатать «А» в верхнем левом углу дисплея.
Я использую NASM:
BITS 16
mov al, 0x41 ; hex code for 'A'
mov ebx, 0xB8000 ; text screen video memory
mov byte [ebx], al ; write 'A' into video memory
; hlt machine
end:
hlt
jmp end
; MBR signature
times 510-($-$$) db 0
db 0x55, 0xAA
Мой код работает до сих пор, так как я могу запустить его с
nasm boot.asm -o boot.bin && qemu-system-x86_64 boot.bin
Когда я разбираю свой boot.bin
файл с objdump -D -b binary -mi386 boot.bin
, я получаю следующий вывод:
Disassembly of section .data:
00000000 <.data>:
0: b0 41 mov $0x41,%al
2: 66 bb 00 80 mov $0x8000,%bx
6: 0b 00 or (%eax),%eax
8: 67 88 03 mov %al,(%bp,%di)
b: f4 hlt
c: eb fd jmp 0xb
...
1fe: 55 push %ebp
1ff: aa stos %al,%es:(%edi)
Я полностью понимаю вывод, кроме части or (%eax),%eax
.
Какова цель этой инструкции и почему NASM сгенерировал ее?