|
Регистр командного указателяРегистры EIP/IP содержат смещение команды, которая должна быть выполнена. EIP IP
Регистр флагов Флаговые регистры (EFLAGS/FLAGS) определяют текущее состояние машины и содержат результаты выполнения некоторых команд (многие арифметические команды и команды сравнения изменяют состояние флагов). Флаг Назначение o (переполнение) ситуация переполнения возникает, когда результат умножения или деления не помещается в приемнике d (направление) указывает на левое или правое направление при операциях со строками i (прерывание) указывает на возможность внешних прерываний t (пошаговый режим) переводит процессор в пошаговый режим выполнения команд s (знак) содержит знак результата последней арифметической операции (0 - плюс, 1- минус) z (ноль) содержит 1, если результат последней арифметической операции 0, и 0 – в противном случае a (внешний перенос) содержит результат переноса из 3-го бита в байте при операциях с целыми числами в BCD-формате c (перенос) содержит результат переноса из старшего бита после арифметических операций p (четность) содержит 1, если в младших 8-ми битах 16-ти разрядных регистров четное количество единиц, и 0 - в противном случае Структура программы на языке ассемблера Структура программы на языке ассемблера сильно зависит от используемого компилятора и целевой операционной системы. В данном лабораторном практикуме используется пакет OpenWatcom, использующий синтаксис Intel и предназначенный для ОС DOS, Windows и OS/2. Типичная программа на языке ассемблера (не только для DOS) содержит описание сегментов (секций) кода, данных и стека. DOS-программа exe-формата может иметь следующую структуру: ;-------------------------------------------------- ; Сегмент кода: ;-------------------------------------------------- CodeSg segment 'CODE' ; Подсказываем ассемблеру какие сегментные регистры ; указывают на какой сегмент: Assume CS:CodeSg, DS:DataSg, SS:StackSg ; Точка входа в программу (указывается в завершающем ; программу операторе end): begin: ; Собственно код: ; инициализируем DS: Mov AX, DataSg Mov DS, AX ; Ваш код ; нормальное завершение DOS-программы Mov AX, 4C00h Int 21h CodeSg ends ;-------------------------------------------- ; Сегмент данных: ;-------------------------------------------- DataSg segment 'DATA' ; Ваши данные DataSg ends ;-------------------------------------------- ; Сегмент стека: ;-------------------------------------------- StackSg segment stack 'STACK' ; резервируем под стек 256 байт, ; заполненых нулями: Db 256 dup(0) StackSg ends ;------------------------------------ End begin
Режимы адресации В зависимости от того откуда и куда передаются данные и каким способом, различаются несколько режимов адресации: • регистровая; • непосредственная; • прямая; • косвенная; •по базе со смещением; •по базе с индексированием; •стековая. Регистровая адресация Этот вид адресации предполагает передачу данных из одного регистра в другой. Пример 1 (регистровая адресация) Mov AX, BX; копируются данные из BX в AX Mov DS, AX; сегментный регистр DS инициализируется числом из AX Xchg AL, AH; обмен значений регистров AL и AH Непосредственная адресация При этом виде адресации происходит загрузка в регистр константы непосредственно записанной в команде. Пример 2 (непосредственная адресация) ; счетчик проинициализировать числом 10: Mov CX, 10 ; нельзя инициализировать сегментный регистр непосредственным значением: mov DS, 0000h; недопустимо! ; можно сделать так: Mov AX, 0000h Mov DS, AX ; загрузка адресов в индексные регистры: Lea SI, X Lea DI, Y Прямая адресация Здесь предполагается передача данных из ячейки памяти в другую ячейку памяти, или из ячейки памяти в регистр, или из регистра в ячейку памяти. Пример 3 (прямая адресация) ; скопировать в BX слово по адресу 0000:0000h: Mov AX, 0000h Mov ES, AX Mov BX, ES:0000h ; если в сегменте, на который указывает DS, есть переменная с именем X и ; размера слово, то значение хранящееся в DX можно скопировать в X так: Mov X, DX Косвенная адресация Этот вид адресации предполагает использование базового регистра BX, используемого в качестве указателя. Пример 4 (косвенная адресация) ; пусть в сегменте, на который указывает DS, первым объявлено слово X, ; а следом за ним - слово Y; тогда их значения можно скопировать так: Mov BX, 0000h mov AX, [BX] Mov BX, 0002h mov CX, [BX] Адресация по базе со смещением Этот вид адресации представляет из себя разновидность косвенной адресации. Пример 5 (адресация по базе со смещением) ; следующие команды из примера 4 можно заменить на одну: ; mov BX, 0002h ; mov CX, [BX] mov CX, [BX]+2 Адресация по базе с индексированием Этот вид адресации представляет из себя разновидность косвенной адресации и предполагает использование индексных регистров SI и DI. Пример 6 (адресация по базе с индексированием) ; пусть объявлен массив слов X; тогда получить значения ; первого, третьего и пятого элемента можно так: Mov BX, offset X Mov SI, 0000h mov AX, [BX][SI]; 1 Add SI, 4 mov AX, [BX][SI]; 3 Add SI, 4 mov AX, [BX][SI]; 5 Стековая адресация Стековая адресация предназначена для передачи данных из стека и в стек. Для этого предназначены команды push и pop, адресующие ячейки памяти посредством регистра SP, и команды mov, использующие регистр BP. Пример 7: Временное хранение данных Push eax; сохраняем текущее значение eax в стеке Выполняем какие нибудь действия, Использующие eax Pop eax; восстанавливаем прежнее значение eax Пример 8: Копирование содержимого одного сегментного регистра в другой Push ds Pop es Задание В соответствии с представленной программы в лабораторной работы произвести следующие режимы адресации: - регистровую; - непосредственную; - прямую; - косвенную; - адресацию по базе со смещением; - адресацию по базе с индексированием. 5 Контрольные вопросы 1. Регистры процессоров семейства x86. 2. Структура регистра флагов. 3. Сегментная организацию памяти реального режима процессоров семейства x86. 4. Форматы и алгоритмы работы следующих команд: mov, lea, lds, les, lfs, lgs, lss; xchg. 5. Форматы и алгоритмы работы команд работы с флагами: lahf, sahf, clc/stc, cld/std, cmc, cli/sti. 6. Режимы адресации, применяемые в процессорах семейства x86. 7.Режим регистровой адресации. 8.Режим непосредственной адресации. 9.Режим прямой адресации. 10.Режим косвенной адресации. 11.Режим адресации по базе со сдвигом. 12.Режим адресации по базе с индексированием. 13.Общее понятие стека. 14.Особенности реализации стека в семействе микропроцессоров x86. 15.Форматы, предназначение и алгоритмы работы команд стека: push, pop, pusha/pushad, popa, popad.
Лабораторная работа №3 Структура программы на языке ассемблера. Сегментная Организация памяти. Цель работы Основные характеристики, области применения ЭВМ различных классов. Изучение устройства компьютера: Сегментация памяти Базовые знания, необходимые для выполнения данной работы • Двоичная система счисления. • Шестнадцатиричный код. • Понятие регистра, его виды и предназначение. • Типичная структура и схема микропроцессора.
Программы, использующие 32-х разрядные регистры должны начинаться с одной из директив .386, .486, .586 или .686. Кроме того, в операторе segment словом use16 должен указываться 16-ти разрядный режим адресации для правильной работы программы в среде DOS. Что вызывает тренды на фондовых и товарных рынках Объяснение теории грузового поезда Первые 17 лет моих рыночных исследований сводились к попыткам вычислить, когда этот... ЧТО ПРОИСХОДИТ, КОГДА МЫ ССОРИМСЯ Не понимая различий, существующих между мужчинами и женщинами, очень легко довести дело до ссоры... ЧТО ТАКОЕ УВЕРЕННОЕ ПОВЕДЕНИЕ В МЕЖЛИЧНОСТНЫХ ОТНОШЕНИЯХ? Исторически существует три основных модели различий, существующих между... ЧТО И КАК ПИСАЛИ О МОДЕ В ЖУРНАЛАХ НАЧАЛА XX ВЕКА Первый номер журнала «Аполлон» за 1909 г. начинался, по сути, с программного заявления редакции журнала... Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:
|