Інформація про навчальний заклад

ВУЗ:
Інші
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Не вказано

Інформація про роботу

Рік:
2015
Тип роботи:
Інші
Предмет:
Асемблер

Частина тексту файла (без зображень, графіків і формул):

Модуль на С: #include <iostream> using namespace std; extern "C" int calc(int,int,int); //оголошення зовнішньої функції з параметрами //параметри передаються через стек extern "C" const int K=0x6c26; int main() { int A,C; int E; int res; cout<<"Enter numbers:"<<endl; cout<<"A = "; cin>>A; cout<<"C = "; cin>>C; cout<<"E = "; cin>>E; res = calc(A,C,E); cout<<endl<<"Result v C++ is: "<<res<<endl; system("pause"); return 0; } Модуль на Асемблер: .386 .model flat,c .data EXTRN C K:dword ;використання зовнішньої змінної (константи) К з модуля main.cpp format db "Rezult v asm= %d",0 .code printf PROTO arg1:Ptr Byte, printlist: VARARG calc PROC push ebp mov ebp,esp mov eax, dword ptr[ebp+8] ;зчитуємо параметр А в регістр eax mov ebx, dword ptr[ebp+12] ;зчитуємо параметр C в регістр ebx sar ebx,1 ;ділимо на 2 значення ebx (C), sar - зсув вправо для знакових чисел на вказане число бітів, знаковий біт залишається add eax,ebx ;в регістрі eax отримаємо A+C/2 movsx ecx, byte ptr[ebp+16] ;в регістр ecx записуємо байтове значення параметра Е зі знаковим розширенням sar ecx,3 ;ділимо на 8 (2^3) значення ecx, через побітовий зсув вправо на 3-ри біти (знаковий біт зберігається) sub eax,ecx ;в регістрі eax - A+C/2-E/8 add eax,K ;eax=A+C/2-E/8+K згідно варіанту ;mov z,eax push eax invoke printf, addr format, eax pop eax pop ebp ret ;значення в програму на С++ повертається в регістрі EAX calc ENDP END
Антиботан аватар за замовчуванням

05.10.2015 18:49

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!