Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
sistemnoe_programmirovanie / 06 Мр по лаб_раб_Асс_инф.doc
Скачиваний:
135
Добавлен:
18.02.2016
Размер:
1.18 Mб
Скачать

%Title "#dec_bin.Asm"

;Модуль ввода 10-тичного ASCII- числа с последующим его преобразованием в 16- разряд-

;ный двоичный дополнительный код.

;Вход: Вводимое с клавиатуры по запросу программы ASCII-число с основанием "10" в

;диапазоне от -32768 до 32767. Число вводится старшими разрядами вперёд с вводом знака "-

;" для отрицательных чисел. Ввод числа заканчивается спецификатором d.

;Выход: АХ- 16- разрядный двоичный дополнительный код,

; CF- ошибка ввода: выход из диапазона -32768...32767, либо ввод ошибочного символа.

Ideal

Model small

Dataseg

In_bufdb8,?,8dup(?)

;5- разрядов +"знак "+ "спецификатор "+"CR"

Codeseg

public ASCIIdec_bin

proc ASCIIdec_bin

……………..

ret

endp ASCIIdec_bin

End

%Title "Bin_#bin.asm"

;Модуль для преобразования дополнительного кода двоичного числа из рег. АХ ;в ASCII- строку двоичных символов.

;Вход: АХ- дополнительный код двоичного числа.

;Выход: АХ- дополнительный код двоичного числа,

;Буфер Bin_buf – 16 байтная ASCII- строка двоичных символов.

Ideal

Model small

Dataseg

public Bin_buf

Bin_buf DB 16 dup(?)

Codeseg

public Bin_ASCIIbin

proc Bin_ASCIIbin

……………..

endp Bin_ASCIIbin

End

%Title "Bin_#dec.asm"

;Модуль для преобразования дополнительного кода двоичного числа в ASCII-

;число с основанием "10" и спецификатором d.

;Вход: АХ- дополнительный код двоичного числа.

;Выход: АХ- дополнительный код двоичного числа,

;7-байтный буфер Dec_buf с восстановленным из рег. АХ десятичным числом

;(знак + 5 цифр + спец-тор).

Ideal

Model small

Dataseg

public Dec_buf

Dec_bufdb7dup(?) ;Буфер с пробелами

Codeseg

public Bin_ASCIIdec

proc Bin_ASCIIdec

……………….

endpBin_ASCIIdec

End

Ниже приводится один из возможных вариантов главного модуля, использующего вышеприведённые вспомогательные модули. В программе используется простой экранный интерфейс, основанный на материале лабораторной работы № 2. Вы можете его усовершенствовать на основе использования функций BIOS. Кроме того, с целью облегчения понимания работы программы объединены в одну две различные ошибки ввода – переполнение и неправильно введённый разряд числа.

%Title"#10bin10.Asm"

;Демонстрационная программа ввода и преобразования десятичных знаковых

;чисел (диапазон -32768...32767) в двоичные и их обратное восстановление. ;Особенности работы с программой регламентируются сообщениями, ;выводимыми программой на экран.

Ideal

Modelsmall

Stack256

%nomacs ;Исключить из листинга макрорасширения

Macro out_str$ mes ;Макрос вывода строки mes

……………..

Endm out_str$

Macro out_buf buf,number

;Макрос вывода содержимого bufс числом байтовnumber

……………………..

Endm out_buf

Dataseg

extrn Bin_buf:byte:16, Dec_buf:byte:7

mes1 DB 13,10,'Введите знаковое десятичное число со специфика-'

DB 13,10,'тором d в диапазоне от -32768d до 32767d: $'

mes2 DB 13,10,'Ошибка ввода: переполнение или недопустимый символ $'

mes3 DB 13,10,'Преобразованное двоичное число в дополнительном коде:$'

mes4 DB 13,10,'Восстановленное из двоичного кода десятичное число: $'

mes5 DB 13,10,'Продолжаем работу <F1>, или выходим <F10>? $'

Codeseg

extrn ASCIIdec_bin:proc, Bin_ASCIIbin:proc, Bin_ASCIIdec:proc

Start: mov ax,@data ;Установка в ds адреса

mov ds,ax ;сегмента данных

call screen ;Очистка экрана с установкой курсора

;в левый верхний угол (см. лаб. раб. №3)

Again: out_str$ mes1 ;Вывод сообщения mes1

call ASCIIdec_bin ;Ввод десятичного числа с последующим

;преобразованием его в двоичный дополнительный код

jc Abort ;Допущена ошибка при вводе?

callBin_ASCIIbin;Нет. Преобразовать двоичный код вASCII-

;строку из двоичных цифр

out_str$ mes3 ;Вывод сообщения mes3

out_buf Bin_buf,16 ;Вывод на экран двоичного кода введённого

;числа

call Bin_ASCIIdec ;Преобразовать двоичный код в ASCII- строку

;из десятичных цифр

out_str$ mes4 ;Вывод сообщения mes4

out_buf Dec_buf,7 ;Вывод на экран восстановленного из ;двоичного кода десятичного числа

;Блок управления программой. Продолжение работы – <F1>, выход -<F10>.

…………………

Exit mov ax,4C00h ;Функция DOS 4Сh: выход из программы

int21h;ВызовDOS. Останов

Abort: out_str$ mes2 ;Вывод сообщения mes2

jmp Again ;Повторим ввод

END Start ;Конец программы/точка входа