Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpory_po_poryadku_proga.doc
Скачиваний:
4
Добавлен:
15.04.2019
Размер:
1.07 Mб
Скачать

23.6. Внешние подпрограммы

#include <stdio.h> #include <stdlib.h> extern "C" int _cdecl SubInt(int, int); extern "C" int _cdecl SumAInt(int[], int,int*);

void Rnd_array (int ar[],int *n) {// ввод размерности и элементов массива int i,j; printf("Enter dimension n \n"); scanf("%d",n); for (i=0;i<*n;i++) ar[i]=rand()%100; ; }

void Print_array ( int ar[],int n) // вывод элементов массива { printf("Items array\n"); for ( int i=0;i<n;i++) printf("%5d",ar[i]); printf("\n");}

void main() {int x,y; printf ("Enter 2 number"); scanf("%d%d",&x,&y); int r=SubInt(x, y); // в стеке сначала y потом x

printf ("difference=%d\n",r);

int b[20],n,k; Rnd_array(b, &n); Print_array(b, n); SumAInt(b,n,&k); // в стеке заносится сначала &k,n,&b printf ("summa=%d\n",k); }

Подпрограмма во внешнем файле .asm .486 .model flat ;плоская модель памяти .data ;описание данных .code

Public _SubInt _SubInt proc ; В стеке 4 байта адрес точки возврата push ebp ;4 байта mov ebp,esp mov eax,[ebp+8] ; x sub eax,[ebp+12]; y pop ebp ret SubInt endp

Public _SumAInt _SumAInt proc push ebp mov ebp,esp mov esi,[ebp+8] ;&array mov ecx,[ebp+12];n xor eax,eax

for1: add eax,[esi] add esi,4 loop for1 mov edi,[ebp+16];&k mov [edi],eax pop ebp ret _SumAInt endp end

23.7.Компилятор masm

В начале 1990-х, альтернативные ассемблеры, типа Borland TASM и условно-бесплатного ассемблера x86 NASM начали брать часть доли на рынке MASM. Позже в 2000 году, MASM 6.15 был выпущен как часть Visual C++ пакета разработки, который является бесплатным. В результате все версии Visual C++ позже чем 6.0, включали версию MASM, равную версии Visual C++.

Позже в Visual C++ 2005 появилась 64-битовая версия MASM (название линкера — ml64.exe). Вместе с большим сообществом программистов MASM, эти события помогли остановить снижение популярности MASM до других ассемблеров. Сегодня MASM — все ещё ассемблер номер один на платформе Win32, несмотря на конкуренцию с новыми продуктами, как NASM, FASM и HLA.

    Компилятор MASM создан специально для написания программ на ассемблере для Win32. В нём есть макросы и специальные директивы для упрощения программирования.     Функции.      Основное преимущество MASM это макрос invoke, он позволяет вызывать API функции по-обычному с проверкой количества и типа параметров. Это почти тот же call, как в TASM, но этот макрос проверяет количество параметров и их типы. Вот так вызывается функция:      Invoke <функция>, <параметр1>, <параметр2>, <параметр3>

Это пример программы Hello World, которая выводит это знаменитое сообщение и завершается. .386 .model flat, stdcall option casemap :none include \masm32\include\masm32.inc include \masm32\include\kernel32.inc include \masm32\macros\macros.asm includelib \masm32\lib\masm32.lib includelib \masm32\lib\kernel32.lib .code start: print "Hello world" exit end start

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]