Помогите исправить ошибку в коде, ассемблер

программирование ассемблер Dos tasm

Всем здравствуйте. Поставлена довольно тривиальная задача: считать с клавиатуры имя файла и вывести его содержимое на экран. Я никак не могу добавить 0 в конец строки, содержащей имя файла, из-за этого я не могу его открыть. Вот код:

model small
.stack 100h
.data
buf db ?
path db 32 dup(?)
welcome db "Enter file name: $"
errmsg db 0Dh,0Ah,"Can't open this file. $"
;path db "prog.asm",0

.code
main proc
mov ax,@data
mov ds,ax

mov dx,offset welcome ;печатаем приглашение
mov ah,09h
int 21h

mov dx,offset path ;вводим имя файла
mov ah,0ah
int 21h

mov si, 0 ; пишем 0 в конец строки (вот тут глюк)
mov bx, offset path
mov [bx+si], al
c1: cmp al, 0Dh
je c2
inc si
jmp c1

c2: mov byte ptr [bx+si], 0h (суть в том, что 0 не пишется :((( )

; mov dx,offset path
; mov ah,09h
; int 21h

open: mov ax,3d00h ; открываем для чтения
lea dx,path
int 21h
jc error ; если то ошибка открытия

mov bx,ax ; копируем в bx указатель файла
xor cx,cx ; очищаем регистры
xor dx,dx
mov ax,4200h
int 21h ; идем к началу файла
print:
mov ah,3fh ; будем читать из файла
mov cx,1 ; 1 байт
lea dx,buf
int 21h

cmp ax,cx ; если EOF или ошибка чтения
jnz close

mov dl,buf ; выводим буфер
mov ah,2
int 21h
jmp print
close: ; закрываем файл
mov ah,3eh
int 21h
jmp quit

error:
mov dx,offset errmsg
mov ah,09h
int 21h

quit:
mov ax,4c00h
int 21h

main endp
end main
code ends

спасибо.

Примечание:
2 Максим Новиков:
1. В смысле? Там идёт цикл по всей строке и ищет CR, а потом заменяет его на 0
2. нет, тогда почему-то не получается записать в строку
Ответы:
1. А перед записью ноля si инкрементируется?
2. А если просто вначале инициализировать path  нолями:  db 32 dup(0), то алгоритм работать будет?
Ну что, по п.3 получается?


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.