- •Таганрог 1997 Методическая разработка к лабораторным работам Программирование на языке ассемблера пэвм ibm pc
- •Введение
- •Структура описания лабораторной работы
- •Выполнение работы
- •Разработка и отладка программ на языке ассемблера
- •2.2. Обработка программ в dos
- •Трансляция программы
- •Компоновка программы
- •Запуск программы
- •2.3. Использование отладчика td
- •Как запустить программу под отладчиком
- •Что умеет и чего не умеет отладчик td
- •Меню View Окно Module
- •Окно cpu
- •Окно Watches
- •Окно Dump
- •Экран пользователя
- •Команда Instruction Trace
- •Команда Program Reset
- •3. Пример выполнения работы
- •4. Контрольные вопросы
- •2.2. Режимы адресации
- •3. Пример выполнения работы
- •4. Варианты заданий
- •5. Контрольные вопросы
- •Лабораторная работа
- •Циклические и разветвляющиеся программы1. Цель работы
- •2. Основные сведения
- •3. Пример выполнения работы
- •4. Варианты заданий
- •5. Контрольные вопросы
- •Лабораторная работа
- •Логические команды1. Цель работы
- •2. Основные сведения
- •2.1. Логические команды
- •2.2. Примеры использования логических команд
- •3. Пример выполнения работы
- •4. Варианты заданий
- •5. Контрольные вопросы
- •Лабораторная работа
- •Символьная обработка1. Цель работы
- •2. Основные сведения
- •2.1. Программные прерывания и системные вызовы
- •2.2. Функции dos для ввода с клавиатуры
- •2.3. Функции dos для вывода на экран
- •3. Пример выполнения работы
- •Inpstr db 80, ?, 82 dup( ? ) ; буфер ввода
- •Inc count[si] ;увеличиваем соответств. Счетчик
- •Xor si, si ;Счетчик цифр
- •Int 21h ; строки
- •Inc si ;Счетчик очередной цифры
- •4. Варианты заданий
- •5. Контрольные вопросы
- •Лабораторная работа
- •Десятичная арифметика
- •2.3. Команды десятичной коррекции неупакованных чисел
- •3. Пример выполнения работы
- •4. Варианты заданий
- •5. Контрольные вопросы
- •Лабораторная работа
- •Подпрограммы1. Цель работы
- •2. Основные сведения
- •2.1. Описание подпрограмм
- •2.2. Вызов подпрограмм
- •2.3. Передача параметров
- •2.4. Сохранение регистров
- •2.5. Локальные переменные
- •2.6. Директивы описания сегментов и модели памяти Модели памяти
- •Директивы определения сегментов
- •Макрокоманды начала и завершения программы
- •2.7. Расширенные директивы описания процедур
- •2.8. Область действия имен
- •2.9. Итоги
- •3. Пример выполнения работы
- •Int 21h ;Приглашение к вводу строки
- •Int 21h ;Ввод строки
- •Int 21h ; позиции удаления
- •Int 21h ;Ввод строки числа
- •Int 21h ; числа удаляемых
- •Int 21h ;Ввод строки числа удаляемых
- •Int 21h ;Заголовок вывода
- •Inc bx ;Сдвиг по строке
- •Int 21h ; Вывод результата
- •Inc bx ;Сдвиг по строке
- •4. Варианты заданий
- •5. Контрольные вопросы
- •Лабораторная работа 8 Использование подпрограмм на языке ассемблера в программах на языках c и pascal1. Цель работы
- •2. Основные сведения
- •2.1. Введение
- •2.2. ТерминЫ и сокращения
- •2.3. Соглашения о связях
- •Преобразование имен
- •Передача и возврат управления и данных
- •Сохранение регистров
- •Трансляция и компоновка
- •Преобразование данных
- •Трансляция и компоновка
- •Inc si ;указатель на входную строку
- •3. Пример выполнения работы
- •3.1. Интерфейс Pascal
- •Inc cx ;нет, увеличиваем счетчик символов
- •Inc dx ;да, увеличиваем счетчик строк
- •Inc dx ;нет, будем увеличивать счетчик строк
- •4. Варианты заданий
- •5. Контрольные вопросы
- •БиблиографИя
- •Содержание
- •Заметки
- •Дроздов Сергей Николаевич Калачев Дмитрий Петрович
Экран пользователя
Экран пользователя – это экран вывода вашей программы. Этот экран будет иметь точно такой же вид, какой он имел бы при выполнении вашей программы без отладчика (непосредственно под DOS).
Вы можете использовать данный экран для того, чтобы проверить, что выводит ваша программа, и соответствует ли это тому, что должно быть на экране. Для переключения в экран пользователя выберите пункт меню Window+User Screen (или нажмите Alt+F5).
Меню Run
Команда Run
Команда Run (Выполнение, F9) запускает вашу программу на выполнение. При наступлении одного из следующих событий управление передается отладчику:
ваша программа завершила выполнение;
обнаружена точка останова с действием прерывания;
вы прервали выполнение с помощью клавиш Ctrl+Break.
Команда Go to Cursor
Команда Go to Cursor (Перейти к курсору, F4) выполняет программу до той строки, где находится курсор (в текущем окне Module или области Code окна CPU).
Команда Trace Into
Команда Trace Into (Трассировка вглубь, F7) выполняет одну строку исходного кода или машинную инструкцию. Если текущая строка содержит вызов процедуры или функции, то отладчик выполняет трассировку этой процедуры. Однако если текущим окном является окно CPU, то выполняется одна машинная инструкция.
Команда Step Over
Команда Step Over (Шаг с пропуском, F8) выполняет одну строку исходного кода или машинную инструкцию, минуя трассировку вызываемой процедуры или функции. При этом обычно выполняется одна строка исходного текста программы. Однако если текущим окном является окно CPU, то выполняется только одна машинная инструкция.
Когда эта команда выполняется для одной машинной инструкции, Турбоотладчик интерпретирует некоторые инструкции, как одну, даже если они приводят к выполнению нескольких инструкций:
call – вызов подпрограммы;
int – вызов прерывания;
loop, loopz, loopnz – управление циклом;
rep, repnz или repz, за которыми следуют инструкции cmps, lods, movs, scas, stos.
Команда Instruction Trace
Команда Instruction Trace (Трассировка инструкций, Alt+F7) выполняет одну инструкцию. Ее можно использовать, когда вы хотите трассировать прерывание, или когда вы находитесь в окне Module и хотите выполнять трассировку процедуры или функции, которая находится в модуле без отладочной информации (например, в библиотечной подпрограмме).
Команда Program Reset
Команда Program Reset (Сброс программы, Ctrl+F2) перезагружает отлаживаемую вами программу с диска.
3. Пример выполнения работы
Дан массив из десяти слов, содержащих целые числа. Требуется найти максимальное значение.
Текст программы:
model SMALL
stack 100h
dataseg
MAX dw ?
MASS dw 10h,20h,30h,5h,40h,15h,20h,70h,35h,34h
codeseg
startupcode
lea BX, MASS ; Загрузить адрес массива
mov CX, 10 ; Установить счетчик
mov AX, [BX] ; Первый элемент массива в аккумулятор
BEG: cmp [BX], AX ; Сравнить текущий эл. массива с макс.
jle NO ; он меньше
mov AX, [BX] ; он больше
NO: add BX, 2 ; Следующий элемент массива
loop BEG ;
mov MAX, AX
QUIT: exitcode 0
end
Программа с помощью текстового редактора заносится в файл PRIMER.ASM. Затем выполняется трансляция и компоновка с помощью команд:
tasm primer /L /ZI
tlink primer /V
Запуск программы primer под отладчиком.
td primer.exe
Простейший пример использования отладчика: в окне Module или CPU установить курсор на строку с меткой QUIT и выполнить команду Go to Cursor. После останова посмотреть содержимое области данных.
Для того что бы просмотреть область данных, следует выполнить следующие действия:
открыть окно Dump или сделать активной одноименную панель окна CPU;
с помощью пункта GoTo локального меню окна (или панели) выполнить позиционирование по адресу DS:0. Перед позиционированием необходимо обеспечить правильное значение регистра DS, как правило, это означает выполнение первых двух строк программы по загрузке регистра DS адресом сегмента данных;
с помощью пункта DisplayAs локального меню окна (или панели) обеспечить просмотр данных в формате слов. Первое слово сегмента данных со смещением 0 – это переменная max, далее следует десять слов – числа массива, и далее – мусор.
Можно попробовать запустить программу в пошаговом режиме (команда Trace Into), следя за тем, как изменяются значения регистров AX, BX, CX.
Рекомендуется запустить программу заново (команда Program Reset), изменить данные (окно Dump, команда Change), предсказать результат для новых данных и, выполнив программу (команда Go to Cursor) до метки QUIT, сравнить ожидаемый результат с реальным.
Выход из отладчика в DOS – Alt+X.
