
- •Таганрог 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. Контрольные вопросы
- •БиблиографИя
- •Содержание
- •Заметки
- •Дроздов Сергей Николаевич Калачев Дмитрий Петрович
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 ; Сравнить текущий элемент массива с макс.
jl NO ; он меньше
mov AX, [BX] ; он больше
NO: add BX, 2 ; Следующий элемент массива
loop BEG ;
mov MAX, AX
;Конец работы
QUIT: exitcode 0
end
4. Варианты заданий
Дан массив из десяти целых знаковых чисел (слов или байтов). Требуется:
Найти количество отрицательных чисел. Массив байтов.
Найти суммы всех положительных и отрицательных чисел. Массив слов.
Найти среднее арифметическое чисел. Массив слов.
Найти количество чисел больших 10h. Массив слов.
Найти сумму абсолютных величин. Массив байтов.
Найти количество положительных чисел. Массив слов.
Поменять местами пары соседних чисел. Массив слов.
Переставить числа в обратном порядке. Массив байтов.
Заменить все отрицательные числа нулями. Массив слов.
5. Контрольные вопросы
Для чего нужен оператор ptr ?
В чем отличие команд mov AX, offset MASS и lea AX, MASS ?
В чем отличие команд mov AX, BX и mov AX, [BX] ?
В чем отличие команд mov AX, [BP] и mov AX, [BX] ?
В чем отличие команд mov AX, [BX+2] и mov AX, [BX]+2 ?
В чем отличие команд mov AX, [BX][SI] и mov AX, [SI][BX] ?
Для организации каких вычислений служат команды loop, loope, loopne ?
Модифицирует ли какие-нибудь регистры команда loop ?
Можно ли организовать цикл по счетчику, не используя loop команды?
Можно ли организовать цикл while с помощью одной из loop команд?
4
Лабораторная работа
Логические команды1. Цель работы
Цель настоящей работы – освоение логических команд.
2. Основные сведения
2.1. Логические команды
К логическим командам или точнее командам, оперирующим с отдельными битами, можно отнести команды, приведенные ниже, а также команды сдвигов.
МНЕМОКОД |
OSZAPC |
ДЕЙСТВИЕ |
and DST, SRC |
xxxxxx |
поразрядное И, DSTDST & SRC |
or DST, SRC |
xxxxxx |
поразрядное ИЛИ, DSTDST V SRC |
xor DST, SRC |
xxxxxx |
поразрядное ИСКЛЮЧАЮЩЕЕ ИЛИ, DSTDSTSRC |
test DST, SRC |
xxxxxx |
поразрядное И без запоминания результата |
not OPND |
xxxxx- |
поразрядная инверсия, OPND ~OPND |
2.2. Примеры использования логических команд
Установить 3 и 0 биты в регистре AL, остальные биты не изменять
or AL, 00001001b .
Сбросить 4 и 6 биты в регистре AL, остальные биты не изменять
and AL, 10101111b .
Проинвертировать 4 и 2 биты в регистре AL, остальные биты не изменять
xor AL, 00010100b .
Перейти на метку LAB, если установлен 4 бит регистра AL, в противном случае продолжить выполнение программы
test AL, 00010000b jnz LAB; продолжаем ... LAB:
Посчитать число единиц в байте – регистре AL
mov CX, 8 xor BX, BX LL: shl AL, 1 jnc NO inc BX NO: loop LL