#assembly #directory #dos #x86-16 #qemu
#сборка #каталог #dos #x86-16 #qemu
Вопрос:
Я только что написал простой код ядра, который устанавливает каталог. код довольно простой :
call Set_Directory
call Processed_Exit
Write:
mov al,[si]
mov ah,0x0e
mov bl,0x07
mov bh,0x00
int 0x10
inc si
mov dl,[si]
cmp dl,0x00
jne Write
ret
Set_Directory:
xor ax,ax
mov ah,0x3b
xor dx,dx
mov dx,DirectoryY
int 0x21
cmp al,0x03
je Terminated_Exit
cmp al,0x05
je Terminated_Exit
cmp al,0x06
je Terminated_Exit
cmp al,0x10
je Terminated_Exit
ret
Processed_Exit:
mov si,Processed
call Write
int 0x19
Terminated_Exit:
mov si,Terminated
call Write
int 0x19
Processed db 'Processed',0
Terminated db 'Terminated',0
DirectoryX db 'X'
DirectoryY db 'Y'
Я знаю, что у меня нет каталога Y (я пытаюсь создать каталог для своей собственной операционной системы)
Я просто пытаюсь правильно получить ошибку, если у меня не было такого каталога. Я проверил значения ошибок в http://spike.scu.edu.au /~барри/прерывает.html#ah39
возвращаемые значения при ошибке 0x03 - 0x05 - 0x06 - 0x10
такие, как вы видите в моей программе, я написал, что если ax был равен этим значениям, выведите «Terminated», но он печатает «Processed», а затем перезагружается
почему я получаю этот вывод?
это код, который я использовал для создания каталога, я не знаю, действительно ли он работал или нет, потому что я не могу получить сообщение об ошибке при установке каталога в X
Create_Directory:
xor ax,ax
mov ah,0x39
mov dx,Directory
int 0x21
cmp al,0x03
je Terminated_Exit
cmp al,0x05
je Terminated_Exit
ret
это даже способ записи для создания каталога или установки каталога:/ ?
Я использую NASM, и код будет выполняться на Qemu
заранее спасибо
Комментарии:
1. Для начала имена путей должны заканчиваться нулем, поэтому вы хотите
DirectoryX db 'X', 0
и так далее. Кроме того, правильный способ проверить возврат ошибки из вызова DOS — это проверить флаг переноса; только если он установлен, вы можете ожидать, что код ошибки в AX будет значимым. И обратите внимание, что если есть ошибка, код ошибки может быть чем-то иным, чем одна из возможностей, которые вы явно тестируете.2. Вы используете это под реальной DOS или под своей собственной ОС?
3. В dosbox вызов chdir завершается ошибкой с AL = 03h и выводит завершенное сообщение, как и ожидалось.
4. @NateEldredge Я использую qemu для эмуляции в Linux. Я тоже проверю DOSBox. спасибо
5. Да, но qemu эмулирует только аппаратное обеспечение. Я спрашиваю об операционной системе, которую вы используете внутри нее.