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

Turbo Assembler: Пример 3

; Программа находит скалярное произведение и
; сумму двух векторов

include io.asm  ; описывает различные процедуры ввода/вывода на экран
      ; в частности outint
.model SMALL
.stack 256

.data
; СЕГМЕНТ данных
n equ 10
x dw n dup (?)
y dw n dup (?)
z dw n dup (?)
xy dw 0

invitX db "Введите координаты 1ого вектора $"
invitY db "Введите координаты 2ого вектора $"
sum db "Сумма векторов: $"
scalar db "Скалярное произведение: $"

.code
; СЕГМЕНТ кода

Entry:  
; Стандартное начало
   mov AX,@data 
   mov DS,AX
;------------------------------------------------------------------------
; Считываем первый вектор
   mov CX, n   ; число вращений цикла
   xor SI,SI   ; обнуляем регистр-индекс
   xor DI,DI   ; DI - cчетчик

   lea DX, invitX   ; Процедура outstr печатает текст
   outstr      ; начало которого указано в DX
   outch 0dh   ; эти две команды равносильны 
   outch 0ah   ;      printf('\n')

; НАЧАЛО ЦИКЛА
; Регистр CX содержит переменную цикла
; по команде loop он уменьшается на единицу пока не дойдёт до нуля
; Когда CX=0, цикл заканчивается 
XIn:   inc DI
   outint DI
   outch '>'
   inint x[SI]
   add SI,2
   loop XIn
; КОНЕЦ ЦИКЛА

;------------------------
; Считываем второй вектор
   mov CX, n   ; снова определяем начальное значение 
         ; `переменной цикла' CX=n
   xor SI,SI   ; обнуляем регистр-индекс
   xor DI,DI   ; DI - cчетчик
        lea DX, invitY
   outstr
   outch 0dh ; эти две команды равносильны 
   outch 0ah ;      printf('\n')
YIn:   inc DI
   outint DI
   outch '>'
   inint y[SI]
   add SI,2
   loop YIn
;--------------------------------------
; Суммируем и выводим на экран результат

   lea DX, sum
   outstr
   outch 0dh  
   outch 0ah 
   outch '('

   mov CX, n
   xor SI,SI     ; обнуляем регистр-индекс

; НАЧАЛО ЦИКЛА
P:   mov AX, x[SI]
   add AX, y[SI]
   mov z[SI],AX
   outint AX
   outch ','
   
   mov AX, x[SI]
   imul y[SI]
   add xy,AX
   add SI,2
   loop P
; КОНЕЦ ЦИКЛА

   outch ')'
   outch 0dh  
   outch 0ah 
   outint xy

; задержка до нажатия клааиши
   mov AH, 08h
   int 21h

;------------------------------------------------------------------------
; Стандартный конец
   mov AH,4ch 
   int 21h
   end Entry