Существует 2 причины, по которым этот код не будет работать.
- Вы уничтожаете символ $ , который завершает исходное сообщение.
При вводе команд e 100 'enter your name: $'
и e 110 20,0,0
подряд строка $ будет заменена на ноль!Лучше освободить адрес или сократить сообщение. - Вы продолжаете обрабатывать только первый символ
CX
раз.
Поскольку loop this
переходит на lea si,[112] ; this
, регистр SI
будет перезагружен содно и то же значение каждый раз.Поместите цель this , на одну строку ниже.
Я хочу сделать это "mov cx, 6" в переменной путем подсчета длины строкивведено пользователем
Не нужно ничего подсчитывать, так как DOS уже дал вам длину строки.Вы можете получить его, прочитав 2-й байт предоставленного вами буфера.
mov cl, [111] ; 2nd byte contains length of inputted string
mov ch, 0 ; Make word because LOOP uses CX, no just CL
lea si, [112] ; String starts at 3rd byte
mov ah, 2 ; this
mov dl, [si]
int 21
inc si
loop this
Если вы настаиваете на том, чтобы не использовать эту длину строки, предоставленную DOS, вы можете обрабатывать символы, пока не встретите завершающий символ.возврат каретки (13 или 0D в шестнадцатеричном формате)).
mov cx, 0 ; Reset your variable
lea si, [112] ; String starts at 3rd byte
jmp that
mov ah, 2 ; this
int 21
inc cx ; Your calculated length!
inc si
mov dl, [si] ; that
cmp dl, 0D ; Terminating carriage return?
jne this ; Not yet
Здесь CX
- это ваша переменная, которая имеет длину введенной строки.