Скачать презентацию Семейство микропроцессоров i. APx 86 Модель Данные/Адрес Скачать презентацию Семейство микропроцессоров i. APx 86 Модель Данные/Адрес

ЛЕК+2=.ppt

  • Количество слайдов: 24

 Семейство микропроцессоров i. APx 86 Модель Данные/Адрес Примечание i 8086 16/20 4 МГц, Семейство микропроцессоров 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. Сегментные регистры: Архитектура МП 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) реальный режим – аналог Режимы адресации Осуществляется поддержка 3 -х основных режимов: 1) реальный режим – аналог i 8086 с 16 разрядной базой и 16 разрядным смещением – доступно 1 Мб памяти; 2) защищенный режим – 32 разрядная адресация – доступно 64 Тб памяти; 3) виртуальный режим – эмуляция нескольких «одновременно» работающих i 8086. Кроме этого поддерживается страничная организация памяти. 3

 Схема адресации в защищенном режиме Эффективный адрес Индекс Страницы по 4 Кб База Схема адресации в защищенном режиме Эффективный адрес Индекс Страницы по 4 Кб База Смещение x Масштаб + Виртуальный Эффективный адрес (46) адрес (32) Блок ОП Блок сегментации разбивки Линейный на страницы Индекс адрес (32) Физический сегмента (14) Селектор 2 0 адрес (32) (Сегментный регистр) Селектор Таблица локальных Селектор Таблица глобальных Селектор дескрипторов 4

 Схема адресации в защищенном режиме (2) Различают 3 адресных пространства: 1) логическое – Схема адресации в защищенном режиме (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 Страничная организация памяти Линейное адресное Физическое адресное пространство 4 Кбайта 4 Кбайта 4 Кбайта 6

 Схема страничной адресации CR 3 Каталог таблиц 1024*4 Кб = 4 Гб (1024 Схема страничной адресации CR 3 Каталог таблиц 1024*4 Кб = 4 Гб (1024 4 -х байтовых поля) Адрес таблицы страниц Таблица страниц (1024 адреса) Адрес страницы Адрес страницы 31 2221 1211 0 31 1211 0 Индекс Адрес страницы Смещение Смещение каталога страницы (страничный кадр) Линейный адрес Физический адрес 7

 Машинные команды ассемблера Формат: база индекс масштаб смещение EAX CS: EBX EAX SS: Машинные команды ассемблера Формат: база индекс масштаб смещение 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, Машинные команды ассемблера (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 Машинные команды ассемблера (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 Порядок Чистка Р-ры пар-ров Конвенции о связи модулей Window's № Название Delphi Builder Порядок Чистка Р-ры пар-ров стека 1 Паскаль pascal _ _ pascal прямой п/п - 2 С cdecl _ _ cdecl обратный в/п - 3 Стандартная stdcall _ _ stdcall обратный п/п - 4 Регистровая register _ _ fastcall прямой п/п до 3 -х 5 Защищенная safecall - обратный п/п 11

 Конвенции о связи модулей WINDOW’s (2) Передача управления: а) тип вызова: near, модель Конвенции о связи модулей 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 Пример 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 Особенности 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 Особенности 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 . Особенности 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 Особенности 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): Особенности 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: Особенности 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 Особенности 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 Особенности 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 Особенности 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, Особенности 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, Особенности 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