2015-09-30 3 views
0

Я новичок в программировании сборки, и мне было интересно, как я могу проверить, существует ли файл, когда я пытаюсь его создать. В этой программе я ожидал, что она вернет ошибку, если файл с тем же именем существует в той же папке. Однако он просто игнорирует его и создает файл независимо от того, существует он или нет. Может кто-нибудь просветить меня, почему это так? О, и я использую TASM для компиляции.Проверьте, существует ли файл перед его созданием на языке сборки

.model tiny 
.stack 0100h 
.data 
org 01000h 

file db 65,?,64 dup(?) 
crstr1 db 'Enter file name to be created:$' 
crstr2 db 'File successfuly created!' 
db 'Press any key to continue . . .$' 
crstr3 db 'File already exists or invalid name!$' 


.code 
main: jmp begin 

begin: 
    mov ax, @data 
    mov ds, ax 
CLEAR 
GOTOXY 2,4 
DISP crstr1 
INP file 

    ;file check 
    mov cx, 3fh 
    mov dx, offset file 
    mov ah, 4eh 
    int 21h 
    je error 
    mov ah, 3ch 
    mov dx, offset file 
    mov cx, 0 
    int 21h 

    ;no error 
    CLEAR 
    GOTOXY 2,4 
    DISP crstr2 
    mov ah, 08 
    int 21h 
    jmp exit 

error: 
    mov ah,02h 
    mov dh,6 
    mov dl,4 
    int 10h 

    mov ah, 09h 
    mov dx, offset crstr3 
    int 21h 

exit: 
int 20h 
end main 
end 
+0

Вы можете использовать 'int 21h/ah = 3dh' сначала, чтобы открыть файл, если он существует, и создать его только в случае сбоя. Или вы можете попробовать использовать 'int 21h/ax = 4300h', чтобы получить атрибуты файла, которые я ожидал бы сбой, если файл не существует. – Michael

+0

@ Майкл или даже использовать ah = 6ch. –

ответ

0

Использование jc, а не je. В флагом переноса возвращается условие ошибки.

+0

О, извините, на самом деле это часть более крупной программы (управление файлами), и я не стал ее менять. К сожалению, изменение jc не помогло. Теперь он говорит, что файл существует, хотя он не –

+0

@JohnKennethLee Отлаживает ваш код. Убедитесь, что до этого int 21 ваши регистры содержат правильную информацию и действительно указывают на имя файла (также проверьте память). –

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