- •Машинное исполнение
- •1. Просмотр памяти.
- •2. Пример машинных кодов: непосредственные данные.
- •3. Пример машинных кодов: определение данных.
- •4. Пример машинных кодов: определение размера памяти.
- •5. Специальные средства отладчика.
- •6. Сохранение программы из отладчика.
- •Ассемблирование и выполнение программы
- •1. Ввод программы
- •2. Ассемблирование программы.
- •3. Компоновка программы.
- •4. Выполнение программы.
- •5. Ввод, ассемблирование, компоновка, выполнение и анализ листинга исходной программы.
- •Определение данных
- •1. Директивы определения данных.
- •2. Определение данных с числом повторений.
- •3. Директива определения байта (dв).
- •4. Директива определения слова (dw).
- •5. Директива определения двойного слова (dd).
- •6. Директива определения поля из четырех слов (dq).
- •7. Директива определения десяти байт (dt), директива equ.
- •Программы в com-файлах
- •1. Создание exe-файла.
- •2. Получение com-файла.
- •Логика и организация программы
- •1. Команда jmp.
- •2. Команда loop.
- •3. Сегмент стека.
- •4. Программа: расширение операции пересылки.
- •5. Программа: замена строчных букв на заглавные.
- •6. Команды сдвига и циклического сдвига.
- •7. Команды логических операций: and, or, xor, test, not.
- •Xor al,bl ;Логическое сравнение
- •Команды обработки строк
- •1. Rep: префикс повторения команды.
- •2. Программа: строковые операции.
- •3. Сканирование и замена.
- •4. Дублирование образца.
- •5. Программа: выравнивание справа при выводе на экран.
- •Арифметические операции 1: обработка двоичных данных
- •1. Сложение и вычитание.
- •2. Многословное сложение.
- •3. Умножение.
- •4. Повышение эффективности умножения.
- •5. Многословное умножение.
- •6. Сдвиг регистровой пары dx:ax.
- •7. Деление.
- •8. Деление вычитанием.
- •9. Преобразование знака.
- •Арифметические операции 2: обработка данных в форматах ascii и
- •1. Сложение в ascii-формате.
- •2. Вычитание в ascii-формате.
- •3. Умножение в ascii-формате.
- •4. Деление в ascii-формате.
- •5. Двоично-десятичный формат (bcd).
- •6. Преобразование ascii-формата в двоичный формат и наоборот.
- •Обработка таблиц
- •1. Прямой табличный доступ
- •2. Табличный поиск.
- •3. Табличный поиск с использованием сравнения строк.
- •4. Транслирующая команда xlat.
- •5. Программа: вывод шестнадцатиричных и ascii-кодов.
- •6. Программа: сортировка элементов таблицы.
- •Макрокоманды
- •If (условие)
- •If (условие)
- •1. Простое макроопределение.
- •2. Использование параметров в макрокомандах.
- •3. Комментарии в макрокомандах.
- •4. Использование макрокоманд внутри макроопределения.
- •5. Директива local.
- •6. Использование библиотек макроопределений.
- •7. Конкатенация (&).
- •8. Директивы повторения: rept, irp, irpc.
- •Inc ctr ;Увеличить счетчик
- •Inc dx ;Увеличить счетчик
- •Inc dx ;Увеличить счетчик
- •9. Макрокоманды, использующие директивы if и ifndef.
- •10. Макрокоманды, использующие директиву ifidn.
- •Связь между подпрограммами
- •1. Программа: использование директив extrn и public для меток.
- •2. Программа: использование директивы public в кодовом сегменте.
- •3. Программа: общие данные в подпрограмме.
- •4. Передача параметров.
Команды обработки строк
МЕТОДИЧЕСКИЕ УКАЗАНИЯ:
1. Для выполнения лабораторной работы вы должны войти в каталог группы из панели NORTON. Каждый студент должен иметь в каталоге группы свой личный каталог. Все программы должны создаваться и записываться в личном каталоге студента.
2. Для обработки строковых данных ассемблер имеет пять команд обработки строк:
MOVS переслать один байт или одно слово из одной области памяти в другую;
LODS загрузить из памяти один байт в регистр AL или одно слово в регистр АХ;
STOS записать содержимое регистра AL или АХ в память;
CMPS сравнить содержимое двух областей памяти размером в один байт или в одно слово;
SCAS сравнить содержимое регистра AL или АХ с содержимым памяти.
3. Префикс REP позволяет командам обработки строк обрабатывать строки любой длины.
4. Команды обработки строк могут записываться по 3 вариантам:
а) Запись команд с операндами:
MOVS DI,SI
LODS AL,SI или AX,SI
STOS DI,AL или DI,AX
CMPS SI,DI
SCAS DI,AL или DI,AX
б) Запись команд без операндов для обработки одного байта:
MOVSB
LODSB
STOSB
CMPSB
SCASB
в) Запись команд без операндов для обработки одного слова:
MOVSW
LODSW
STOSW
CMPSW
SCASW
5. Команды обработки строк предполагают, что регистры DI и SI содержат относительные адреса, указывающие на необходимые области памяти. Регистр SI обычно связан с регистром сегмента данных - DS:SI. Регистр DI всегда связан с регистром дополнительного сегмента - ES:DI.
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:
1. Rep: префикс повторения команды.
1.1. Запишите в текстовом редакторе NORTON следующую программу в СОМ-формате(rep.asm):
.286 TITLE REP (COM) CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG
ORG 100H ;Начало в конце PSP
BEGIN: JMP MAIN ;Обход через данные
;-------------------------------------------------------
STRING1 DB 20 DUP('*')
STRING2 DB 20 DUP(' ')
;--------------------------------------------------------
MAIN PROC NEAR
CLD ;Сброс флага DF
MOV CX,20 ;Счетчик на 20 байт
LEA DI,STRING2 ;Адрес "куда"
LEA SI,STRING1 ;Адрес "откуда"
REP MOVSB ;Переслать данные
RET ;Вернуться в DOS
MAIN ENDP
CODESG ENDS
END BEGIN
Префикс REP обеспечивает повторение команды несколько раз. Для использования префикса REP необходимо установить начальное значение в регистре СХ. При выполнении цепочечной команды с префиксом REP происходит уменьшение на 1 значения в регистре СХ до нуля. Таким образом, можно обрабатывать строки любой длины.
Команда CLD устанавливает флаг DF в 0. Это обеспечивает направление пересылки данных из ячейки в ячейку слева направо. Для обеспечения пересылки данных справа налево необходимо использовать команду STD, устанавливающую флаг DF в 1, а в регистры DI и SI записать адреса STRING2+20 и STRING1+19 соответственно.
В программе осуществляется пересылка 20 байт из области памяти STRING1 в область памяти STRING2.
1.2. Выполнить ассемблирование и компоновку программы. Листинг программы записать в отчет.
1.3. Вызвать отладчик DEBUG для выполнения программы. Просмотреть сегмент кодов командой отладчика D CS:100 и выполнить трассировку программы до команды RET. Повторить просмотр сегмента кодов командой D CS:100 , объяснить изменения произошедшие в сегменте кодов и записать выводы в отчет.