ЛЕК+2=.ppt
- Количество слайдов: 24
Семейство микропроцессоров i. APx 86 Модель Данные/Адрес Примечание i 8086 16/20 4 МГц, 1 Мб i 8088 8/20 Модификация i 8086 i 80186 16/20 Новые команды i 80286 16/24 Защищенный режим i 80386 32/32 Режим виртуального 8086 i 80486 32/32 Внутренний сопроцессор Pentium 64/32 Повышена производительность … 1
Архитектура МП i 80386 и выше 1. Регистры общего назначения: 2. Сегментные регистры: AH AL EAX CS BH BL EBX SS CH CL ECX DS DH DL EDX ES SI ESI FS DI EDI GS BP EBP SP ESP 3. Регистр указатель команд: IP EIP 4. Слово состояния программы: Фл. р-р PSW 5. Управляющие регистры: CR 0. . CR 3 6. Регистры системных адресов: GDTR – регистр таблицы глобальных дескрипторов; IDTR – регистр таблицы дескрипторов прерываний; LDTR – регистр таблицы локальных дескрипторов; TR – регистр состояния задачи; 7. Отладочные регистры 2 8. Тестовые регистры
Режимы адресации Осуществляется поддержка 3 -х основных режимов: 1) реальный режим – аналог i 8086 с 16 разрядной базой и 16 разрядным смещением – доступно 1 Мб памяти; 2) защищенный режим – 32 разрядная адресация – доступно 64 Тб памяти; 3) виртуальный режим – эмуляция нескольких «одновременно» работающих i 8086. Кроме этого поддерживается страничная организация памяти. 3
Схема адресации в защищенном режиме Эффективный адрес Индекс Страницы по 4 Кб База Смещение x Масштаб + Виртуальный Эффективный адрес (46) адрес (32) Блок ОП Блок сегментации разбивки Линейный на страницы Индекс адрес (32) Физический сегмента (14) Селектор 2 0 адрес (32) (Сегментный регистр) Селектор Таблица локальных Селектор Таблица глобальных Селектор дескрипторов 4
Схема адресации в защищенном режиме (2) Различают 3 адресных пространства: 1) логическое – виртуальный адрес – 46 бит – 246 = 64 Гб : а) индекс селектора 14 бит – 214 = 16 Кб; б) смещение 32 бита – 232 = 4 Гб; 2) линейное – линейный адрес – 32 бита; 3) физическое – физический адрес – 32 бита Дескрипторный регистр (64 бита) содержит: 1) базовый адрес сегмента – 32 бита; 2) границу сегмента – 20 бит – в байтах или страницах; 3) тип сегмента: чтение и исполнение, чтение и запись и т. п. ; 4) признак присутствия в памяти; 5) признак размера операндов по умолчанию (16 или 32 бита); 6) уровень привилегий: 0 – системные, 1 -2 – разделяемые, 3 – приложения; 5 7) и т. д.
Страничная организация памяти Линейное адресное Физическое адресное пространство 4 Кбайта 4 Кбайта 4 Кбайта 6
Схема страничной адресации CR 3 Каталог таблиц 1024*4 Кб = 4 Гб (1024 4 -х байтовых поля) Адрес таблицы страниц Таблица страниц (1024 адреса) Адрес страницы Адрес страницы 31 2221 1211 0 31 1211 0 Индекс Адрес страницы Смещение Смещение каталога страницы (страничный кадр) Линейный адрес Физический адрес 7
Машинные команды ассемблера Формат: база индекс масштаб смещение EAX CS: EBX EAX SS: ECX EBX 1 DS: EDX + ECX * 2 + DISP ES: EBP EDX 4 FS: ESP EBP 8 GS: ESI EDI Примеры: inc word ptr[500] mov [ECX], EDX mov EAX, TABLE[ESI] mov EAX, TABLE[ESI*4] 8
Машинные команды ассемблера (2) 1. MOV, PUSH, POP, IN, OUT, ADD, ADC, SUB, SBB, LEA, MUL, IMUL, DIV, IDIV, NEG, CMP и т. д. – получили возможность работать с 4 байтами 2. Дополнительные команды: 1) PUSHA – POPA (186) (16) – поместить в стек все регистры; 2) PUSHAD – POPAD (386) (32) – то же; 3) MOVSX (386) – копирует источник и расширяет знаком; MOVZX (386) – копирует источник и расширяет нулями; 4) CDQ (386) – расширение EAX EDX: EAX; 5) CWDE (386) – расширение AX EAX; 6) IMUL <приемник>, <источник> (386); IMUL <приемник>, <источник 1>, <источник 2> (186); 7) MOVSD, LODSD, STOSD, CMPSD, SCASD; 8) LFS, LGS 9) … 9
Машинные команды ассемблера (3) Пример 1. . 386 use 16 mov EAX, A ; перед командой ассемблер вставит байт 66 h add EAX, B ; перед командой ассемблер вставит байт 66 h mov C, EAX ; перед командой ассемблер вставит байт 66 h Пример 2. . 386 use 16 mov ECX, 0 F 0000 h cycl: db 67 h loop cycl 10
Конвенции о связи модулей Window's № Название Delphi Builder Порядок Чистка Р-ры пар-ров стека 1 Паскаль pascal _ _ pascal прямой п/п - 2 С cdecl _ _ cdecl обратный в/п - 3 Стандартная stdcall _ _ stdcall обратный п/п - 4 Регистровая register _ _ fastcall прямой п/п до 3 -х 5 Защищенная safecall - обратный п/п 11
Конвенции о связи модулей WINDOW’s (2) Передача управления: а) тип вызова: near, модель FLAT, размер адреса возврата 32 бита; б) стандартные вход и выход те же; в) особенности компоновки: Delphi C++ Builder Visual C++ Преобразует все Различает прописные и строчные буквы имен в и строчные буквы в прописные именах Не изменяет внешних Помещает «_» перед имен внешними именами Внутреннее имя @<имя>$q<описание @<имя> @ <количество совпадает с внешним параметров> параметров * 4> Необходимо сохранять регистры: EBX, EBP, ESI, EDI. Можно не сохранять: EAX, EDX, ECX 12
Особенности Delphi Пример 1. Процедура суммирования двух целых чисел (Ex 7_1). Описание в Delphi: Implementation {$l ASM 1. obj} procedure ADD 1 (A, B: integer, Var C: integer); <конвенция>; external; Вызов: ADD 1(A, B, C); 13
Особенности Delphi (pascal) . 386 . model flat . code public ADD 1 EBP=ESP EBP ADD 1 proc +8 Aд. возврата push EBP +12 &C mov EBP, ESP +16 B A mov EAX, [EBP+16] 4 байта add EAX, [EBP+12] mov EDX, [EBP+8] mov [EDX], EAX pop EBP ret 12 ADD 1 endp end 14
Особенности Delphi (cdecl) . 386 . model flat . code public ADD 1 EBP=ESP EBP ADD 1 proc +8 Aд. возврата push EBP +12 A mov EBP, ESP +16 B &C mov EAX, [EBP+8] 4 байта add EAX, [EBP+12] mov EDX, [EBP+16] mov [EDX], EAX pop EBP ret ADD 1 endp end 15
Особенности Delphi ( safecall = stdcall + исключение при ошибке) . 386 . model flat . code EBP=ESP public ADD 1 EBP ADD 1 proc +8 Aд. возврата +12 A push EBP B +16 mov EBP, ESP &C mov EAX, [EBP+8] 4 байта add EAX, [EBP+12] mov EDX, [EBP+16] mov [EDX], EAX pop EBP ret 12 ADD 1 endp end 16
Особенности Delphi (register) . 386 1 -й параметр A в EAX; . model flat 2 -й параметр B в EDX; . code 3 -й параметр &C в ECX public ADD 1 proc Aд. возврата add EDX, EAX mov [ECX], EDX ret ADD 1 endp end 17
Особенности Delphi (2) Пример 2. Дисассемблер функции копирования строки: Function Dell(S: Short. String): Short. String; pascal; Begin Result: =S; End; push EBP пролог mov EBP, ESP add ESP, $FFFF FF 00; память под строку push ESI сохранение регистров EDP ESP push EDI mov ESI, [EBP+$C]; адрес исходной строки Копия параметра lea EDI, [EBP-$0000 0100] ; строка-буфер 256 байт xor ECX, ECX установка счетчика EBP=ESP EBP mov CL, [ESI] inc ECX; учли байт длины +8 Aд. возврата rep movsb ; копирование строки-параметра +12 & результата & параметра mov EAX, [EBP+8] lea EDX, [EBP-$100] вызываем процедуру копирования call @PStr. Cpy pop EDI восстанавливаем регистры pop ESI mov ESP, EBP эпилог pop EBP 18 ret 8
Особенности Delphi (3) Пример 3. Увеличение элементов массива на 5 procedure Array_add(var a: arr); pascal; external; . 386 EBP=ESP . model flat EBP . code +8 Aд. возврата public Array_add &A Array_add proc push ebp mov ebp, esp mov eax, [ebp+8] mov ecx, 5 cycl: add byte ptr 0[eax], 5 inc eax loop cycl pop ebp ret 4 Array_add endp 19 end
Особенности C++ Builder (Ex 7_2) Project 1. cpp: USEOBJ (“asm 1. obj”); Unit 1. cpp: extern void <конвенция> add 1(int a, int b, int *c); Вызов: add 1(a, b, &c); 20
Особенности C++ Builder (cdecl) Примечание – Транслировать: tasm 32 /mx asm 1. asm . 386 . model flat . code EBP=ESP public @add 1$qiipi EBP @add 1$qiipi proc +8 Aд. возврата +12 A push EBP +16 B mov EBP, ESP &C mov EAX, [EBP+8] 4 байта add EAX, [EBP+12] mov EDX, [EBP+16] mov [EDX], EAX pop EBP ret @add 1$qiipi endp end 21
Особенности C++ Builder ( cdecl + «С» ) extern “C” void cdecl add 1(int a, int b, int *c); . 386 . model flat . code public _add 1 proc push EBP mov EBP, ESP mov EAX, [EBP+8] add EAX, [EBP+12] mov EDX, [EBP+16] mov [EDX], EAX pop EBP ret _add 1 endp end 22
Особенности Visual C++ (_ _stdcall) extern “C” void _ _stdcall add 1(int a, int b, int *c); Транслировать: tasm 32 /ml add 1. asm – не различать строчные и прописные . 386 . model flat . code public _add 1 proc push EBP mov EBP, ESP mov EAX, [EBP+8] add EAX, [EBP+12] mov EDX, [EBP+16] mov [EDX], EAX pop EBP ret 12 _add 1 endp end 23
Особенности Visual C++ (_ _fastcall) extern “C” void _ _fastcall add 1(int a, int b, int *c); Транслировать: tasm 32 /ml add 1. asm – не различать строчные и прописные . 386 . model flat . code public _add 1@12 @add 1@12 proc add EAX, EDX mov [ECX], EAX pop EBP ret @add 1@12 endp end 24


