Предыдущий раздел | ПРОСТЫЕ ПРОГРАММЫ НА АССЕМБЛЕРЕ | Следующий раздел |
Ранее в п.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), то теперь транслятор расходует память экономно, не оставляя промежутков между процедурами.
Предыдущий раздел | В начало | Следующий раздел |