Архитектура вычислительных систем



бет1/5
Дата05.03.2023
өлшемі1,31 Mb.
#71719
түріЛабораторная работа
  1   2   3   4   5
Байланысты:
include


Санкт-Петербургский политехнический университет Петра Великого
Институт компьютерных наук и технологий
Высшая школа интеллектуальных систем и суперкомпьютерных технологий


ЛАБОРАТОРНАЯ РАБОТА №6
Команды и способы адресации для х86 в 32-битном режиме.
по дисциплине «Архитектура вычислительных систем»
Выполнил
студент гр.3530903/90302 Докукин Э.А.

Руководитель Вербова Н.М.


доцент, к.ф.-м.н.

Санкт-Петербург


2022
#include

unsigned long cMas[10];


int i;
void main() {

00991000 55 push ebp


Помещение ebp в стек (неявная)
00991001 8B EC mov ebp,esp
Записывание esp в ebp (регистровая, регистровая)
00991003 51 push ecx
Помещение ecx в стек (неявная)
00991004 53 push ebx
Помещение ebx в стек (неявная)

i = 1;

00991005 B9 01 00 00 00 mov ecx,1
Записывание 1 в ecx (регистровая, непосредственная)
0099100A C7 45 FC 04 00 00 00 mov dword ptr [ebp-4],4
Записывание значения 4 в ячейку с размером 32-бита по адресу из ebp со сдвигом -4
(косвенная, непосредственная)
00991011 56 push esi
Помещение esi в стек (неявная)
00991012 57 push edi
Помещение edi в стек (неявная)
00991013 8D 59 1A lea ebx,[ecx+1Ah]
Помещение значения по адресу из ecx со сдвигом +1Ah в ebx (регистровая, косвенная)
00991016 8D 71 02 lea esi,[ecx+2]
Помещение значения по адресу из ecx со сдвигом +2 в esi (регистровая, косвенная)
00991019 8D 79 07 lea edi,[ecx+7]
Помещение значения по адресу из ecx со сдвигом +7 в edi (регистровая, косвенная)
0099101C 0F 1F 40 00 nop dword ptr [eax]
Заполнение места в коде командой nop (косвенная)

do {

if ((i >= 3) && (i != 5))

00991020 83 F9 03 cmp ecx,3


Сравнение 3 и ecx (регистровая, непосредственная)
00991023 7C 0C jl main+31h (0991031h)
Переместиться на команду по адресу (0991031h), если ecx < 3
(косвенная)
00991025 83 F9 05 cmp ecx,5
Сравнение ecx и 5 (регистровая, непосредственная)
00991028 74 07 je main+31h (0991031h)
Переместиться на команду по адресу (0991031h), если ecx == 3
(непосредственная)

cMas[i] = (3 * i) ^ 0x18;


0099102A 8B C6 mov eax,esi


Записывание значения esi в eax (регистровая, регистровая)
0099102C 83 F0 18 xor eax,18h
Применение побитовой операции xor для eax и 18h.
(регистровая, непосредственная)
0099102F EB 0B jmp main+3Ch (099103Ch)
Переместиться на команду по адресу 099103Ch
(непосредственная)

else
cMas[i] = (27 * i) / 8;


00991031 8B C3 mov eax,ebx


Записывание ebx в eax (регистровая, регистровая)
00991033 99 cdq
Распространяет значение знакового бита в регистре eax на все биты регистра edx
00991034 83 E2 07 and edx,7
Выполняет логическое И между всеми байта 7 и edx
(регистровая, непосредственная)
00991037 03 C2 add eax,edx
Суммирует edx и eax и записывает значение в eax
(регистровая, регистровая)
00991039 C1 F8 03 sar eax,3
Сдвигает биты eax на 3 позиции
(регистровая, непосредственная)

i++;

0099103C 8B 55 FC mov edx, dword ptr [ebp-4]
Записывание значения по адресу из ebp со сдвигом -4 (регистровая, косвенная) в edx
0099103F 41 inc ecx
Инкремент ecx (регистровая)
00991040 89 7D FC mov dword ptr [ebp-4],edi
Записывание значения из edi по адресу из ebp со смещением -4
(косвенная, регистровая)
00991043 83 C6 03 add esi,3
Суммирует 3 и esi и записывает результат в esi
(регистровая, непосредственная)
00991046 83 C7 04 add edi,4
Суммирует 4 и edi и записывает результат в edi
(регистровая, непосредственная)
00991049 83 C3 1B add ebx,1Bh
Суммирует 1Bh и ebx и записывает результат в ebx
(регистровая, непосредственная)
0099104C 89 82 80 33 99 00 mov dword ptr cMas (0993380h)[edx],eax
Записывание значения из eax по адресу из edx со сдвигом cMas (косвенная, регистровая)
00991052 89 0D A8 33 99 00 mov dword ptr [i (09933A8h)],ecx
Записывание значения ecx в память по адресу 09933A8h
(косвенная, регистровая)
} while (i < 9);
00991058 83 F9 09 cmp ecx,9
Сравнение значения в ecx и 9 (регистровая, непосредственная)
0099105B 7C C3 jl main+20h (0991020h)
Переместиться на команду по адресу 0991020h, если ecx < 9
(непосредственная)
}

0099105D 5F pop edi


Извлечение значения в edi из стека
(регистровая)
0099105E 5E pop esi
Извлечение значения в esi из стека
(регистровая)
0099105F 33 C0 xor eax,eax
Применение побитовой операции xor для eax. Обнуление значения eax.
(регистровая, регистровая)

00991061 5B pop ebx


Извлечение значения в ebx из стека
(регистровая)
00991062 8B E5 mov esp,ebp
Записывание значения из ebp в esp
(регистровая, регистрвая)
00991064 5D pop ebp
Извлечение значения в ebp из стека
(регистровая)
00991065 C3 ret
Возврат из текущей процедуры.


Достарыңызбен бөлісу:
  1   2   3   4   5




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет