Предыдущий раздел ПРОСТЫЕ ПРОГРАММЫ НА АССЕМБЛЕРЕ Следующий раздел

10.6. Еще один пример программы

Ранее в п.7.4 мы создали небольшую программу, которая выводила на экран буквы от А до J. Вот эта машинная программа:

 

100             mov   dl,41

102             mov   cx,000a

105             call    0200

108             loop  0105

10A            int     20

200             mov   ah,02

202             int     21

204             inc     dl

206             ret

 

Перепишем теперь эту программу на языке ассемблера:

 

                                [org   100h]

;

;                Вывод 10 символов от А до J

;                --------------------------------------

;    Вызовы:    Write_char

;

Start:

mov   dl,’A’          ; В  DL  код  буквы  А

mov   cx,10          ;В счетчике символов -10

.Loop:             call    Write_char  ; Вывод символа

loop  .Loop          ; Переход к следующему символу

int     20h            ; Возврат в  DOS

;

;           Вывод символа на экран и увеличение кода символа на 1

;           -----------------------------------------------------------------------------

;    Входы:      DL содержит код символа

;    Выходы:   DL содержит код нового символа

;

Write_char:

push  ax

mov  ah,02          ; Функция вывода символа

int     21h            ; Вывод символа на экран

inc     dl              ; Код следующего символа

                       pop   ax

ret                      ; Возврат из процедуры

 

Обратите внимание, что в первом операторе программы второй операнд представляет собой символ, заключенный в кавычки (кавычки могут быть как одиночными, так и двойными). Это означает, что операнд представляет собой код ASCII-символа, заключенного в кавычки.

Отметим попутно еще одну весьма полезную деталь ассемблера. Данный язык позволяет записывать в качестве операнда арифметическое выражение, элементами которого являются константы. Например, оператор “mov dl,‘А’-10” помещает в регистр DL код ASCII-символа “А”, уменьшенный на 10.

В в е д и т е  эту программу в файл Printaj.asm и получите файл Printaj.com. Затем выполните программу. Добившись правильной ее работы, используйте Debug для разассемблирования программы. Посмотрите, как транслятор распределил память для основной программы и для процедуры. Если мы раньше перестраховывались, располагая процедуру подальше (по адресу 200h), то теперь транслятор расходует память экономно, не оставляя промежутков между процедурами.

 


Предыдущий раздел В начало Следующий раздел