; Считывает строку, выводит число введенных символов
; выводит строку где все символы переведены в нижний регистр
;
include io.asm
.model SMALL
MAXL equ 254 ; ограничение на количество символов
.stack 256
.data
invit db "Введите строку$"
maxlen db MAXL ; ограничение на количество символов
len db ?
cmd db MAXL dup(?)
lbx dw ?
.code
Entry:
mov AX,@data
mov DS,AX
;------------------------------------------------------------------------
lea DX, maxlen ; Считываем строку функцией 0a прерывания 21
mov AH,0ah ; В DX должен хранится адрес байта, в котором
int 21h ; максимум числа считываемых символов
; В следующий за ним байт после считывания запишется
; длина считанной строки, а в следующие байты
; само считанное слово. В нашем случае cmd.
newline
mov AL,len ; len байт, его можно переслать только в другой байт
cbw ; конвертируем байт AL в слово AX. Для беззнаковых
; равносильно mov AH,0
outword AX ; выводим на экран число символов в введённоё строке
newline
mov DI,AX ;
mov cmd[DI],0 ; помещаем метку конца строки в конец строки
; Сразу mov cmd[len],0 или mov cmd[AX],0 НЕЛЬЗЯ!
;Посимвольный вывод
xor DI,DI ; обнуляем номер выводимого символа
outcharsbegin:
mov DL,cmd[DI] ;помещаем символ с номером DI в регистр DL
cmp DL,0
je outcharsend
or DL, 20h ; конвертим в нижний регистр
mov ah,02h ; выводим символ из регистра DL
int 21h
inc DI ; инкрементируем номер текущего символа
jmp outcharsbegin
outcharsend:
; задержка до нажатия клааиши
mov AH, 08h
int 21h
;------------------------------------------------------------------------
mov AH,4ch
int 21h
end Entry