В настоящее время я работаю над операционной системой (ничего серьезного), и я хотел бы иметь какую-то форму пользовательской системы, но для этого мне нужно иметь возможность записывать и читать мои данные (например, переменные) вдискета, на которой он находится
Я уже пытался использовать int 0x13 / ah = 0x02 и 0x03, но я просто не могу заставить его работать
writeDisk.asm:
writeDisk:
pusha
mov ah, 0x03
mov dl, 0
mov ch, 0
mov dh, 0
push bx
mov bx, 0
mov es, bx
pop bx
mov bx, 0x7c00 + 512
int 0x13
jc wdisk_error
popa
ret
wdisk_error:
mov si, wdisk_msg_err
call printf
jmp $
readDisk.asm тоже самое, но с 0x02 вместо 0x03
main.asm:
[org 0x7c00]
; Print message
mov si, msg_0
call printf
; Reading from sector 2
mov al, 1
mov cl, 2
call readDisk
jmp debug_label
jmp $
%include "./printf.asm"
%include "./readDisk.asm"
%include "./writeDisk.asm"
; Variables
msg_0: db "Loaded in 16-bit Real Mode to memory location: 0x7c00.", 0x0a, 0x0d, 0
rdisk_msg_err: db "Error Loading Disk.", 0x0a, 0x0d, 0
rdisk_msg_suc: db "Disk Load Successfull",0x0a, 0x0d, 0
wdisk_msg_err: db "Error Writing to Disk", 0x0a, 0x0d, 0
wdisk_msg_suc: db "Write to Disk Successfull", 0x0a, 0x0d, 0
; Debug variable
testByte db 1
; Padding and magic number
times 510-($-$$) db 0
dw 0xaa55
debug_label:
mov si, rdisk_msg_suc
call printf
mov ah, 0x0e
mov al, byte [testByte]
int 0x10
mov byte [testByte], 2
; Writing to sector 2
mov al, 1
mov cl, 2
call writeDisk
mov si, wdisk_msg_suc
call printf
mov ah, 0x0e
mov al, byte [testByte]
int 0x10
jmp $
; Padding
times 512 db 0
Когда я пишу testByte на экран ...хочу, чтобы каждый раз, когда я это записывал, он менялся, а затем, если я перезагружу ОС, он будет таким же.Но это остается другим.Итак, как мне сохранить значение testByte?
Я также проверил, получаю ли я какие-либо коды ошибок при записи / чтении, но он говорит, что все в порядке.
(Также ... Яиспользую NASM для компиляции и Virtualbox для тестирования)