- •Таганрог 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. Контрольные вопросы
- •БиблиографИя
- •Содержание
- •Заметки
- •Дроздов Сергей Николаевич Калачев Дмитрий Петрович
Int 21h ; строки
Inc si ;Счетчик очередной цифры
cmp SI, 10
jl OO
;Запрос на продолжение работы
lea DX, AskCont
mov AH, 09h
int 21h
mov AH, 08h
int 21h
cmp AL, 27
je QUIT
jmp BEGIN
;Конец работы
QUIT: exitcode 0
end
4. Варианты заданий
Ввести с клавиатуры строку. Сжать строку, т.е. удалить пробелы и табуляции. Вывести результаты на экран.
Ввести с клавиатуры строку. Преобразовать все малые буквы в большие. Вывести результаты на экран.
Ввести с клавиатуры строку. Посчитать количество слов в строке. Подумать, что является разделителем слов. Вывести результаты на экран.
Ввести с клавиатуры строку. Ввести с клавиатуры коротенькую строку – шаблон. Найти шаблон во введенной строке. Вывести на экран "ДА", если шаблон есть, и "НЕТ", если его нет.
Ввести с клавиатуры две строки. Сравнить их. Вывести на экран номер позиции, в которой строки различаются.
Ввести с клавиатуры строку. Если она длиннее некоторой величины, то обрезать, если короче – растянуть, вставив нужное число пробелов между словами. Вывести результаты на экран.
Ввести с клавиатуры строку, состоящую из нескольких слов. Вывести каждое слово на экран в отдельной строке, т.е. выдать слова в столбик.
Ввести с клавиатуры строку. Переставить в ней символы, поменяв местами первый с последним, второй с предпоследним и т.д. Вывести результаты на экран.
5. Контрольные вопросы
Что такое программное прерывание?
Какие возможности работы с клавиатурой имеются у программиста?
Чем отличаются друг от друга различные функции DOS, выполняющие ввод с клавиатуры?
Что такое расширенный код клавиатуры?
Можно ли выдать на экран текст «$1.00 = 25.00 rub.», используя функцию DOS 09h?
Какие режимы адресации удобно использовать при работе с одномерными массивами ?
Что означают выражения в поле операндов в строках примера: lea BX, INSTR+2 mov OUTSTR+3, AL ?
Как выделить младшую тетраду байта ?
Как выделить старшую тетраду байта ?
В чем отличие команд lea BX, STR mov BX, offset STR ?
6
Лабораторная работа
Десятичная арифметика
1. ЦЕЛЬ РАБОТЫ
Цель настоящей работы – знакомство с форматами представления десятичных чисел, упакованным и неупакованным BCD-форматами, освоение команд десятичной коррекции.
2. ОСНОВНЫЕ СВЕДЕНИЯ
2.1. Форматы представления десятичных чисел
Упакованные BCD-числа хранятся по две цифры в байте в виде четырехбитовых групп, называемых тетрадами, причем каждая тетрада представляет собой двоичную комбинацию, соответствующую одной десятичной цифре, т.е. двоичное число в диапазоне 0000b – 1001b.
Неупакованное BCD-число содержит одну десятичную цифру в младшей тетраде байта, старшая тетрада должна быть нулевой, однако для команд сложения и вычитания содержимое старшей тетрады несущественно.
2.2. Команды десятичной коррекции упакованных чисел
Для упакованных десятичных чисел допустимы только операции сложения и вычитания. Каждая операция выполняется в два этапа.
На первом выполняется операция – сложение или вычитание (add, adc, sub, sbb) двух упакованных десятичных чисел, первое из которых должно находиться в регистре AL, на втором – десятичная коррекция результата в регистре AL (daa, das).
Рассмотрим подробнее одну из команд коррекции – daa, коррекция после сложения BCD-чисел.
После первого этапа – двоичного сложения правильных BCD-чисел возможно появление неправильного BCD-результата в двух ситуациях:
получена недопустимая тетрада, т.е. тетрада, двоичный эквивалент которой больше 9;
получена допустимая тетрада, но при сложении из нее возник двоичный перенос с весом 16, в то время как правильный вес единицы переноса должен быть равен 10.
Отметим, что перенос из младшей тетрады фиксируется флагом AF , а из старшей – CF.
Алгоритм выполнения команды daa состоит из двух шагов:
если AF=1 или младшая тетрада регистра AL содержит запрещенную комбинацию, к содержимому AL прибавляется 06 и флаг AF устанавливается в 1;
если CF=1 или старшая тетрада регистра AL содержит запрещенную комбинацию, к содержимому AL прибавляется 60h и флаг CF устанавливается в 1.
Например. Содержимое регистров AL=65h и BL=28h , что соответствует десятичным числам 65 и 28. Выполним их сложение
add AL, BL ; AL=8Dh, AF=0, CF=0, ZF=0 daa ; AL=93h, AF=0, CF=0, ZF=0
и вычитание
sub AL, BL ; AL=3Dh, AF=1, CF=0, ZF=0
das ; AL=37h, AF=1, CF=0, ZF=0
в комментариях показаны значения регистра AL и флагов после выполнения соответствующей команды.
