Это продолжение от (реальный режим nasm x86) Как писать / читать строки в загруженном секторе? .
Я работаю над игрушечной ОС дляРеальный режим x86 в NASM.Загрузочный сектор 512B загружает другой сектор с остальной частью кода.Проблема в том, что мне кажется, что в конце программы не хватает места.
Вот начало исходного файла:
;;; nasm -f bin -o boot.bin os.asm
;;; qemu-system-x86_64 boot.bin
bits 16
section boot, vstart=0x0000
;; Load next sector.
;; adapted from:
;; https://blog.benjojo.co.uk/post/interactive-x86-bootloader-tutorial
mov ah, 0x02
mov al, 1
mov ch, 0
mov cl, 2
mov dh, 0
mov bx, newsector
mov es, bx
xor bx, bx
int 0x13
jmp newsector:0
newsector equ 0x0500
times 510-($-$$) db 0
db 0x55
db 0xaa
section os, vstart=0x0000
mov ax, newsector
mov ds, ax
А вот и конец исходного файла,где я храню данные.Есть раскладка клавиш для преобразования ввода в соответствии с раскладкой клавиатуры Дворака.Но программа, похоже, «обрезается» после fu
.
input times 16 db 0
repl_prompt times 16 db 0
dvorak db 1
dvorak_keymap:
db "aa"
db "nb"
db "ic"
db "hd"
db "de"
db "yf"
db "ug"
db "jh"
db "gi"
db "cj"
db "vk"
db "pl"
db "mm"
db "ln"
db "so"
db "rp"
db "xq"
db "or"
db ";s"
db "kt"
db "fu"
db ".v" ; FIXME: gets cut off here
db ",w"
db "bx"
db "ty"
db "/z"
db 0
Так что при загрузке ОС вы можете набирать клавиши a
- u
в Dvorak, но не v
-z
.Кроме того, вызов функции программы print
для строки dvorak_keymap
подтверждает, что строка заканчивается после fu
.
Но, что более важно, это означает, что в моей программе закончилось свободное место, поэтому яне могу добавить больше данных или кода.Я не могу достичь предела памяти в 1 МБ, потому что исходный файл имеет размер только 282.
Я предполагаю, что это как-то связано с тем, как я загружаю сектора?Я новичок в сборке и низкоуровневом программировании, поэтому любая помощь будет принята с благодарностью.
source: https://github.com/jtherrmann/os/blob/master/os.asm
raw: https://raw.githubusercontent.com/jtherrmann/os/master/os.asm
Редактировать: Кроме того, когда я добавляю больше данных / кода выше в файл, раскладка клавиатуры обрезается раньше, а когда я удаляю данные / код более высокого уровня, раскладка клавиатуры отключается позже или не выполняется вовсе.Так что я знаю, что это как-то связано с ограниченным пространством.