-
Notifications
You must be signed in to change notification settings - Fork 194
/
help.html
392 lines (387 loc) · 37.5 KB
/
help.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<meta content="text/html; charset=utf-8" http-equiv="content-type">
<TITLE>Справка SASM</TITLE>
</HEAD>
<BODY style="font-size: 12pt;">
<H1>Краткая справка.</H1>
<P>
SASM (SimpleASM) - простая среда разработки для языков ассемблера NASM, MASM, GAS, FASM с подсветкой синтаксиса и отладчиком.
</P>
<P>
В SASM Вы можете легко разрабатывать и выполнять программы, написанные на языках ассемблера NASM, MASM, GAS, FASM. Вводите код в форму и запускайте приложение.
В Windows также возможен запуск приложения в отдельном окне. Входные данные указывайте в поле "Ввод". В поле "Вывод" Вы сможете
увидеть результат работы программы. При этом все сообщения и ошибки компиляции будут выводиться в форму снизу. Вы можете
сохранять исходный или скомпилированный (exe) код программы в файл, а также загружать свои программы из файла.
Если Вы хотите прервать выполнение программы (например, при зацикливании), нажмите кнопку "Остановить".
</P>
<P>
Программа поддерживает работу с несколькими проектами – новые файлы открываются и создаются в новых
вкладках. При выходе из программы текущий набор открытых файлов сохраняется. При следующем запуске Вы сможете восстановить
предыдущую сессию, нажав на кнопку "Продолжить предыдущую сессию" на стартовом окне. В параметрах можно
выбрать автоматическое продолжение предыдущей сессии. Также в параметрах настраивается шрифт, положение поля "Код" и текст,
отображающийся при создании нового файла. Интерфейс программы доступен на двух языках (русский и английский).
</P>
<P>
Стандартное меню "Правка" дополнено возможностью комментирования/раскомментирования выделенного куска кода и
создания/удаления отступа в 4 пробела (Tab/Shift+Tab).
</P>
<P>
Начиная с версии 2.2 добавлена возможность переназначать горячие клавиши. Файл с ними находится по пути "Linux/share/sasm/keys.ini" ("/usr/share/sasm/keys.ini" при установке) в Linux и по пути "Windows/keys.ini" ("{папка с программой при установке}/keys.ini") в Windows.
</P>
<P>
С версии 2.3 SASM поддерживает работу в двух режимах - x64 и x86, переключаться между которыми можно в настройках на вкладке "Построение". Библиотека макросов "io.inc" работает одинаково для каждого из режимов. Там же можно изменить опции ассемблера и компоновщика. Более подробная информация об этом находится в разделе "Настройка системы сборки".
</P>
<P>
В версиях программы, начиная с 3.0, Вы можете выбрать один из четырех ассемблеров NASM, MASM, GAS, FASM в настройках на вкладке "Построение". Там же выбирается ассемблер и компоновщик (путь до них Вы можете указать в соответствующих полях). Таким образом SASM можно настроить на работу с любым ассемблером, задав пути к ассемблеру и, если нужно, компоновщику и указав необходимые опции ассемблирования и компоновки. Однако отладка и подсветка синтаксиса при таком подходе могут работать не совсем правильно. Чтобы полностью реализовать поддержку нового ассемблера, нужно написать реализацию абстрактного класса Assembler по аналогии с уже реализованными ассемблерами.
</P>
<P>
Все ассемблеры (кроме MASM) включены в SASM (на Linux они должны быть установлены) и ими можно пользоваться сразу после их выбора. Ассемблер MASM невозможно включить в сборку из-за его лицензии. Чтобы им воспользоваться, Вы должны установить MASM на Ваш компьютер с сайта <A HREF="http://www.masm32.com/">http://www.masm32.com/</A> и указать пути до ассемблера (ml.exe, путь обычно "C:/masm32/bin/ml.exe") и до компоновщика (link.exe, путь обычно "C:/masm32/bin/link.exe") в соответствующих полях на вкладке "Построение".
</P>
<P>
В SASM добавлена папка для include файлов - "Linux/share/sasm/include/" ("/usr/share/sasm/include/" при установке) в Linux и "Windows/include" ("{папка с программой при установке}/include/") в Windows. Однако для MASM эта возможность не работает - там следует указывать до include файлов абсолютные пути.
</P>
<P>
</P>
<h2>Примеры кода</h2>
<P>
Работоспособные примеры кода для разных ассемблеров, включая примеры работы с фунциями ввода-вывода и макросами "io.inc",
содержатся в папке Projects по пути, где установлен SASM (обычно C:\Program Files (x86)\SASM на Windows, /usr/share/sasm на Linux).
</P>
<P>
</P>
<h2>Библиотека макросов "io.inc" для NASM</h2>
<P>
В SASM включена библиотека кроссплатформенных макросов ввода-вывода "io.inc". Для её использования в начале программы нужно добавить директиву %include "io.inc" (%include "io64.inc" для 64-битного ассемблера).
Подробнее о ее командах Вы можете узнать здесь: <A HREF="http://asmcourse.cs.msu.ru/?page_id=169">http://asmcourse.cs.msu.ru/?page_id=169</A> или ниже.
<P>
</P>
</P>
<table border="1" cellspacing="0" cellpadding="0">
<thead>
<tr>
<td width="242">Имя макроса</td>
<td width="390">Описание макроса</td>
</tr>
</thead>
<tbody>
<tr>
<td width="242" valign="top"><a name="PRINT_UDEC">PRINT_UDEC</a> <em>size, data</em></p>
<p><a name="PRINT_DEC">PRINT_DEC</a><em> size, data</em></td>
<td width="390" valign="top">Вывод числовых данных заданных параметром <em>data</em> в 10-чном представлении. Параметр <em>size</em> – число, указывающее размерность данность в байтах; допускаются значения 1, 2, 4, 8 (x64). В качестве параметра <em>data</em> может выступать числовая константа, символьная константа, имя переменной, имя регистра или адресное выражение (без спецификатора размера данных в памяти). Если задается регистр большего размера, то берется заданное параметром <em>size</em> количество младших разрядов. PRINT_UDEC интерпретирует число как беззнаковое, PRINT_DEC — как знаковое.</td>
</tr>
<tr>
<td width="242" valign="top"><a name="PRINT_HEX">PRINT_HEX</a> <em>size, data</em></td>
<td width="390" valign="top">Аналогично предыдущему, но данные выводятся в 16-чном представлении.</td>
</tr>
<tr>
<td width="242" valign="top"><a name="PRINT_CHAR">PRINT_CHAR</a> <em>ch</em></td>
<td width="390" valign="top">Печатается символ, заданный параметром <em>ch</em>. В качестве параметра может выступать численная константа, символьная константа, имя переменной, имя регистра или адресное выражение (без спецификатора размера данных в памяти). Печатается всегда содержимое 8 младших разрядов.</td>
</tr>
<tr>
<td width="242" valign="top"><a name="PRINT_STRING">PRINT_STRING</a> <em>data</em></td>
<td width="390" valign="top">Печать строки текста, оканчивающейся символом с кодом 0. В качестве параметра можно передавать строковую константу, имя переменной или адресное выражение (без спецификатора размера данных в памяти). В случае печати строковой константы, наличие символа с кодом 0 в конце строки необязательно.</td>
</tr>
<tr>
<td width="242" valign="top"><a name="NEWLINE">NEWLINE</a></td>
<td width="390" valign="top">Макрос переводит печать на новую строку.</td>
</tr>
<tr>
<td width="242" valign="top"><a name="GET_UDEC">GET_UDEC</a> <em>size</em>, <em>data</em></p>
<p><a name="GET_DEC">GET_DEC</a> <em>size</em>, <em>data</em></td>
<td width="390" valign="top">Ввод числовых данных в 10-чном представлении с клавиатуры. Размер вводимых данных ограничен параметром <em>size</em>, который задается числом (1, 2, 4, 8 (x64)). Введенные данные обрезаются соответствующим образом. Параметр <em>data</em> – либо имя переменной, либо имя регистра, либо адресное выражение (без спецификатора размера данных в памяти). Если задается регистр большего размера, то старшие разряды заполняются знаковым битом в случае GET_DEC и нулями в случае GET_UDEC. GET_UDEC считывает беззнаковое число, GET_DEC — знаковое. Запрещается использовать в качестве параметра регистр esp.</td>
</tr>
<tr>
<td width="242" valign="top"><a name="GET_HEX">GET_HEX</a> <em>size, data</em></td>
<td width="390" valign="top">Аналогично предыдущему, но данные задаются в 16-чном представлении с префиксом 0x.</td>
</tr>
<tr>
<td width="242" valign="top"><a name="GET_CHAR">GET_CHAR</a> <em>data</em></td>
<td width="390" valign="top">Аналогично предыдущему, но происходит считывание одного символа, нажатие Enter не требуется. Более того, нажатие Enter будет расцениваться как ввод управляющих символов перевода строки: 0xD 0xA в ОС Windows, 0xA в ОС *nix. Если параметр – регистр, размер которого больше 1 байта, значение считанного символа будет дополнено нулями.</td>
</tr>
<tr>
<td width="242" valign="top"><a name="GET_STRING">GET_STRING</a> <em>data, maxsz</em></td>
<td width="390" valign="top">Ввод последовательности символов длиной не более чем <em>(maxsz-1)</em>. Чтение последовательности останавливается на EOF или переводе строки, причем перевод строки сохраняется в буфере. В конец считанной строки добавляется символ с кодом 0. Параметр <em>data</em> – либо имя переменной, либо адресное выражение (без спецификатора размера данных в памяти). Параметр <em>maxsz</em> – регистр или числовая константа.</td>
</tr>
</tbody>
</table>
<P>
При вызовах макросов значения всех регистров общего назначения не изменяются.
</P>
<P>
</P>
<h2>Функции ввода-вывода для NASM (x86)</h2>
<P>
Наряду с макросами, другим простым вариантом ввода-вывода в NASM являются соответствующие макросам вспомогательные функции ввода-вывода, доступные в SASM (работают только для x86 NASM проектов).
Для их использования необходимо объявить нужные функции с помощью директивы extern <имя функции>, а затем размещать аргументы в регистрах в соответствии
с таблицей ниже и вызывать функции с помощью инструкции call.
Подробнее о функциях ввода-вывода Вы можете узнать здесь: <A HREF="http://asmcourse.cs.msu.ru/?page_id=2611">http://asmcourse.cs.msu.ru/?page_id=2611</A> или ниже.
<P>
</P>
</P>
<table border="1" cellspacing="0" cellpadding="0">
<thead>
<tr>
<td width="242">Имя функции</td>
<td width="390">EAX</td>
<td width="390">EDX</td>
</tr>
</thead>
<tbody>
<tr>
<td width="242" valign="top">io_get_dec<br>io_get_udec<br>io_get_hex</td>
<td width="200" valign="top">выход: число</td>
<td width="200" valign="top"></td>
</tr>
<tr>
<td width="242" valign="top">io_get_char</td>
<td width="200" valign="top">выход: символ</td>
<td width="200" valign="top"></td>
</tr>
<tr>
<td width="242" valign="top">io_get_string</td>
<td width="200" valign="top">вход: адрес</td>
<td width="200" valign="top">вход: размер</td>
</tr>
<tr>
<td width="242" valign="top">io_print_dec<br>io_print_udec<br>io_print_hex</td>
<td width="200" valign="top">вход: число</td>
<td width="200" valign="top"></td>
</tr>
<tr>
<td width="242" valign="top">io_print_char</td>
<td width="200" valign="top">вход: символ</td>
<td width="200" valign="top"></td>
</tr>
<tr>
<td width="242" valign="top">io_print_string</td>
<td width="200" valign="top">вход: адрес</td>
<td width="200" valign="top"></td>
</tr>
<tr>
<td width="242" valign="top">io_newline</td>
<td width="200" valign="top"></td>
<td width="200" valign="top"></td>
</tr>
</tbody>
</table>
<P>
При вызовах функций значения регистров EBX, EBP, ESP, EDI, ESI не изменяются, значения остальных регистров могут быть изменены.
</P>
<P>
</P>
<h2>Немного об отладчике:</h2>
<P>
В качестве отладчика в SASM используется gdb. В дистрибутиве под Windows он
включен в сборку. В Linux Вы должны установить этот пакет.
</P>
<P>
Внимание! Перед отладкой проверьте – все ли функции формируют фреймы (mov ebp, esp). Это правило должно быть выполнено для всех функций, включая main.
<BR>
Также если в качестве компоновщика используется gcc, то точку входа в программу следует пометить глобальной меткой main (_main для проектов x86 GAS/FASM на Windows).
Если же Вы используете другой компоновщик (например, ld), то точка входа должна быть помечена меткой start. Никакие другие метки для точки входа использовать нельзя.
<BR>
Код программы должен содержаться только в секции ".text" (".code" для MASM). При использовании других имен для секции кода правильная работа отладчика не гарантирована.
<P>
Отладка программ с макросами из "io.inc" также поддерживается.
</P>
<P>
Для запуска отладки надо выбрать в меню "Отладка" одноименный пункт или нажать F5 - подсветится текущая строка.
Теперь Вы можете выполнять необходимые действия по отладке (см. пункт "Отладка" в меню).
</P>
<P>
Вы можете поставить точку останова (breakpoint) (F8), нажимая на номер строки, на которой необходимо приостановить выполнение отлаживаемой программы.
<BR>
Команда "Продолжить" (F5) продолжает выполнение программы до точки останова или до конца.
<BR>
Команда "Приостановить" (F5) приостанавливает выполнение программы (удобно, например, если программа зациклилась).
<BR>
Команда "Шаг с заходом" (F11) переходит к следующей инструкции, возможно с заходом в функции.
<BR>
Команда "Шаг без захода" (F10) переходит к следующей инструкции без захода в функции.
<BR>
Команда "Показать регистры" (Ctrl+R) открывает окно со значениями регистров процессора.
<BR>
Команда "Показать память" (Ctrl+M) открывает окно для просмотра переменных (watches) и памяти по произвольному адресу.
Введя в нем имя переменной, адрес или произвольное выражение и указав размер (b - byte (1), w - word (2), d - double word (4), q - quad word (8)),
в поле "Значение" Вы получите значение данного выражения.
Также можно добавлять переменные из кода, нажав правой кнопкой на строке с переменной и выбрав "Просмотреть".
В выражениях поддерживаются любые операторы языка C (*, &, +, -, *, /, %, !, >, &, |, <<, sizeof и др.), регистры нужно вводить с $ в начале (например, $eax).
Если выражение является адресом следует установить соответствующую галочку справа.
Формат вывода определяется в первом выпадающем меню (формат Smart пытается подобрать наиболее подходящий вид отображения).
Доступна возможность просмотра массивов - для отображения их содержимого в поле "Размер массива" укажите количество элементов в массиве.
Для удаления просмотра выражения нажмите на него правой кнопкой мыши и выберите "Удалить".
В Windows при просмотре переменных из секции .rodata следует отображать их как адрес.
<BR>
Значения регистров и выражений из двух предыдущих команд обновляются при выполнении переходов на другую инструкцию в программе.
</P>
Также при запуске отладчика ниже лога появится поле "Команда GDB". В него Вы можете вводить любые команды, поддерживаемые отладчиком gdb и выполнять
их нажатием на соответствующую кнопку или Enter. Сами команды и результаты их выполнения будут выводиться в поле лога выше.
Предыдущие введенные команды доступны по нажатию клавиш вверх/вниз. При нажатии кнопки "Выполнить" или Enter с пустой строкой
будет выполнена последняя введенная команда. Результаты выполнения команд синхронизируются с отображением текущей строки в поле кода и
состоянием окон, отображающих регистры и память. Доступна опция "Вывести" при включении которой результат введенного выражения сразу вводится (к команде
добавляется "p ") (удобно для быстрого определения значения выражения (например, как калькулятор)).
В выражениях поддерживаются любые операторы языка C (*, &, +, -, *, /, %, !, >, &, |, <<, sizeof и др.), регистры нужно вводить с $ в начале (например, $eax).
Например, чтобы посмотреть, что находиться на вершине стека, можно ввести выражение "*((int *)$esp)" с включенной галочкой "Вывести" или
просто набрать команду "p *((int *)$esp)".
<BR>
Чтобы присвоить переменной или регистру какое-то значение, надо перед присваиванием написать "p " или выполнять присваивание в режиме "Вывести".
Например, "p $eax = 5".
<BR>
Вы можете набрать команду "help" для получения справки по командам gdb (на английском). Также хорошее руководство по gdb и принципам отладки в нем можно
посмотреть здесь: <A HREF="http://www.opennet.ru/docs/RUS/gdb/">http://www.opennet.ru/docs/RUS/gdb/</A> (на русском).
<P> </P>
<h2>Реализация:</h2>
<H4>Windows</H4>
<P>В качестве ассемблера для NASM используется nasm 2.15.05, в качестве компоновщика - gcc 4.6.2 из MinGW (gcc 4.8.1 из MinGW64 в режиме x64) или ld 2.22 из MinGW (ld 2.23.2 из MinGW64 в режиме x64).
<BR>
Версии компиляторов и компоновщиков подобраны с учетом рекомендуемых программ для курса "Архитектура ЭВМ и язык ассемблера" 1-го потока ВМК МГУ (<A HREF="http://asmcourse.cs.msu.ru/?page_id=169">http://asmcourse.cs.msu.ru/?page_id=169</A>).
<BR>
Еще в программу включен отладчик gdb версии 7.4 из пакета MinGW (gdb 7.6 из MinGW64 в режиме x64) и немного измененная с учетом требований отладки библиотека макросов ввода-вывода.
</P>
<P>
Также в SASM, начиная с версии 3.0, включены fasm 1.73.30 и gas 2.23.1 из MinGW (gas 2.23.2 из MinGW64).
</P>
<P>
Ассемблер MASM невозможно было включить в сборку из-за его лицензии. Чтобы им воспользоваться, Вы должны установить MASM на Ваш компьютер с сайта <A HREF="http://www.masm32.com/">http://www.masm32.com/</A> и указать пути до ассемблера (ml.exe, путь обычно "C:/masm32/bin/ml.exe") и до компоновщика (link.exe, путь обычно "C:/masm32/bin/link.exe") в соответствующих полях на вкладке "Построение".
</P>
<P>
Под Windows SASM после установки сразу готов к работе.
</P>
<H4>Linux</H4>
<P>
Внимание! Для работы программы на Linux на Вашем компьютере должны быть установлены:
</P>
<P STYLE="margin-left: 0.5in; text-indent: -0.25in">1)<SPAN STYLE="font-variant: normal">
nasm или gas (если их планируется использовать, fasm уже включён в сборку);</P>
<P STYLE="margin-left: 0.5in; text-indent: -0.25in">2)<SPAN STYLE="font-variant: normal">
gcc;</P>
<P STYLE="margin-left: 0.5in; text-indent: -0.25in">3)<SPAN STYLE="font-variant: normal">
gdb (для
отладки).</P>
<P> </P>
<h2>Настройка системы сборки:</h2>
<P>В SASM присутствует гибкая система сборки программ. Помимо стандартных настроек режимов и ассемблеров, можно задавать пути к ассемблерам и компоновщикам и опции для них в ручном режиме. Стандартные значения при этом могут быть восстановлены переключением на другой ассемблер/режим и обратно.</P>
<P>Все настройки выполняются на вкладке "Построение".</P>
<P>Пути к ассемблеру и компоновщику задаются в полях "Ассемблер" и "Компоновщик" соответственно.</P>
<P>Флажок "Не запускать компоновщик" используется, если для построения программы запускать компоновщик не нужно: ассемблер генерирует исполняемый файл. Может быть полезен, например, в одном из режимов FASM ниже.</P>
<P>В полях "Опции ассемблера" и "Опции компоновщика" задаются опции, передаваемые ассемблеру и компоновщику соответственно. При этом для обобщенности опций задаются переменные, которые при передачи опций ассемблеру или компоновщику будут заменены на имена соответствующих файлов.</P>
<P>В поле "Имя объектного файла" можно задать имя временного выходного объектного файла, на которое будет заменена переменная $PROGRAM.OBJ$. Данная опция нужна для некоторых компоновщиков, определяющих формат объектного файла по его расширению (например, golink).</P>
<P>Перечислим данные переменные:</P>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="242" valign="top">$SOURCE$</td>
<td width="390" valign="top">Входной файл с исходным кодом</td>
</tr>
<tr>
<td width="242" valign="top">$LSTOUTPUT$</td>
<td width="390" valign="top">Выходной файл - листинг ассемблера, необходимый для целей отладки</td>
</tr>
<tr>
<td width="242" valign="top">$PROGRAM.OBJ$</td>
<td width="390" valign="top">Выходной объектный файл</td>
</tr>
<tr>
<td width="242" valign="top">$MACRO.OBJ$</td>
<td width="390" valign="top">Файл, используемый библиотекой макросов "io.inc" для NASM</td>
</tr>
<tr>
<td width="242" valign="top">$PROGRAM$</td>
<td width="390" valign="top">Выходной исполняемый файл</td>
</tr>
</tbody>
</table>
<P>Таким образом, задавая опции на вкладке "Построение" можно менять ассемблеры и компоновщики, а также устанавливать различные конфигурации сборки программ.</P>
<H4>Дополнительные конфигурации компоновщиков:</H4>
<P>Иногда необходимо использовать компоновщик ld вместо gcc (например, чтобы компилировать программы с точкой входа start).</P>
<P>В Windows для этого нужно заменить конец в пути к компоновщику с "MinGW/bin/gcc.exe" на "MinGW/mingw32/bin/ld.exe" ("MinGW64/bin/gcc.exe" на "MinGW64/x86_64-w64-mingw32/bin/ld.exe" для 64-битного режима).</P>
<P>В Linux просто заменить "gcc" на "ld".</P>
<P>При этом опции компоновщика следует заменить на "$PROGRAM.OBJ$ -g -o $PROGRAM$".</P>
<P> </P>
<P>Также SASM частично поддерживает компоновщик golink (только сборка и запуск, отладка не поддерживается в силу особенностей компоновщика и использования GDB в качестве отладчика).</P>
<P>Для его включения надо указать путь к исполняемому файлу golink.exe и опции компоновки "$PROGRAM.OBJ$ /fo $PROGRAM$ /console /debug coff /entry:<YOUR ENTRY> <DLLS>".</P>
<P>Также следует указать в поле "Имя объектного файла" "program.obj".</P>
<H4>Дополнительные конфигурации ассемблеров:</H4>
<P>Опишем конфигурации в виде таблицы. Первый столбец указывает, для какого ассемблера конфигурация. Второй - опции ассемблера. Третий - компоновщик (стандартный gcc с его опциями, вышеописанный ld, без компоновки, link.exe для MASM с соответствующими опциями). Если текст указан в фигурных скобках, можно выбрать любой вариант из разделённых вертикальной чертой.</P>
<TABLE border="1" cellspacing="0" cellpadding="0">
<THEAD>
<TR>
<TD>Ассемблер</TD>
<TD>Опции</TD>
<TD>Компоновщик</TD>
</TR>
</THEAD>
<TBODY>
<TR>
<TD>NASM</TD>
<TD>-f {win32|win64|elf} $SOURCE$ -l $LSTOUTPUT$ -o $PROGRAM.OBJ$</TD>
<TD>{gcc|ld|golink}</TD>
</TR>
<TR>
<TD>GAS</TD>
<TD>$SOURCE$ -o $PROGRAM.OBJ$ --{32|64} -a=$LSTOUTPUT$</TD>
<TD>{gcc|ld}</TD>
</TR>
<TR>
<TD>FASM</TD>
<TD>$SOURCE$ $PROGRAM.OBJ$ -s $LSTOUTPUT$</TD>
<TD>{gcc|ld|golink}</TD>
</TR>
<TR>
<TD>FASM</TD>
<TD>$SOURCE$ $PROGRAM$ -s $LSTOUTPUT$</TD>
<TD>Без компоновки</TD>
</TR>
<TR>
<TD>MASM</TD>
<TD>/nologo /Sn /Sa /c /coff /Fo$PROGRAM.OBJ$ /Fl$LSTOUTPUT$ $SOURCE$</TD>
<TD>link.exe</TD>
</TR>
</TBODY>
</TABLE>
<P> </P>
<h2>Устранение неполадок:</h2>
<P>
<B>
Внимание! Если у Вас что-то
работает не так, проверьте следующие пункты:
</B>
</P>
<P STYLE="margin-left: 0.5in; text-indent: -0.25in">1)<SPAN STYLE="font-variant: normal">
Если в качестве компоновщика используется gcc, то точку входа в программу следует пометить глобальной (global) меткой main (_main для проектов x86 GAS/FASM на Windows). Если же Вы используете другой компоновщик (например, ld), то точка входа должна быть помечена меткой start. Внимание! Никакие другие метки для точки входа использовать нельзя.
</P>
<P STYLE="margin-left: 0.5in; text-indent: -0.25in">3)<SPAN STYLE="font-variant: normal">
Перед отладкой проверьте – все ли функции формируют фреймы (mov ebp, esp или mov rbp, rsp). Это правило должно быть выполнено для всех функций, включая main.
При невыполнении данного условия правильная работа отладчика не гарантирована.
</P>
<P STYLE="margin-left: 0.5in; text-indent: -0.25in">4)<SPAN STYLE="font-variant: normal">
Код программы должен содержаться только в секции ".text" (".code" для MASM). При использовании других имен для секции кода правильная работа отладчика не гарантирована.
</P>
<P STYLE="margin-left: 0.5in; text-indent: -0.25in">5)<SPAN STYLE="font-variant: normal">
Если необходимо включить в программу другой файл директивой include, его следует разместить в папке для include файлов - "Linux/share/sasm/include/" ("/usr/share/sasm/include/" при установке) в Linux и "Windows/include" ("{папка с программой при установке}/include/") в Windows.
Однако, если файл не находится (MASM или какие-либо нестандартные конфигурации), то в любом случае можно указать полный путь до файла.
</P>
<P STYLE="margin-left: 0.5in; text-indent: -0.25in">6)<SPAN STYLE="font-variant: normal">
Если возникают ошибки при сборке, проверьте опции на вкладке "Построение" в настройках. Для устранения ошибок, можно попробовать установить одну из альтернативных конфигураций системы сборки из пункта "Настройка системы сборки" данного руководства.
Также можно сконфигурировать SASM для работы с нестандартными ассемблерами или компоновщиками, задав пути и опции для них. Описание формата опций также находится в пункте "Настройка системы сборки".
</P>
<P STYLE="margin-left: 0.5in; text-indent: -0.25in">7)<SPAN STYLE="font-variant: normal">
Если все равно что-то не работает, но работало раньше, попробуйте воспользоваться кнопкой "Сбросить все настройки на начальные" в настройках на вкладке "Общие".
</P>
<P> </P>
<P>
Пожелания и сообщения об ошибках отправляйте на адрес <a href="mailto:[email protected]">[email protected]</a> или оставляйте на <a href="https://github.com/Dman95/SASM/issues">GitHub Issues</a>.
</P>
<P>
Более подробную информацию, а также новые версии программы Вы можете найти на сайте <a href="http://dman95.github.io/SASM/">http://dman95.github.io/SASM/</a>
</P>
</BODY>
</HTML>