
- •В. Синицина
- •Содержание
- •Введение
- •Лабораторная работа № 1
- •1.2.2 Путь выполнения команды
- •1.2.3 Трансляция программы. Опции командной строки
- •1.2.4 Структура программы для .Exe- и .Com-файлов. Образ программы в памяти
- •%Title "Имя exe-файла программы"
- •%Title "Имя com – файла программы"
- •1.2.5 Работа с отладчиком Turbo Debugger (td)
- •1.2.6 Форматы машинных команд и их кодирование
- •1.2.7 Работа над синтаксическими ошибками при ассемблировании программы
- •1.3. Задание к работе. Порядок выполнения
- •1.4 Контрольные вопросы
- •Лабораторная работа №2 преобразование форматов числовых данных в операциях ввода-вывода
- •2.1 Целевые установки
- •2.2 Методические рекомендации
- •2.2.1 Представление знаковых и беззнаковых чисел в 16-разрядном компьютере
- •2.2.2 Преобразование ascii-кодов чисел с произвольным основанием в двоичное число
- •2.2.3 Преобразование двоичного числа в ascii-строку числа по произвольному основанию
- •2.2.4 Задание к работе. Порядок выполнения
- •2.2.5 Вопросы построения многомодульных программ
- •%Title "#dec_bin.Asm"
- •%Title"#10bin10.Asm"
- •2.2.6 Ассемблирование и компоновка отдельных модулей в программу. Создание библиотеки объектных модулей
- •2.3 Контрольные вопросы
- •Лабораторная работа № 3
- •3.3. Задания к лабораторной работе
- •4.2.2 Краткие комментарии к динамической библиотеке
- •4.3 Контрольные вопросы
- •5.2.2 Ввод с клавиатуры символьной информации
- •5.2.3 Функции dos вывода данных на экран
- •5.2.4 Расширенные коды ascii и управление программой с клавиатуры
- •5.2.5 Строковые команды. Общая характеристика
- •5.3 Задания к работе. Подготовка и выполнение
- •5.4 Контрольные вопросы
- •Лабораторная работа № 6
- •6.2.2 Прямое программирование видеобуфера в текстовом режиме
- •6.2.3 Справочные данные по функциям bios Прерывание int 10h. Видеофункции bios
- •Рекомендации по использованию видеосервиса bios
- •Прерывание int 16h
- •Задержка программных операций
- •Int 15h, функция 86h
- •6.3 Варианты индивидуального задания
- •6.4 Контрольные вопросы
- •Лабораторная работа № 7
- •7.2.2 Oчиcткa буфepa клaвиaтуpы
- •7.2.3 Пpoвepкa cимвoлoв в буфepe
- •7.2.4 Oжидaть ввoд cимвoлa и нe вывoдить eгo нa экpaн
- •7.2.5 Oжидaниe нaжaтия клaвиши и эxo нa экpaн
- •7.2.6 Пpиeм cимвoлa бeз oжидaния
- •7.2.7 Пoлучeниe cтpoки cимвoлoв
- •7.2.8 Пpoвepкa/уcтaнoвкa cтaтуca клaвиш-пepeключaтeлeй
- •7.2.9 Haпиcaниe пpoцeдуpы ввoдa c клaвиaтуpы oбщeгo нaзнaчeния
- •7.2.10 Пepeпpoгpaммиpoвaниe пpepывaния клaвиaтуpы
- •7.2.11 Пepeпpoгpaммиpoвaниe oтдeльныx клaвиш
- •7.2.12 Cвoднaя тaблицa cкaн-кoдoв
- •7.2.13 Cвoднaя тaблицa pacшиpeнныx кoдoв
- •Лабораторная работа № 8
- •8.3 Задания к лабораторной работе
- •Лабораторная работа №9
- •9.2.2 Пpoгpaммиpoвaниe микpocxeмы uart 8250
- •9.2.3 Инициaлизaция пocлeдoвaтeльнoгo пopтa
- •9.2.4 Уcтaнoвкa тeкущeгo кoммуникaциoннoгo пopтa
- •9.2.5 Oпpeдeлeниe cтaтуca кoммуникaциoннoгo пopтa
- •9.2.6 Инициaлизaция и упpaвлeниe мoдeмoм
- •9.2.7 Пepeдaчa дaнныx
- •9.2.8 Пoлучeниe дaнныx
- •9.2.9 Пocылкa/пoлучeниe дaнныx c пoмoщью кoммуникaциoннoгo пpepывaния
- •Список использованных источников
%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 ;Конец программы/точка входа