DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Модуль на C++ та асемблері: взаємодія функцій

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

ВУЗ:
Національний технічний університет України Київський політехнічний інститут
Інститут:
ООП
Факультет:
Факультет інформатики та обчислювальної техніки
Кафедра:
Кафедра обчислювальної техніки

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

Рік:
2015
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування
Група:
КН-31
Коротко про документ

Про що ця робота

У роботі наведено лістинг програми на C++ та асемблерного модуля. Реалізовано обчислення за варіантом з використанням стеків та зсувів.

У роботі розглядаються

  • Мова асемблера
  • Мова C++
  • Зовнішні функції
  • Побітові зсуви
  • Робота зі стеком
  • Арифметичні операції

Зміст і розділи

  1. Модуль на C++
  2. Модуль на асемблері
  3. Обчислення функції calc
Для кого:Студенти технічних спеціальностей та вищі навчальні заклади.
Викладачі:Викладач кафедри

Ключові поняття

C++СтекЗсувФункціяЗмінна

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

Модуль на С: #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
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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