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

10.7. Вывод на экран двузначного шестнадцатеричного числа

В п.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

ret

;

;            Вывод шестнадцатеричной цифры

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

;   Входы: BL содержит шестнадцатеричную цифру

;   Вызовы:     Write_char 

Write_digit_hex:

.    .    .    .    .    .    .    .            ; Тело процедуры Write_digit_hex

ret

;

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

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

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

;

Write_char:

push ax

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

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

pop   ax

ret

 


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