Команды переходов

00B813C8 EB 0D jmp main+37h (0B813D7h)

00B813DE 73 3D jae main+7Dh (0B8141Dh)

00B813E7 72 1A jb main+63h (0B81403h)

00B81401 EB 18 jmp main+7Bh (0B8141Bh)

00B8141B EB AD jmp main+2Ah (0B813CAh)

Абсолютная адресация (путем смещения относительно процедуры main).

Обращение к локальным переменным

Обращение к переменной i:

00F813BE C7 45 C8 00 00 00 00 mov dword ptr [i],0

00F813C7 8B 45 C8 mov eax,dword ptr [i]

00F813CD 89 45 C8 mov dword ptr [i],eax

00F813D0 83 7D C8 09 cmp dword ptr [i],9

00F813D6 83 7D C8 04 cmp dword ptr [i],4

00F813E5 8B 4D C8 mov ecx,dword ptr [i]

Адресация не изменилась.

00F813E8 89 44 8D D4 mov dword ptr Mas[ecx*4],eax

Адресация не изменилась.

Обращение к массиву через указатель

#include "stdafx.h"

int Mas[10];

unsigned int i;

int *Mas2;

void main()

{

Mas2=&Mas[0];

for (i=0;i<9;i++)

{

if (i>=4)

*(Mas2+i)=13*i+7;

else

*(Mas2+i)=(i*8) ^ 0xC;

}

}

*(Mas2+i)=13*i+7;

009113FB A1 58 81 91 00 mov eax,dword ptr ds:[00918158h]

00911400 6B C0 0D imul eax,eax,0Dh

00911403 83 C0 07 add eax,7

00911406 8B 0D 58 81 91 00 mov ecx,dword ptr ds:[918158h]

0091140C 8B 15 5C 81 91 00 mov edx,dword ptr ds:[91815Ch]

00911412 89 04 8A mov dword ptr [edx+ecx*4],eax

В первых четырех строках производятся вычисления;

В пятой строке происходит запись в регистр edx адреса первого элемента массива Mas2;

В последней строчке в ячейку с адресом edx+ecx*4 записывается результат вычислений, хранящийся в регистре eax.

Выводы

В результате выполнения работы была написана программа на языке C, был дизассемблирован исходный код, по исходному коду было проанализировано, как компилятор реализует команды языка высокого уровня на ассемблере, разобраны способы адресации и способы обращения компилятора к различным переменным.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: