mov ah, 0Ah
lea dx, s1
int 21h
В вашей программе адрес этой функции DOS должен быть "maxlength".
Вы также можете написать это как lea dx, [s1-2]
.
Фактический буферDOS требует:
MyInput db 11, 0, 11 dup(?)
mov ah, 0Ah
lea dx, MyInput
int 21h
Подробнее о функции DOS 0Ah можно прочитать в Как работает буферизованный ввод .
и первыйиз строки s1
Вы решили это, написав:
mov AL, s1[BX+1]
mov s2+4, AL
Это не правильно.На s1[bx+1]
в памяти только мусор.Вы можете выбрать 1-й символ s1 с помощью mov al, s1
.
mov AL, s1[BX-2]
mov s2+1, AL
mov AL, s1[BX-2]
mov s2+2, AL
mov AL, s1[BX-2]
mov s2+3, AL
mov AL, s1[BX+1]
mov s2+4, AL
mov s2+5, "$"
В строке s2 доступно только 5 позиций.Ваше добавление +1 к +5 будет писать за этим буфером!Это уничтожит вашу строку NewLine.
Вам нужно использовать дополнения от +0 до +4, чтобы оставаться в пределах буфера.
mov AL, s1[BX-2]
mov s2, AL NEW
mov AL, s1[BX-2]
mov s2+1, AL NEW
mov AL, s1[BX-2]
mov s2+2, AL NEW
mov AL, s1 NEW
mov s2+3, AL NEW
mov s2+4, "$" NEW
И, конечно, вам не нужно читать этоот второго до последнего символа 3 раза.
mov al, s1[bx-2]
mov s2, al
mov s2+1, al
mov s2+2, al
mov al, s1
mov ah, "$"
mov s2+3, ax