- •Таганрог 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. Соглашения о связях
- •Преобразование имен
- •Передача и возврат управления и данных
- •Сохранение регистров
- •Трансляция и компоновка
- •Преобразование данных
- •Трансляция и компоновка
- •3. Пример выполнения работы
- •3.1. Интерфейс Pascal
- •Inc si ;указатель на входную строку
- •Inc cx ;нет, увеличиваем счетчик символов
- •Inc dx ;да, увеличиваем счетчик строк
- •Inc dx ;нет, будем увеличивать счетчик строк
- •4. Варианты заданий
- •5. Контрольные вопросы
- •БиблиографИя
- •Содержание
- •Заметки
- •Дроздов Сергей Николаевич Калачев Дмитрий Петрович
Преобразование имен
Под термином «преобразование имен» понимаются правила формирования имен транслятором при создании объектного модуля. Необходимо учитывать, по меньшей мере, следующие моменты:
допустимое количество символов в имени в программе на ЯП и в ОМ;
различаются ли прописные и строчные буквы в программе на ЯП и в ОМ;
не добавляет ли что-нибудь транслятор от себя к именам в ОМ.
Длина внешнего имени (т.е. имени «видимого» компоновщиком) зависит от конкретной СП, как правило, это 32 символа.
В языке C в именах различаются прописные и строчные буквы, в языке Pascal, напротив, не различаются. Как правило, трансляторы с этих языков поступают соответствующим образом при формировании имен в ОМ. В частности, Pascal-трансляторы преобразуют строчные буквы в прописные.
С-трансляторы, как правило, включают символ подчеркивания в начало каждого имени в ОМ.
Передача и возврат управления и данных
При рассмотрении передачи и возврата управления и данных необходимо учитывать следующие моменты:
тип команд вызова и возврата;
способы передачи параметров – по ссылке, по значению, для передачи по ссылке – тип адресации, передача сложных типов данных – массивов и структур;
доступ к данным в подпрограмме;
при передаче параметров через стек, в каком порядке помещать параметры в стек и какая из программ ответственна за очистку стека;
как располагаются многомерные массивы в памяти;
выполняется ли выравнивание полей структур на границу слова, двойного слова и т.п.;
СП могут осуществлять обязательное преобразование данных некоторых типов при использовании их в качестве фактических параметров;
как представляются сложные типы данных: структуры, записи и объекты (C++), записи, записи с вариантами, множества (Pascal).
Сохранение регистров
В СП для языков Pascal и C фирм MicroSoft и Borland для компьютеров типа IBM PC подпрограммы обязаны сохранять содержимое регистров CS, DS, SS, SP, BP. В других СП требования могут отличаться.
2.4. Соглашение о связях языка Pascal (сводка)
Преобразование имен
Значащая длина идентификатора может быть от 8 до 250 символов, умолчание – 32. Для изменения служит команда Options+Compiler+Source.
Строчные буквы преобразуются в прописные.
Передача и возврат управления
Тип подпрограмм (near или far) и, следовательно, команд call и ret зависит от двух факторов:
обращение к внешним подпрограммам всегда осуществляется как к far подпрограммам;
если включен режим Force Far Calls (команда Options+Compiler), то и подпрограммы внутри единицы трансляции рассматриваются как far, в противном случае такие подпрограммы рассматриваются как near.
Передача и возврат данных
Параметры передаются в стеке. Помещаются в стек в порядке, соответствующем порядку записи в тексте подпрограммы, т.е. последний в тексте будет на самом верху стека.
По умолчанию параметры передаются по значению, при наличии модификатора var – по ссылке, при этом размер указателя – far.
Скалярные и структурные данные, помещающиеся в байт, возвращаются в AL, помещающиеся в слово – в AX, помещающиеся в двойное слово – в паре DX:AX. Табл. 4 поясняет соответствие типов возвращаемых данных языка Pascal и регистров процессора.
Таблица 4
Тип функции |
Регистр(ы) |
Boolean, Char, ShortInt, Byte |
AL |
Integer, Word |
AX |
LongInt |
DX – старшее слово, AX – младшее |
Pointer |
DX – сегмент, AX – смещение |
String |
|
Многомерные массивы располагаются в памяти таким образом, что быстрее изменяется последний индекс.
При передаче по значению массива, записи или строки компилятор формирует код, который обеспечивает передачу через стек far-адреса, выделение необходимой памяти в подпрограмме и копирование туда параметра.