Почему вместо слова удаляется 60 символов?

Нужно по нажатии клавиши (в частности V) удалить из файла одно слово. Вместо слова удаляется ровно 60 символов. Помогите, пожалуйста
.model tiny
.code
org 100h

Entry:  

;----------------открываем файл-----------------------

mov ax,3d00h    ; открываем для чтения
mov dx, offset file_name
int 21h         ; в ax деcкриптор файла
mov descr, ax   ; описатель файла
mov bx, ax

mov ax, 4200h       ;установим указатель на начало файла
xor cx, cx
xor dx, dx
int 21h         

mov ah, 3Fh     ;ф-я чтения
mov cx, 1          ; 1 байт
lea dx, offset buffer
mov bx, descr
int 21h

mov cx, ax          ;реальная длина прочитанного фрагмента

mov ah, 3Eh     ;файл закрываем
mov bx, descr
int 21h

;----------------файл закрыли--------------------------

;----------------ожидание нажатия клавиши--------------

waiting:
mov ah,1            ;если нет нажатия, то переходим далее
int 16h
mov ah,0            ;иначе - считываем нажатую клавишу
int 16h
cmp ah, 2eh         ;если нажали C, то выходим на запись
je recording
cmp ah, 2fh         ;если нажали V, то ищем пробел
je searching
jne waiting         ;иначе переходим снова в ожидание

;----------------поиск пробела--------------------------

searching:
mov di, dx   ;адрес начала буфера
dec di       

search:
inc di
mov al, [di]        ;читаем его
cmp al, 39h         ;пробел?
je Prob_found
jne Clear_symb

Clear_symb:
dec cx
jmp search

Prob_found:         ;найден пробел
dec cx              ;уменьшим длину буфера
jmp waiting         ;и переходим в ожидание

recording:
mov   ah,3Dh  ; открытие файла
mov   al,2
lea   dx,file_name
int   21h
mov   descr,ax

mov   ah,40h  ; запись в файл
mov   bx,descr
lea   dx,buffer
int   21h

mov   ah,3Eh  ; закрытие файла
mov   bx,descr
int   21h
ret


;--------------данные-----------------------------------

.data
file_name  db "myfile.txt",0  ;имя файла
descr   dw  ?
buffer db 512 dup (?)    ;буфер для чтения "хвоста" файла

END Entry
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
saboteur_kiev
@saboteur_kiev
software engineer
cmp al, 39h ;пробел?

А почему у вас пробел это 39h, если всегда был 20h?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы