Интернет магазин китайских планшетных компьютеров



Компьютеры - Fasm - Формат записи инструкций

27 апреля 2011


Оглавление:
1. Fasm
2. Препроцессирование
3. Формат записи инструкций
4. Формат выходных файлов
5. Поддержка fasm в сторонних программных продуктах



Используется Intel-синтаксис записи инструкций.

Единственное существенное отличие от формата, принятого в других ассемблерах — значение ячейки памяти всегда записывается как , а просто label_name означает адрес ячейки. Это позволяет обходиться без ключевого слова offset. Также в fasm при переопределении размера операнда вместо byte ptr пишется просто byte, вместо word ptrword и т. д. Не позволяется использовать несколько квадратных скобок в одном операнде, таким образом вместо необходимо писать . Эти изменения синтаксиса привели к более унифицированному и лёгкому для чтения коду.

Пример программы

Пример Windows-программы «Hello, world!», которая выводит это сообщение с помощью функции MessageBox и завершается:

         format  pe gui 4.0
         entry   start
         include 'win32a.inc'
 
 start:
         invoke  MessageBox,NULL,message,message,MB_OK
         invoke  ExitProcess,0
 
 message db 'Hello, World!',0
 
         data    import
         library kernel32,'kernel32.dll',\
                 user32,'user32.dll'
         include 'api/kernel32.inc'
         include 'api/user32.inc'
         end     data

Или так:

         include 'win32ax.inc'
 .code
 main:
         invoke  MessageBox,NULL,'Hello, World!','Fasm message box:',MB_OK
         invoke  ExitProcess,0
 .end main

Усложнённый вариант, с уточнением секций в PE-файле:

         format  pe gui
         entry   start
         include 'win32a.inc'
 
 section '.data' data readable writeable
 
 message db      'Hello, World!',0
 
 section '.code' code readable executable
 
 start:
         invoke  MessageBox,NULL,message,message,MB_OK
         invoke  ExitProcess,0
 
 section '.idata' import data readable writeable
         library kernel32,'kernel32.dll',\
                 user32,'user32.dll'
         import  kernel32,\
                 ExitProcess,'ExitProcess'
         import  user32,\
                 MessageBox,'MessageBoxA'

Пример простой программы в формате .COM.

        org      100h
 
        mov      ah,9h
        mov      dx,hello
        int      21h
        mov      ah,8h
        int      21h
        int      20h
 
 hello  db       13,10,"Hello, World!$"


Просмотров: 7194


<<< DataObjects.Net
GoAsm >>>