
- •Машинное исполнение
- •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. Передача параметров.
5. Программа: замена строчных букв на заглавные.
5.1. Заглавные буквы от А до Z имеют коды от 41Н до 5АН, а строчные буквы от а до z имеют коды от 61Н до 7АН. Единственная разница в том, что пятый бит равен 0 для заглавных букв и 1 для строчных:
Биты: 7 6 5 4 3 2 1 0 Биты: 7 6 5 4 3 2 1 0
Буква А: 0 1 0 0 0 0 0 1 Буква а: 0 1 1 0 0 0 0 1
Буква Z: 0 1 0 1 1 0 1 0 Буква z: 0 1 1 1 1 0 1 0
Запишите в текстовом редакторе NORTON следующую программу в COM-формате:
.286
TITLE CASE (COM) Перекодировка в заглавные буквы
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
ORG 100H
BEGIN: JMP MAIN
;----------------------------------------------------------
TITLEX DB 'Change to uppercase letters'
;----------------------------------------------------------
MAIN PROC NEAR
LEA BX,TITLEX+1 ;Адрес первого символа
MOV CX,31 ;Число символов
B20: MOV AH,[BX] ;Символ из TITLEX
CMP AH,61H ;Это
JB B30 ;прописная
CMP AH,7AH ;буква
JA B30 ;?
AND AH,11011111B;Да - преобразовать
MOV [BX],AH ;Записать в TITLEX
B30: INC BX ;Следующий символ
LOOP B20 ;Повторить цикл 31 раз
RET
MAIN ENDP
CODESG ENDS
END BEGIN
Эта программа преобразует данные в поле TITLEX из строчных букв в прописные начиная с адреса TITLEX+1. Программа инициализирует регистр ВХ адресом TITLEX+1 и использует его для пересылки символов в регистр АН начиная с TITLEX+1.
Команда CMP сравнивает код символа в регистре АН с числом 61Н.
Команда JB обеспечивает переход на метку В30, если в результате сравнения АН < 61Н.
Команда JA обеспечивает переход на метку В30, если в результате сравнения АН > 7АН.
Если 61Н < AH < 7AH, то будет выполняться команда AND. Команда AND умножает соответствующие биты числа в АН и числа 11011111 (логическое умножение). В результате умножения все биты числа в АН, кроме пятого, останутся без изменений. Пятый бит установится в 0, что соответствует коду заглавной буквы. Измененные символы засылаются обратно в область TITLEX, значение в регистре ВХ увеличивается для очередного символа и осуществляется переход на следующий цикл.
Используемый таким образом регистр ВХ действует как индексный регистр для адресации в памяти.
5.2. Выполните ассемблирование и компоновку программы case.asm. Запишите листинг программы в отчет. Вызовите отладчик DEBUG для пошагового выполнения программы.
5.3. Выполните первую команду JMP. Просмотрите сегмент кодов, введя команду D CS:100. Определите в каких параграфах находятся коды символов символьной константы TITLEX. Выводы запишите в отчет.
5.4. Выполните в пошаговом режиме 10 - 15 циклов работы программы. Количество циклов контролируйте по регистру СХ. Просмотрите сегмент кодов. Выводы запишите в отчет.
5.5. Выполните трассировку программы до конца, до команды RET. Просмотрите сегмент данных. Выводы запишите в отчет.
5.6. Введите команду Q для выхода из отладчика.