Архитектура ЭВМ Практика 2. Основы ассемблера.
Информация по Ассемблеру Питер Абель. Язык Ассемблера для IBM PC и программирования. М. «Высшая школа», Юров В.И. Assembler. Сн.П. «Питер», Зубков С.В. Assembler для DOS, Windows и UNIX. М. «Питер», Компьютерные учебники, справочники и методические разработки (например, Лекции.
Ассемблер На аппаратном уровне компьютер «понимает» только язык машинных команд (двоичный код). Язык ассемблера это символическое представление машинного языка. КомандаЗапись в машинных кодах Запись на языке ассемблера Загрузить в регистр AH число 4Ch. B44CMOV AH,4C Умножить число, находящееся в регистре AX на число по адресу [010A] и сохранить результат в AX. F72E0A01IMUL W/[010A] Вычесть из числа, хранящегося в AX число, хранящееся в BX и сохранить результат в AX 2BC3SUB AX,BX
Регистры процессора Регистр – это элемент памяти микропроцессора для временного хранения данных. Каждый регистр процессора имеет своё обозначение и функциональное назначение. Существует 16 пользовательских регистров.
Регистры процессора Регистры общего назначения (РОН): Регистры сегментов: Регистры состояния и управления:
Пользовательские регистры AX (AH/AL) (Accumulator register) аккумулятор. Применяется для хранения промежуточных данных. Например, команды умножения, деления и сдвига предполагают использование регистра AX. BX (BH/BL ) (Base register) базовый регистр. Применяется для хранения базового адреса некоторого объекта в памяти. Может использоваться в качестве "индекса" для расширенной адресации. CX (CH/CL) (Count register) регистр-счетчик. Применяется в командах, производящих некоторые повторяющиеся действия. Его использование зачастую неявно и скрыто в алгоритме работы соответствующей команды. К примеру, команда организации цикла loop кроме передачи управления команде, находящейся по некоторому адресу, анализирует и уменьшает на единицу значение регистра CX; DX (DH/DL) (Data register) регистр данных. Так же, как и регистр AX, он хранит промежуточные данные. В некоторых командах его использование обязательно; для некоторых команд это происходит неявно.
Регистры сегментов Отвечают за хранение базового адреса сегментов данных, кода, стека и дополнительных данных. CS (code segment) содержит адрес сегмента с машинными командами, к которому имеет доступ микропроцессор (то есть эти команды загружаются в конвейер микропроцессора). DS (data segment) хранит адрес сегмента данных текущей программы. SS (stack segment) - содержит адрес сегмента стека. Работа со стеком организуется по принципу: последний записанный в эту область элемент выбирается первым. ES, GS, FS - дополнительный сегмент данных
Регистр флагов
Регистр указателя команды Регистр IP (Instraction Pointer) содержит смещение следующей подлежащей выполнению команды относительно содержимого регистра кода CS в текущем сегменте команд.
Организация доступа к памяти Используется «Сегментированная модель» доступа к памяти. Адрес начала сегмента хранится в соответствующем регистре. Внутри сегмента программа обращается к адресам относительно начала сегмента линейно, т.е. начиная с 0 и заканчивая адресом, равным размеру сегмента. Этот относительный адрес, или смещение, который микропроцессор использует для доступа к данным внутри сегмента, называется эффективным.
Организация доступа к памяти (2) Диапазон изменения физического адреса в реальном режиме от 0 до 1 Мбайт. Максимальный размер сегмента 64 Кбайт. Это объясняется 16-разрядной архитектурой регистров. Максимальное значение, которое может содержать 16-ти разрядный регистр равно: 2 (16-1) = = 64 Кбайт
Организация доступа к памяти (3) В сегментном регистре содержаться только старшие 16 бит физического адреса начала сегмента. Недостающие младшие 4 бита 20-битного адреса получаются сдвигом в сегментном регистре влево на 4 разряда.
Организация доступа к памяти (4) Память FFFFF Сегменты Адрес Сегментный регистр
Пример формирования физического адреса Пусть содержимое сегментного регистра равно: 1А62h После сдвига влево на 4 разряда получим: 1А620h Смещение пусть равно: 01B5h К физическому адресу начала сегмента прибавляется смещение: 1А620h + 01B5h A7D5
Разработка программ на ассемблере Исходный текст программы (*.asm) Объектный модуль (*.obj) Исполняемый модуль (*.exe) Текстовый редактор Транслятор (TASM.EXE) Транслятор (TASM.EXE) Компоновщик (ALINK.EXE) Компоновщик (ALINK.EXE) Отладчик (AFDPRO.EXE) Отладчик (AFDPRO.EXE)
Запуск транслятора, компоновщика, отладчика Трансляция - процесс формирования объектного модуля из текстового файла *.asm. Трансляция выполняется следующей командой (например): C:\TASM\tasm.exe myfile.asm Компоновка - процесс формирования загрузочного модуля из нескольких объектных модулей. Компоновка выполняется следующей командой (например): C:\TASM\alink.exe myfile.obj Отладка - процесс выполнения разработанной программы с целью проверки её работы. Отладка выполняется следующей командой (например): C:\TASM\afdpro.exe myfile.exe
Отладчик AFD PRO Выход из отладчика – выполнить команду quit, написав ее в строке CMD
Пример программы на языке ассемблера
Практическое задание Написать исходный текст программы «Перевод в систему счисления». Скомпилировать и запустить программу в отладчике. Проверить правильность работы программы при переводе в системы счисления с основанием 2, 8, 10. Модифицировать текст программы так, чтобы проверить, правильно ли производится перевод в систему счисления c основанием 16. Объяснить полученный результат.
Работа 1.Ввести текст программы. 2.Скомпилировать программу посредством TASM.EXE и ALINK.EXE, запустить программу в отладчике AFD PRO и пошагово выполнить программу. Сделать скриншот работы программы в отладчике перед началом вывода результата на экран. 3.Сформировать тестовые примеры для перевода чисел из системы счисления 16 в системы счисления 2, 8, 10. Вручную выполнить перевод. Сравнить результаты с работой приложения. 4.Сформировать тестовые примеры для перевода чисел в систему счисления с основанием 16. Вручную выполнить перевод. Сравнить результаты с работой приложения. Объяснить результат.
Отчет должен содеpжать: 1.Текст приложения. 2.Алгоритм работы приложения (т.е. смысл действий, описанных программой). 3.Скриншот выполнения приложения в отладчике AFD PRO. 4.Тестовые примеры перевода чисел из одной системы счисления в другую. 5.Описание модификации текста приложения, обеспечивающие реализацию тестов. 6.Результаты работы тестового приложения на примерах.