Вы находитесь на странице: 1из 4

Отчет по практической работе №18

Реализация операторов перехода на ассемблере в среде Visual Studio


Цель: Научиться работать в среде Visual Studio с программами на
ассемблере.
1. Для заданных a и b вычислить значение функции:
2
F (a , b)= a +5 b+7 , если a>b
{
100 , если a<=b
Провести тестирование программы для a=1,b=2 и для a=2,b=1.
(Ответы: 100, 16)
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <locale.h>
using namespace std;

// a^2+5b+7, если a>b


// 100, если a<=b"
int main()
{
setlocale(0, "rus");
int a, b, fx;
cout << "Введите A: "; cin >> a;
cout << "Введите B: "; cin >> b;

_asm
{
mov eax, a;
mov ebx, b;
cmp eax, ebx;
jna m1;
imul eax, eax;
imul ebx, 5;
add eax, ebx;
add eax, 7;
mov fx, eax;
jmp _ret
m1: mov fx, 100;
_ret: nop;
}

cout << fx << endl;


system("pause");
return false;
}
2. Вычислить значение функции :
x 2+ 3 x +9 , если x> 3
F (x)= { x3 +6 , если x<=3
Провести тестирование программы для X=1 и X=4.
(Ответы: 7, 37)
#include "stdafx.h"
#include <iostream>
#include <locale.h>
using namespace std;

// x^2+3x+9, если x>3


// x^3+6, если x<=3
int main()
{
setlocale(0, "rus");
int x;
cout << "Введите X: "; cin >> x;

_asm
{
mov ecx, 0;
mov eax, x;
cmp eax, 3;
jna m1;
imul eax, eax;
add ecx, eax;
mov eax, x;
imul eax, 3;
add eax, 9;
add ecx, eax;
mov x, ecx;
jmp _ret
m1:
mov eax, x;
imul eax, eax;
mov ebx, x;
imul eax, ebx;
add eax, 6;
mov x, eax;

_ret: nop;
}

cout << x << endl;


system("pause");
return false;
}
3. Найти максимальное из трех вводимых чисел.
Провести тестирование программы для:
A=1, B=4, C=7
A=8, B=5, C=4
A=8, B=9, C=3.
(Ответы: 7, 8, 9)
#include "stdafx.h"
#include <iostream>
#include <locale.h>
using namespace std;

int main()
{
setlocale(0, "rus");
int a, b, c,rez;
cout << "Введите a: "; cin >> a;
cout << "Введите b: "; cin >> b;
cout << "Введите c: "; cin >> c;
_asm
{
mov eax, a;
mov ebx, b;
mov ecx, c;
cmp eax, ebx;
ja m1;
cmp ecx, ebx;
ja m2;
mov rez, ebx;
jmp _ret;

m1:
cmp ecx, eax;
ja m2;
mov rez, eax;
jmp _ret;

m2:
mov rez, ecx;
jmp _ret;

_ret: nop;
}

cout << rez << endl;


system("pause");
return false;
}
Вывод: Мы научились реализовывать ветвленияя в ассемблере.