Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Формати файлів, що виконуються, які підтримуються у fasm




На відміну від інших асемблерів, при написанні програми вид файлу, що виконується, задається однією директивою format. Fasm підтримує наступні вихідні формати файлів, що виконуються:

а) за замовчуванням fasm генерує непереміщуваний двійковий образ, (програми „com” або „sys”);

б) використання директиви 'format mz' дасть можливість одержати переміщувану і мультисегментну „exe”-програму для реального режиму роботи мікропроцесора.

в) використання директиви 'format pe' змусить fasm генерувати файл, що буде виконуватися у Windows (у режимі командної оболонки або у графічному режимі);

г) coff (common object file format – стандартний формат об’єктного файлу), використайте директиву “formatcoff” або “format ms coff”.

д) формат elf - для операційної системи Unix.

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

Директиви “use16” і “use32” указують асемблеру генерувати 16-бітний або 32-бітний код, зневажаючи настроюванням за замовчуванням для обраного формату виводу, “use64” включає генерування коду для довгого режиму процесорів x86

1.4 Каркасні програми на асемблері та С++

Уfasmнапишемо програму cdecl. asm та згенеруємо об’єктний модуль cdecl. obj, жирним текстом виділено обов’язкові елементи

Format coff; формат файлу

Public _AddInts; ім’я процедури

_AddInts:

Push ebp

Mov ebp, esp

mov eax, dword [ebp+8]

add eax, dword [ebp+12]

Pop ebp

Ret

У Microsoft Visual Studio. Net

1. Створимо консольний додаток Win32 console project

2. Скопіюємо в каталог проекту скомпільований асемблерний модуль, наприклад cdecl. obj

3. Підключимо цей модуль у проект (рисунки 9, 10)

У файлі new. cpp оголосимо зовнішню функцію:

// new. cpp: Defines the entry point for the console application.

#include “stdafx. h”

//!!! обратите внимание – имя вызываемой функции в общем случае

// не соотвествует имени ассемблерного модуля!!!!!

extern “C” int _cdecl AddInts (int i1, int i2);

int _tmain (int argc, _TCHAR* argv [])

{

int a, b, rez;

scanf ("%d %d”, &a,&b); // вводим целые значения

rez=AddInts (a, b);

// выводим целое значение и переходим на следующую строку

printf (“Rez=%d \n”, rez);

// задерживаемэкран вывода до нажатия любой клавиши

system (“pause”);

return 0;

Рисунок 9

Рисунок 10

2. Завдання на лабораторну роботу:

Створити каркасний додаток, та перевірити його роботу.

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...