Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Команда LEA





Формат команды: LEA П,И

где П – приемник информации. В качестве приемника может использоваться только 16-ти или 32-ух разрядные РОН. (В операционной системе Windows необходимо использовать 32-ух разрядные РОН);

И – источник информации. В качестве источника информации могут использоваться 16-ти или 32-ух разрядные ячейки памяти.

Команда LEA вычисляет адрес операнда-источника и помещает его в приемник. Вычисление производиться самим процессором во время выполнения программы.

Пример:

1 var

2 Data: Array[1..100] of Byte;

3 begin

4 asm

5 PUSHAD

6 LEA EBX,Data

7 LEA ECX,Data+5

8 MOV Byte Ptr [EBX],$55

9 MOV Word Ptr [ECX],$1234

10 POPAD

11 end;

12 end;

Программа демонстрирует пример совмещения кода на языке высокого уровня и ассемблера. Первые две строчки программы описывают переменную Data типа массив на сто байтовых элементов. Третья строка начинает тело программы, а двенадцатая закрывает. Четвертая строка открывает ассемблерную вставку, а одиннадцатая закрывает. Для нормального функционирования программы, которую сформирует компилятор, необходимо запомнить значения всех регистров перед началом выполнения ассемблерной вставки (строка 5), а по ее завершении восстановить (строка 10). Дело в том, что компилятор строго контролирует содержимое регистров, используя их для выполнения программы. Ассемблерная вставка – это код, сразу предназначенный для процессора, и, что в нем будет запрограммировано, компилятор предугадать не может, и, соответственно, не может освободить нужные регистры. Ассемблерная же вставка может изменить значения регистров, а значит, дальнейшее нормальное выполнение программы может быть нарушено. Для этого значения регистров временно сохраняют в стеке, а потом восстанавливают. Шестая строка вычисляет адрес первого байта массива Data и сохраняет его в регистре EBX. Дело в том, что операционная система Windows может загрузить программу по любому адресу общей памяти. Все будет зависеть от уже загруженных программ, динамических библиотек, состояния системы и т.д. Чтобы использовать массив Data, если неизвестно, по какому адресу загружена программа и где выделено место для массива Data, нужно в программе вычислить его адрес, для чего и применяется команда LEA. Седьмая строка вычисляет адрес 6-ого байта массива Data (у первого байта адрес метки Data, у второго Data+1, у третьего Data+2, и т.д.) и сохраняет его в регистре ECX. Смысл 8-ой и 9-ой строк понятен (см. команду MOV). В результате выполнения программы получим:

Data[1] = 5516 (8510);

Data[6] = 3416 (5210);

Data[7] = 1216 (1810);

 

Примерные контрольные вопросы и задачи

 

1. Чему будут равны регистры CH, CL, CX после выполнения команды
MOV ECX,876543210?

2. Чему будут равны регистры AX, BX и EDX после выполнения следующего фрагмента программы:

MOV CL,$127

MOV CH,$128

MOVSX AX,CH

MOVZX BX,CL

MOVSX EDX,BX?

 

3. Чему будет равен регистр EDX после выполнения следующего фрагмента программы:

LEA EBX,Data

MOV ECX,$78FA564D

MOV EDX,$12E90BC3

MOV [EBX+3],EDX

MOV [EBX+5],ECX

MOV Word Ptr [EBX+2],$B3

MOV EDX,[EBX+3]?

4. Что такое дамп памяти?

5. Что такое стек?

6. Назовите все восьмиразрядные РОН?

7. Назовите все шестнадцатиразрядные РОН?

8. Назовите все тридцатидвухразрядные РОН?

9. Чему будут равны регистры BL, BX, BH после выполнения следующего фрагмента программы:
MOV EBX,1988776655

BSWAP EBX?

10. Что означает префикс DWord Ptr и где он используется?

11. Чему будут равны регистры BX и CX после выполнения следующего фрагмента программы:

MOV EAX,$12345678

PUSH EAX

POP BX

POP CX?

 

12. Чему равен старший бит числа 200, если его хранить в памяти как слово (Word)?

 

 








Date: 2015-10-19; view: 577; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию