Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Регистры общего назначения - eax, ebx, ecx, edx (ax, bx, cx, dx, al, bl, cl, dl, ah, bh, CH, DH).↑ Стр 1 из 37Следующая ⇒ Содержание книги
Поиск на нашем сайте
Регистры сегментов - это CS, DS, ES, FS, GS, SS. Эти регистры 16-ти битные, и содержат в себе первую половину адреса "сегмент:оффсет". Регистры оффсета - EIP, ESP, EBP, ESI, EDI (IP, SP, BP, SI, DI). EIP - указатель команд, и содержит указатель на линию кода, которая будет исполняться следующей. Полный адрес на следующую исполняемую линию кода будет CS:IP (CS:EIP). Регистр ESP указывает на адрес вершины стека. Регистр ЕВР содержит адрес, начиная с которого в стек вносится или забирается информация (или "глубина" стека).
Регистры процессора Битность процессора напрямую связана с битностью регистров и их аббревиатурой, поэтому: AX, CX, SP, IP,... - харакетризуют 16 битные регистры;EAX, ECX, ESP, EIP,... - 32 битные;RAX, RCX, RSP, RIP,... - 64 битные (добавляется буква R);Существуют следующие типы регистров: · Регистры общего назначения (РОН) - EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP · Регистр-указатель команд - EIP · Регистр флагов - EFL (EFLAGS) · Сегментные регистры - SS, CS, DS, ES Описание регистров Регистры общего назначения (РОН) служат для хранения промежуточных вычислений. 1) RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, R8 - R15 — 64-битные; 2) EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI, R8D - R15D — 32-битные; 3) AX, CX, DX, BX, SP, BP, SI, DI, R8W - R15W — 16-битные; 4) AH, AL, CH, CL, DH, DL, BH, BL, SPL, BPL, SIL, DIL, R8B - R15B — 8-битные;
где x - 8..15. Регистры RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, Rx, RxD, RxW, RxB, SPL, BPL, SIL, DIL доступны только в 64-битном режиме работы процессора. Задача: найти старшую часть расширенного регистра (eax, ebx,..., esi, edi)?
1) Например надо найти старшую часть регистра esi и поместить ее в ax: mov eax, esi <--- Помещаем esi в eaxshr eax, 10h <--- Сдвигаем биты eax на 16 разрядов вправо.
2) Например надо найти старшую часть регистра ebx. Для этого пишем: rol ebx, 10hПосле этого все разряды регистра ebx сдвинутся по кругу на 16 позиций вправо. Старшие 16 разрядов окажутся на месте младших 16 разрядов. А младшие 16 разрядов окажутся на месте старших. Первая программа под WIN32. Программа "Hello, World!". .386 .model flat, stdcall extrn ExitProcess:PROC extrn MessageBoxA:PROC .data Ttl db "First ASSEMBLER program",0h Msg db 'Hello, World!!!!',0h .code start: push 0h push offset Ttl push offset Msg push 0h call MessageBoxA push 0h call ExitProcess endstart
Первая программа под DOS16. masm model small .stack 100h .data message db "Hello World!!!",'$' .code begin: xor ax,ax; Обнуление регистра Ах mov ax,@data;Установка в ds адреса сегмента mov ds,ax;данных mov ah,09h;Функция Dos вывода сообщения mov dx,offset message;запись смещения message в dx int 21h;Функция Dos вывода сообщения на экран mov ax,4c00h;Функция DOS- выход из программы int 21h;Вызов DOS. Останов программы. end begin Лекция №2. КомандыPUSH, POP. Пересылка данных. Регистры архитектуры x86. Регистры флагов. Данные и операнды языка Ассемблер. API функции находятся в библиотеках kernel32.dll, user32.dll, gdi32.dll (классика) advapi32.dll и т.д. kernel32.dll – эта библиотека есть в каждом процессе. Все функции, используют модель вызова stdcall, это значит, параметры подпрограмме передаются "задом-на-перёд" и вызываемый очищает стек. Общий вид вызова API функции будет такой: Push параметр 3 Push параметр 2 Push параметр 1 Call функция;
Каждая программа в Win32 в конце своего выполнения ОБЯЗАТЕЛЬНО должна вызвать функцию ExitProcess. Функуия ExitProcess имеет вид: VOID ExitProcess( UINT uExitCode // exit code for all threads ); uExitCode - это значение никогда не используется и всегда равно 0.
Функция MessageBox имеет вид: Int MessageBox( HWND hWnd, // handle родительского окна LPCTSTR lpText, // address of text in message box LPCTSTR lpCaption, // address of title of message box UINT uType // style of message box );
При обращении к функциям и процедурам могут использоваться различные способы передачи их параметров: Передача параметров при вызове функций может производится через стек или регистры процессора. Помещаемые в стек или регистр параметры могут следовать в различном порядке. После передачи параметров стек может очищаться либо вызывающим процессом либо вызываемой процедурой. Соглашение о вызовах – это способ передачи параметров в вызываемую функцию или процедуру.
Таблица 1. Директивы соглашения о вызовах Сегментация в DOS В ДОС и в первоначальных версиях Windows память была сегментной. Вся память делилась на сегменты по 64 КВ., и адрес задавался, форматом сегмент:офсет. Сегмент задаёт порядковый номер сегмента, а офсет задаёт смещение чего-либо в этом сегменте.
С помощью 16 бит можно адресовать только 65536 байт памяти и 65536 сегментов.
Например: Всё шестнадцатиричное) Это означает: сегмент 30, смещение 4012. Чтобы узнать, что находится по этому адресу, сначала необходимо перейти на сегмент 30, а затем в сегменте сместиться на 4012. Сегментные регистры: CS - Сегмент кода DS - Сегмент данных SS - Сегмент стека ES - Дополнительный сегмент FS - Универсальный сегмент GS - Универсальный сегмент
|
||||||||||
Последнее изменение этой страницы: 2016-09-13; просмотров: 4793; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.218.99.80 (0.008 с.) |