Предыдущий раздел | ПРОСТЫЕ ПРОГРАММЫ НА АССЕМБЛЕРЕ | Следующий раздел |
В п.6 подобная программа была разработана нами с помощью Debug. Теперь мы запишем ее на языке ассемблера, добавив небольшую процедуру, которая выводит один символ на экран. Выделение этой, на первый взгляд, лишней процедуры, обусловлено желанием в дальнейшем, вносить изменения в операцию вывода символа, совершенно не влияя на остальную часть программы.
На рис.38 приведено дерево подпрограмм для данной программы. Эта структура показывает, какие подпрограммы (процедуры) входят в состав программы, и как эти процедуры связаны между собой по управлению. При этом самой верхней (т.е. главной процедурой) является Test_write_byte_hex. Данная процедура предназначена для тестирования процедуры Write_byte_hex, выполняющей вывод на экран двузначного шестнадцатеричного числа, содержащегося в байте.
В свою очередь, процедура Write_byte_hex вызывает (инициирует) процедуру Write_digit_hex, выполняющую вывод на экран шестнадцатеричной цифры. В ходе своей работы данная процедура вызывает процедуру Write_char, выполняющую вывод символа на экран.
Рис.38. Дерево подпрограмм для программы вывода двузначного шестнадцатеричного числа
В п. 6 приведены блок-схемы для процедур Write_byte_hex и Write_digit_hex. В следующей программе тексты этих процедур опущены:
[org 100h]
;
; Тестирование процедуры Write_byte_hex
; ---------------------------------------------------
; Вызовы: Write_byte_hex
;
Test_write_byte_hex:
mov dl,3fh ; Тестировать с 3Fh
call Write_byte_hex ; Вывод числа
int 20h ; Возврат в DOS
;
; Вывод двузначного шестнадцатеричного числа
; -------------------------------------------------------------
; Входы: DL содержит выводимое число
; Вызовы: Write_digit_hex
;
Write_byte_hex:
. . . . . . . . ; Тело процедуры Write_byte_hex
;
; Вывод шестнадцатеричной цифры
; ----------------------------------------------
; Входы: BL содержит шестнадцатеричную цифру
; Вызовы: Write_char
Write_digit_hex:
. . . . . . . . ; Тело процедуры Write_digit_hex
ret
;
; Вывод символа на экран
; --------------------------------
; Входы: DL содержит код символа, выводимый на экран
;
Write_char:
push ax
mov ah,2 ; Функция вывода символа
int 21h ; Вывод символа на экран
pop ax
ret
Предыдущий раздел | В начало | Следующий раздел |