установить каталог в сборке

#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 эмулирует только аппаратное обеспечение. Я спрашиваю об операционной системе, которую вы используете внутри нее.