
- •В. Синицина
- •Содержание
- •Введение
- •Лабораторная работа № 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 "Имя exe-файла программы"
Ideal ;Переводит Turbo Assembler в режим Ideal
Model small ;Директива описания модели памяти. Вводит упрощенные директивы
;управления сегментами
P486N ;Разрешает инструкции старших поколений процессоров. При её
;отсутствии действует по умолчанию P8086. Разрешает использование
;32 – разрядных регистров для адресации и хранения данных
Stack 256 ;Резервирует пространство для стека программы (значение в байтах,
;следующее за директивой)
;1. Здесь следует располагать макроопределения EQU и =
;2. Вставьте здесь директиву Include "filename"
Dataseg ;Начало сегмента инициализированных данных. Допускается также
;расположение здесь и неинициализированных данных, начальные
;значения которых неизвестны на момент запуска программы
;1. Здесь описываются переменные с помощью директив DB,DW и т. п.
;2. Здесь опишите все переменные типа Extrn
Codeseg ;Начало сегмента кода, т.е. части программы, содержащей команды
; процессора.
;Здесь определите все подпрограммы типа Extrn
Start: mov ax, @data ;Точка начала исполнения программы
mov ds,ax ;Установка в регистре DS адреса сегмента данных
;Здесь располагается программа, вызовы подпрограмм и т. п.
Exit: mov ax,4C00h ;Функция DOS: Выход из программы
int 21h ;Вызов DOS. Останов программы
End Start ;Директива конца программы/точки входа. Текст,
;расположенный после этой строки будет игнорироваться ассемблером.
Рис. 1.1Шаблон структуры программы типа.exe
Образ программы в памяти, представленный на рис. 1.2, начинается с префикса программного сегмента PSP(Program Segment Prefix).PSPвсегда имеет размер 256 байтов и содержит данные, используемые операционной системой в процессе исполнения программы. Вслед заPSPрасполагаются сегменты программы. Сегментные регистрыesиdsавтоматически инициализируются на началоPSP.Это даёт возможность, при сохранении значения одного из регистров, обращаться кPSPв случае необходимости. В указатель командipзагружается относительный адрес точки входа в программу (операнд директивыEND), а в указатель стекаsp-смещение конца сегмента стека. Таким образом, после загрузки программы в память, адресуемыми являются все сегменты, кроме сегмента данных. Использование директивыModel,делает доступным ассемблеру несколько служебных идентификаторов, к которым можно обращаться во время работы программы, чтобы получить информацию об адресах используемых сегментов. Например:
@code– 16-разрядный адрес сегмента кода,
@data – 16-разрядный адрес сегмента данных типаnear,
@stack– 16-разрядный адрес сегмента стека.
Вот поэтому-то имя предопределённого идентификатора @dataи используется в первой паре команд кодового сегмента для загрузки сегмента данных.
Объём памяти, занимаемый программой: (138B-1373)*10h+100h=280h=640 байт
Рис. 1.2Образ программыhello.exeв памяти, загруженной командойTdhello.exe
Завершение программы означает передачу управления командному процессору DOS – Command.com, который выводит на экран системный запрос в ожидании следующей команды от оператора. Делается это с помощью функции DOS (ah = 4Ch). Эта функция требует единственного параметра – кода возврата, который и помещается программой в регистрal. Если этот код равен нулю, то исполнение программы прошло корректно, в противном случае была допущена ошибка в предшествующих обращениях программы к другим системным функциям DOS.
В некоторых случаях для создания компактных программ (прежде всего это резидентные программы) бывает удобным не дробить программу на отдельные сегменты. Этой цели в наибольшей мере отвечают программы типа .com, которые состоят лишь из одного сегмента, включающего все компоненты программы.
Шаблон программы типа .comприведён на рис. 1.3. При компоновке программы необходимо использовать опцию /t, которая указывает на создание файла.com вместо.exe.
Образ памяти программы типа .comпоказан на рис. 1.4. После загрузки программы в память все 4 сегментных регистра указывают на начало единственного сегмента –PSP. Указатель стека автоматически инициализируется числом 0FFFEh. Таким образом, независимо от фактического размера программы, ей выделяется 64 Кбайт адресного пространства, нижнюю часть которого занимает стек.