В настоящее время я играю с asm и низкоуровневыми материалами, такими как печатные символы на экране без ОС, только через вызовы прерывания BIOS.вывод lodsb на 2 разных машинах с 2 различными результатами
мой код работает с QEMU (seabios), но когда я пишу загрузочный сектор USB, я получаю две разные результаты на двух разных машинах
Следующий код просто вызывает прерывание BIOS (0х10), чтобы распечатать строка (соответственно символов в цикле) с функцией tty-вывода (0x0e).
Работает на qemu и на моем ноутбуке (выход на экране: «12341234567»). однако, когда я использую мой рабочий стол, вывод на экране ... ничего. Я просто получаю черный экран с мигающим _ (похоже, это происходит от функции TTY, и он только не печатает никаких символов)
некоторую информацию о своих системах:
эмуляция с «qemu- система-x86_64/DEV/SDB»на моем ноутбуке
ноутбуков: Intel Atom N270 (32-разрядные, Phoenix Bios)
настольных ПК: x6 1090T AMD Phenom II (64-бит, AMI Bios v1. 17)
[org 0x7c00]
mov bp, 0xffff ; set stack location
mov sp, bp
mov ax, cs ; store cs in ds
mov ds, as
cld
mov si, MSG_TEST
call prnt
jmp $ ; prevent cpu from executing arbitrary bytes after this stuff aka hang
prnt:
push ax
push bx
push si
mov bh, 0
_test_loop:
lodsb
cmp al, 0
je _test_end
mov ah, 0x0e
int 0x10
jmp _test_loop
_test_end:
pop si
pop bx
pop ax
ret
MSG_TEST db "12341234567", 0
times 510 - ($-$$) db 0 ; pad out (512 bytes)
dw 0xaa55 ; magic number bootable
Я не думаю, что эта проблема имеет какое-то отношение к совместимости с 32/64 бит, поскольку на этом этапе я все еще в 16-битном режиме.
'мы ца, как' опечатки? должен быть 'mov ds, ax' –
[link] (http://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface)« 64-разрядная реализация прошивки UEFI может загружать только 64-разрядный загрузчик или ядро операционной системы UEFI. Для обратной совместимости большинство программных средств UEFI на машинах класса ПК также поддерживают загрузку в устаревшем режиме BIOS из дисков с разделением MBR через модуль поддержки совместимости (CSM), который обеспечивает совместимость с устаревшим BIOS. В этом случае загрузка выполняется в так же, как на устаревших системах на базе BIOS, игнорируя таблицу разделов и полагаясь на содержимое загрузочного сектора ». –