Шаг 19.
Оптимизация с помощью ассемблера.
Пример простой программы

    На этом шаге мы приведем пример простой программы, иллюстрирующей изложенный материал.

    Приведем пример программы, выполняющей простые арифметические дейтсвия.

    Листинг 1. Calcul.cpp

//Программа выполняет различные арифметические действия,
//написанные на ассемблере. 
#include <stdio.h>
#include <iostream.h>
int summa(int a, int b)
{// return a+b;    
 int s;
 asm {
 mov ax, a
 add ax, b
 mov  s, ax
 }
 return s;
}
void delenie(int a, int b)
{int d, c;
asm {
mov	ax, a
cwd	
idiv	b
mov	d,ax
mov	c,dx
}
cout<<"\na:b="<<d<<"+"<<c<</"<<b;
}
main()
{cout<<"задайте целые числа a, b: \n";
 int a, b, s1, s2;
 cin>>a>>b;
 cout<<"a+b="<<summa(a,b)<<"\n";
 //Оператор asm находится внутри главной функции
 asm {
 mov ax, a
 sub ax, b
 jmp m1 //Метки могут переносить
        //нас из одного оператора asm в другой
 }
 cout<<"Этот текст не выведется на зкран!";
 //В тексте функции main() можно использовать
 //несколько операторов asm! 
 asm {
 m1:
 mov  s1, ax
 mov ax, a
 imul  b
 mov  s2, ax
 jmp m2   //Так же с помощью метки можно из
	 //ассемблерного кода перейти в код C++
 }
 cout<<"Этот текст не выведется на зкран!";
 m2:
 cout<<"a-b="<<s1<<"\n";
 cout<<"a*b="<<s2;
 delenie(a,b);
 return 0;
}
Текст этой программы вы можете взять здесь

    В программе показано, что ассемблерный код может располагаться в любой части программы, причем операторов asm может быть несколько. В языке ассемблера широко используются метки. В операторе asm метки могут переносить нас из одного оператора asm в другой, либо в код С++.




Предыдущий шаг Содержание