На этом шаге мы приведем пример простой программы, иллюстрирующей изложенный материал.
Приведем пример программы, выполняющей простые арифметические дейтсвия.
Листинг 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 в другой, либо в код С++.