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

Turbo Assembler: Пример 4

; Программа cоздает двумерный массив --
; таблицу умножения M x N
; M x N < 256

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

.data
; СЕГМЕНТ данных
M dw (?)
N dw (?)
t dw 256 dup (?)

invit db "Введите координаты M и N $"
.code
; СЕГМЕНТ кода

Entry:  
; Стандартное начало
        mov AX,@data 
        mov DS,AX
;------------------------------------------------------------------------
        lea DX, invit   ; Процедура outstr печатает текст
        outstr          ; начало которого указано в DX
        inint M         ; считываем размеры таблицы
        inint N         ;

; НАЧАЛО ЦИКЛА В ЦИКЛЕ
; Регистр CX содержит переменную цикла
; как первого так и второго
; перед тем как начать вложенный цикл
; мы запоминаем счетчик внешнего цикла в стеке — push CX
; а потом восстанавливаем его — pop CX
; по команде loop он уменьшается на единицу пока не дойдёт до нуля
; Когда CX=0, цикл заканчивается 

; Обнуляем 
        xor DI,DI       ; DI - переменная 1,  её обнуляем перед
                        ; первым циклом
                        ; SI - переменная 2, её будем обнулять каждый раз
                        ; перед началом внутреннего цикла
        xor BX,BX       ; BX - смещение в массиве t
                        ; каждый раз оно увеличивается на 2 
                        ; так как элемент массива t есть слово = 2 байта
                        
; ЦИКЛ 1
        mov CX,N        ; инициализируем переменную внешнего цикла
C1:     inc DI          ; DI++
        push CX         ; запомним переменную внешнего цикла в СТЕКЕ
        xor SI,SI       ; обнулим переменную 2
; ЦИКЛ 2
        mov CX,M        ; инициализируем переменную внутреннего цикла
C2:     inc SI          ; SI++
        mov AX,DI       ; \ В результате этих трех  операций в t[BX]
        mul SI          ; |  помещается произведение SI на DI
        mov t[BX],AX    ; /
        outint t[BX]    ; вывод произведения SI x DI
        add BX,2        ; переход к следующему слову массива t
        outch 09h       ; вывод на экран символа TAB чей ASCii код = 9
        loop C2         ; приводит к смещению курсора в ближайшую справа
                        ; кратную 8 позицию
; КОНЕЦ ЦИКЛА 2
        pop CX
        newline
        loop C1
; КОНЕЦ ЦИКЛА 1
; КОНЕЦ ЦИКЛА В ЦИКЛЕ

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

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