Недавно я начал больше интересоваться загрузчиками, я пытался написать свой собственный, и что-то пошло не так, с комбинацией печати и чтения. кажется, что я перезаписываю следующую переменную, затем я больше не могу печатать.
org 0x7c00 ; starting address
mov si, msg
call print_string ; here's it printing fine
mov si, save
call read_string ; here's everything going fine
mov si, save
call print_string ; but here's something somehow broken
mov si, msg
call print_string ; and now it's not printing the second message (I guess I'm overwriting the "0x00" byte)
jmp $ ; infinate loop
print_string:
pusha
print_char:
mov ah, 0x0e
mov al, [si] ; pass one byte as an argument
int 0x10 ; print to the screen
inc si ; inc si to point to the next byte
cmp al, 0x00 ; compare with 0
jne print_char
popa
ret
read_string:
pusha
read_char:
mov ah, 0x00
int 0x16 ; read keystroke
mov BYTE [si], al ; store into the passed argument(for future use)
mov ah, 0x0e
int 0x10 ; print the char(while typing)
inc si ; point to the next byte
cmp al, 0x0d ; check if 'enter' has pressed
jne read_char
mov BYTE [si], 0x0a
inc si ; point to the next byte
mov BYTE [si], 0x0d ; new line
inc si ; point to the next byte
mov BYTE [si], 0x00 ; last byte
popa
ret
save: db ""
msg: db "input:", 0x00
times 510 - ($ - $$) db 0 ; padding
dw 0xaa55 ; magic
Вводимый мной ввод (перед чтением, представьте, что я нажимаю там "lol"):
input:_
, а затем (после прочтения):
lolput: lol
lol
_
Я был бы очень признателен, если бы кто-то мог мне помочь, я искал около rnet около 3 дней, но тоже ничего полезно было найти. Дайте мне знать, если у вас есть хорошие ресурсы или книги, или какие-либо другие предложения. Надеюсь, я прояснил проблему достаточно.