- •Таганрог 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. Контрольные вопросы
- •БиблиографИя
- •Содержание
- •Заметки
- •Дроздов Сергей Николаевич Калачев Дмитрий Петрович
3. Пример выполнения работы
Дан массив из 10 байтов. Все байты имеют нулевые старшие биты. Необходимо каждый байт, содержащий 1 в 0-м бите, дополнить до четного числа единиц установкой 7-го бита байта, каждый байт, содержащий 0 в 0-м бите, дополнить до нечетного числа единиц установкой 7-го бита байта.
Текст программы:
model SMALL
stack 100h
dataseg
MB db 04h,07h,11h,23h,04h,38h,3Fh,2Ah,0Dh,34h
codeseg
startupcode
lea BX, MB ; BX - текущий адрес массиваMB
mov CX, 10 ; CX - счетчик числа итераций
BEG:
mov AL, [BX] ; считать очередной байт массива
test AL, 00000001b; установлен-ли бит0 ?
jz BIT0CLR ; нет, бит 0 сброшен
; бит 0 установлен
test AL, 0FFh ; четное число единиц?
jp OK ; да, больше ничего делать не надо
or AL, 80h ; нечетное, дополнить до четного
jmp short OK
BIT0CLR: ; бит 0 сброшен
test AL, 0FFh ; четное число единиц?
jnp OK ; нет, больше ничего делать не нужно
or AL, 80h ; четное, дополнить до нечетного
OK:
mov [BX], AL ; записать измененный байт массива
inc BX ; BX<-адрес очередн. элемента массива
loop BEG
;Конец работы
QUIT: exitcode 0
end
4. Варианты заданий
Дан массив из 10 байтов. Посчитать количество байтов, в которых сброшены 6 и 4 биты.
Дан массив из 8 байтов. Рассматривая его как массив из 64 бит, посчитать количество единиц.
Дан массив из 8 байтов. Рассматривая его как массив из 64 бит, посчитать длину самой длинной последовательности единиц.
Дан массив из 8 байтов. Рассматривая его как массив логических значений x0 x1 x2 x3 x4 x5 x6 x7 (true – есть ненулевые биты в байте, false – все биты нулевые), вычислить логическую формулу f = (x7&~x6&x3&x1) V (x6&x4&x2&x1&~x0) V (~x7&x6&x3&x1) .
Дан массив из 5 байтов. Рассматривая его как массив из 10 тетрад, найти «исключающее или» всех 10 тетрад.
Дан массив из 10 байтов. Посчитать количество байтов, в которых сброшены 5 или 1 биты.
Рассматривая байт как набор логических значений x7 x6 x5 x4 x3 x2 x1 x0 (true – 1, false – 0), вычислить логическую формулу f = (x7&~x6&x3&x1) V (x6&x4&x2&x1&~x0) V (~x7&x6&x3&x1) .
Дан массив из 10 байтов. Посчитать количество байтов, в которых установлены 3 и 7 биты.
5. Контрольные вопросы
В чем отличие команд test DST, SRC и and DST, SRC ?
Как сбросить 5-й бит переменной – байта ВВ ?
Как установить 5-й бит переменной – байта ВВ ?
Как проинвертировать 5-й бит переменной – байта ВВ ?
Как проверить, установлен ли 5-й бит переменной – байта ВВ ?
Как проверить, четным или нечетным является количество установленных бит в переменной-байте ВВ ?
Какие флаги условий модифицируются после выполнения команд and, or, xor ?
В чем основное отличие команд логических и арифметических сдвигов ?
Укажите максимальное число двоичных разрядов, на которое можно сдвинуть операнд с помощью одной команды сдвига ?
В паре строк mov CL, 8 "сдвиг" BL, CL какие команды можно подставить вместо "сдвиг", чтобы содержимое BL не изменилось ?
В паре строк "сдвиг влево" BL, 1 "сдвиг вправо" BL, 1 какие команды можно подставить вместо "сдвиг влево" и "сдвиг вправо", чтобы содержимое BL не изменилось ?
