Как правильно сказал Майкл, нажатие [ENTER] также сохраняется во входном буфере. Вы должны заменить его на 0 перед вызовом INT 21/41
start:
;enter the name of the file
lea dx,max1
mov ah,0ah
int 21h
mov si,offset act1 ; inc si is coming before cmp, so start ahead
lookup:
inc si
cmp byte ptr [si],0Dh
jnz lookup
mov byte ptr[si],0
;delete the file
mov ah,41h
lea dx, inp1
int 21h
подсказка: если вы «вкл си» после сравнения, вы будете уничтожить его установки флагов. поэтому я переместил inc si перед сравнением, и SI пришлось загрузить один байт перед буфером. ps: поиск довольно прост (и опасен, он не останавливается, прежде чем он найдет ЛЮБОЙ 0x0D в памяти!), Я уверен, что есть инструкция x86 loopup somwhere :-)
как (снова) Майкл заявил (снова) правильно, второй байт входного буфера будет указывать, как долго была введенная строка (и где находится 0x0d, поскольку это последняя введенная буква). Таким образом, нет никакой необходимости искать его, то на [INP1 + [ACT1]]
start:
lea dx,max1 ;enter the name of the file
mov ah,0ah
int 21h
pick:
mov si,offset inp1 ; get offset of entered string
xor bh,bh
mov bl,[act1] ; and it's len (the CR should be there)
mov byte ptr [bx+si],0 ; replace it with a 0
mov ah,41h ;delete the file
lea dx, inp1
int 21h
Символы, которые вы получите в 'inp1' включает окончательное возвращение cariiage. Предположительно, имя файла, который вы пытаетесь вернуть, не содержит возврата каретки. – Michael
использовать старый добрый «debug.com», проследить в программе до первого int21h и посмотреть, что вводится ... это не совсем то, что int 21/41h ожидает ;-) – Tommylee2k
Это удаление, а не удаление (название, код комментарий) –