Раздел «Язык Ассемблера».TurboAssemblerSample6:

TurboAssembler: Пример 6

; Считывает строку, выводит число введенных символов
; выводит строку где все символы переведены в нижний регистр
;

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