Формати файлів, що виконуються, які підтримуються у 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. Завдання на лабораторну роботу: Створити каркасний додаток, та перевірити його роботу.
Читайте также: S: Информативные методы диагностики хронического гепатита Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|