Создание листинга в FASM

Автор: xrnd | Рубрика: Учебный курс | 28-10-2010 | Распечатать запись Распечатать запись

Файл листинга — это очень полезная вещь. Он позволяет увидеть работу компилятора FASM как на ладони: что генерирует каждая строка исходного кода, сколько байт занимают машинные команды, какие значения присваиваются переменным. Листинг может помочь при отладке сложных программ. Также он пригодится начинающим изучать ассемблер.

Сначала необходимо скомпилировать программу — генератор листинга, которая поставляется вместе с FASM. Сделать это очень просто. Нужно открыть файл C:\FASM\TOOLS\WIN32\LISTING.ASM (у меня FASM находится в папке C:\FASM, у вас может быть по-другому) и скомпилировать его (пункт меню Run->Compile). Полученный исполняемый файл (LISTING.EXE) можно для удобства поместить в папку C:\FASM.

Если запустить этот файл из командной строки, то он сообщит способ своего использования:

Обязательными параметрами являются имена входного и выходного файлов. В качестве входного файла должен быть указан специальный файл с информацией об ассемблировании. Опция -a добавляет в листинг адреса. Опция -b позволяет ограничить максимальное количество символов в строке. Она полезна, если вы не хотите мучаться с горизонтальной прокруткой при просмотре листинга 🙂

В качестве примера создадим листинг для программы Hello, world! из части 6 учебного курса:

1
2
3
4
5
6
7
8
9
10
11
use16               ;Генерировать 16-битный код
org 100h            ;Программа начинается с адреса 100h
 
    mov dx,hello    ;В DX адрес строки.
    mov ah,9        ;Номер функции DOS.
    int 21h         ;Обращение к функции DOS.
 
    mov ax,4C00h    ;\
    int 21h         ;/ Завершение программы
;-------------------------------------------------------
hello db 'Hello, world!$'

Чтобы создать листинг, необходимо получить файл с информацией об ассемблировании. Для этого нужно выбрать в меню FASM пункт Run->Build symbols. В результате будет сгенерировано 2 файла — исполняемый файл (*.com) и файл *.fas. Он-то нам и нужен!

Запускать LISTING.EXE каждый раз вручную неудобно, поэтому лучше создать для этих целей bat-файл. Примерно такой:

1
C:\FASM\LISTING.EXE -a hello.fas hello.lst

Запустив это файл, мы сгенерируем листинг. Файл листинга — это текстовый файл, его можно просмотреть любым редактором (например, Блокнотом). Внутри файла мы увидим следующее:

1
2
3
4
5
6
7
8
9
10
11
          [0000000000000000]                                                    use16		    ;Генерировать 16-битный код
                                                                                org 100h	    ;Программа начинается с адреса 100h
 
00000000: [0000000000000100] BA 0C 01                                               mov dx,hello    ;В DX адрес строки.
00000003: [0000000000000103] B4 09                                                  mov ah,9	    ;Номер функции DOS.
00000005: [0000000000000105] CD 21                                                  int 21h	    ;Обращение к функции DOS.
 
00000007: [0000000000000107] B8 00 4C                                               mov ax,4C00h    ;\
0000000A: [000000000000010A] CD 21                                                  int 21h	    ;/ Завершение программы
                                                                                ;-------------------------------------------------------
0000000C: [000000000000010C] 48 65 6C 6C 6F 2C 20 77 6F 72 6C 64 21 24          hello db 'Hello, world!$'

Первый столбец показывает смещение, по которому записываются байты в исполняемый файл. Второй столбец — это адреса, по которым данные будут размещаться в памяти во время выполнения программы. Далее идут собственно данные, то есть коды команд, начальные значения переменных и констант, коды символов строк, — в таком виде, в каком они пишутся в файл. После данных мы видим те же самые строки, что в исходнике. Они повторяются в листинге. Для некоторых строк в файл ничего не генерируется (например, для директивы org 100h).

Комментарии: