
- •В. Синицина
- •Содержание
- •Введение
- •Лабораторная работа № 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ния
- •Список использованных источников
2.3 Контрольные вопросы
Изложите алгоритм преобразования ASCII-кода числа с произвольным основанием в двоичное число.
Изложите алгоритм преобразования двоичного числа в ASCII-строку числа с произвольным основанием.
В чём заключается концепция модульного программирования?
Укажите основные синтаксические различия в организации программных модулей, принадлежащих одной программе?
Как вы понимаете принцип локализации переменных в модуле и деление переменных модуля на внутренние и внешние.
Как экспортировать из модуля процедуры, числовые константы и переменные в другие модули?
Как импортировать в модуль процедуры, числовые константы и переменные из других модулей?
Напишите команду, создающую библиотеку mta.libиз объектных модулейa.obj, b.objиc.obj.
Напишите команду создания исполнительного файла программы с главным модулем main.obj, вспомогательные модули которого находятся в библиотекеmylib.
Список литературы:
1-48с., 2-221с., 3-258с., 4-218с.
Лабораторная работа № 3
Модульное программирование. Организация интерфейса с процедурой. Передача аргументов через регистры, через общую область памяти, через стек. Возврат результата из процедуры.
3.1 Целевые установки
Ознакомление с технологией модульного программирования, с работой процедур на ассемблере.
Научиться составлять различные программы, используя процедуры.
Умело использовать данный материал при решении различных задач.
3.2 Методические рекомендации
3.2.1 Краткое описание теоретического материала
Концепция модульного программирования.
Функциональная декомпозиция задачи – разбиение большой задачи на ряд более мелких, функционально самостоятельных подзадач – модулей.
Модуль – основа концепции модульного программирования. Каждый модуль в функциональной декомпозиции представляет собой «черный ящик» с одним входом и одним выходом.
Реализуемые решения должны быть простыми и ясными.
Назначение всех переменных модуля должно быть описано с помощью комментариев.
Процедуры в языке ассемблера.
Размещение процедур в программе:
в начале программы (до первой исполняемой команды);
в конце (после команды, возвращающей управление операционной системе);
промежуточный вариант – тело процедуры располагается внутри другой процедуры или основной программы;
в другом модуле.
Для того, чтобы объявить о видимых извне объектах, программа должна использовать две директивы: extern и public. Директива extern - для объявления некоторого имени внешним по отношению к данному модулю. Это имя в другом модуле должно быть объявлено в директиве public. Директива public для объявления некоторого имени видимым в других модулях.
extern имя: тип, …, имя: тип
public имя, …, имя
Имя – идентификатор, определенный в другом модуле. Это:
имена переменных, определенных директивами типа db, dd и т.д.;
имена процедур;
имена констант, определенных операторами = и equ.
Возможные значения типа определяются допустимыми типами объектов для этих директив:
если имя – это имя переменной, то тип может принимать значения byte, word и т.д.;
если имя – это имя процедуры, то тип может принимать значение near или far;
если имя – это имя константы, то тип должен быть abs.
; модуль 1
masm
.model small
.stack 256
.data
…
.code
my_proc1 proc
…
my_proc1 endp
my_proc2 proc
…
my_proc2 endp
public my_proc1
start:
mov ax, @data
…
end start
; модуль 2
masm
.model small
.stack 256
.data
…
.code
extern my_proc1
start:
mov ax, @data
…
call my_proc1
end start
Существуют следующие варианты передачи аргументов в модуль:
через регистры;
через общую область памяти;
через стек;
с помощью директив extern и public.
Передача аргументов через регистры.
Данные становятся доступными немедленно после передачи управления процедуре. Ограничения:
небольшое число доступных для пользователя регистров;
нужно постоянно помнить о том, какая информация в каком регистре находится;
ограничение размера передаваемых данных размерами регистра (если размер данных превышает 8, 16 или 32 бит, то передачу данных посредством регистров произвести нельзя).
Передача аргументов через общую область памяти.
Этот вариант предполагает, что вызывающая и вызываемая программы усвоились использовать некоторую область памяти как общую. Транслятор предоставляет специальное средство для организации такой области памяти – это атрибут комбинирования сегментов. Значение common означает, что все сегменты, имеющие одинаковое имя в объединенных модулях, будут располагаться компоновщиком, начиная с одного адреса оперативной памяти.
Передача аргументов через стек.
Стек обслуживается тремя регистрами: ss, sp, bp. регистры ss и sp всегда указывают на вершину стека. Для осуществления произвольного доступа к данным в стеке используется регистр bp – указатель базы. Перед использованием этого регистра для доступа к данным стека его содержимое необходимо правильно инициализировать. Для этого в начало процедуры рекомендуется включить дополнительный фрагмент кода – пролог процедуры. Конец процедуры также должен быть оформлен особым образом и содержать действия, обеспечивающие корректный возврат из процедуры – эпилог процедуры.
; пролог процедуры
push bp
mov bp, sp
; эпилог процедуры
mov sp, bp
pop bp
ret
Использование директив extern и public.
Варианты применения данных директив:
оба модуля используют только сегмент данных вызывающей программы;
у каждого из модулей есть свой собственный сегмент данных;
использование атрибута комбинирования (объединения) сегментов private в директиве сегментации segment.
Возврат результата из процедуры возможен:
с использованием регистров; с использованием общей области памяти; с использованием стека.