2015-12-04 3 views
2

Здравствуйте, я новичок в MASM и цель состоит в том, чтобы открыть файл, но мой код не работаетФайл не открывается

У меня есть этот фрагмент кода:

.data 
filename db "highscore.txt", 0 
handle dw ? 
buffer db 100 dup(?) 

.code 
... 
mov dx, offset filename 
mov al, 2 
mov ah, 3dh 
int 21h 

mov handle, ax 
jc erroropening 

mov dx, offset buffer 
mov bx, handle 
mov cx, 100 
mov ah, 3fh 
int 21h 

mov counter_files, ax 

mov bx, handle 
mov ah, 3Eh 
int 21h 
... 
erroropening: 
    mov dx, offset newline 
    mov ah, 09h 
    int 21h 
    mov dx, offset errormsg 
    mov ah, 09h 
    int 21h 
    mov bx, handle 
    mov ah, 3Eh 
    int 21h 
... 

, но как-то файл в не открытии, хотя он находится в той же папке моего asm-файла. Пожалуйста, помогите, я новичок здесь.

+0

Вы проверили код ошибки? Правильно ли настроен ваш 'DS'? Вы пытались использовать отладчик? – Jester

+0

Что значит DS? Я никогда не пробовал отладчик. @ Jester – rjk

+0

'DS' - это регистр сегмента данных. Вам нужно настроить его на то, чтобы указать на свои данные (вы уже должны знать эту основную вещь, прежде чем начинать делать файлы в/в ...). Научитесь использовать отладчик. – Jester

ответ

3

3 наблюдения о программе:

  • Как Dirk Вольфганг Glomp сказал DOS использует 8.3 имена файлов и, таким образом, имя ограничено до 8 символов. Ваша строка «highscore.txt» использует 1 символ слишком много для части имени.

  • Когда вы прыгаете в erroropening вы уже перенесли регистр AX в ручки переменной. В этот момент AX имеет код ошибки, а - не ручка. Тем не менее вы используете его для закрытия файла после отображения сообщения.

  • Вам также лучше проверить CF, поставляемый функцией DOS ReadFile. Добавьте еще одну процедуру с ошибкой, и в этом закрытие файла было бы разумной задачей.

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