2015-12-30 2 views
3

Я не знаю, почему функция 47h возвращает ASCIZ в буфере. Как я могу получить имя текущего каталога? Пожалуйста, помогите мне, мой код ниже.Получить текущую сборку имени каталога 8086 tasm

assume cs:code, ds:data 
data segment 
numed db "Directory name: $" 
msge db "Error!$" ;error if jc is set 
buffer db 200 dup("$") ;buffer for directory name 
data ends 
code segment 
start: 
mov ax, data 
mov ds, ax 
mov es, ax 


mov dl,0 ;default drive 
mov si,offset buffer ;si = buffer 
mov ah,47h 
int 21h 
jc errorr 
jmp final 
errorr: 
    mov ah,09h 
    mov dx,offset msge ;error message 
    int 21h 
final: 
mov ah,09h 
mov dx,offset buffer;print directory name 
int 21h 
mov ax, 4C00h 
int 21h 
code ends 
end start 

ответ

1

Нет проблем здесь в DOSBox 0,74
Если я ставлю программу PAULC.EXE в моем каталоге C:\ASM который имеет подкаталог EXEMPLES, а затем выполнить эти команды из командной строки DOSBox, я получаю правильный ответ:

mount d c:\asm 
cd exemples 
..\paulc.exe 

На экране теперь отображается:

EXEMPLES 

Если теперь я вернулся из этого подкаталога и запустить программу еще раз:

cd.. 
paulc.exe 

Я получаю пустую строку.

0

Мой MS-DOS ссылка говорит о Int функции 21h 47h:

Если каталог является корневой каталог, возвращаемая строка nul (первый байт 0).

Кроме того, имейте в виду, что для функции int 21h 09h требуется завершенная строка $.

+0

не работает. buffer db 200 dup ("$"), buffer = $$$$$ ... – paulc

+0

Итак, что вы ожидаете от текущего каталога? Вы его установили? –

+0

Я хочу напечатать на экране имя каталога, где я work.ex: я работаю в d:/assembleyFolder/example/-> на экране должно быть «Имя каталога: пример» – paulc

 Смежные вопросы

  • Нет связанных вопросов^_^