Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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 после выполнения команды 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 после выполнения следующего фрагмента программы: 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; Нарушение авторских прав |