Краткая справка.

SASM (SimpleASM) - простая среда разработки на языке ассемблера NASM с подсветкой синтаксиса и отладчиком.

В SASM Вы можете легко разрабатывать и выполнять программы, написанные на языке ассемблера NASM. Вводите код в форму и запускайте приложение. В Windows также возможен запуск приложения в отдельном окне. Входные данные указывайте в поле "Ввод". В поле "Вывод" Вы сможете увидеть результат работы программы. При этом все сообщения и ошибки компиляции будут выводиться в форму снизу. Вы можете сохранять исходный или скомпилированный (exe) код программы в файл, а также загружать свои программы из файла. Если Вы хотите прервать выполнение программы (например, при зацикливании), нажмите кнопку "Остановить".

Программа поддерживает работу с несколькими проектами – новые файлы открываются и создаются в новых вкладках. При выходе из программы текущий набор открытых файлов сохраняется. При следующем запуске Вы сможете восстановить предыдущую сессию, нажав на кнопку "Продолжить предыдущую сессию" на стартовом окне. В параметрах можно выбрать автоматическое продолжение предыдущей сессии. Также в параметрах настраивается шрифт, положение поля "Код" и текст, отображающийся при создании нового файла. Интерфейс программы доступен на двух языках (русский и английский).

Стандартное меню "Правка" дополнено возможностью комментирования/раскомментирования выделенного куска кода и создания/удаления отступа в 4 пробела (Tab/Shift+Tab).

Начиная с версии 2.2 добавлена возможность переназначать горячие клавиши. Файл с ними находится по пути "Linux/share/sasm/keys.ini" ("/usr/share/sasm/keys.ini" при установке) в Linux и по пути "Windows/keys.ini" в Windows.

С версии 2.3 SASM поддерживает работу в двух режимах - x64 и x86, переключаться между которыми можно в настройках на вкладке "Построение". Библиотека макросов "io.inc" работает одинаково для каждого из режимов. Там же можно изменить опции ассемблера и компоновщика.

 

Библиотека макросов "io.inc"

В SASM включена библиотека макросов "io.inc". В ней есть кроссплатформенные команды ввода-вывода и макросы: CMAIN - точка входа и CEXTERN для доступа к внешним функциям на языке C. Подробнее о ее командах Вы можете узнать здесь: http://asmcourse.cs.msu.ru/?page_id=169 или ниже.

 

Имя макроса Описание макроса
PRINT_UDEC size, data

PRINT_DEC size, data

Вывод числовых данных заданных параметром data в 10-чном представлении. Параметр size – число, указывающее размерность данность в байтах; допускаются значения 1, 2, 4, 8 (x64). В качестве параметра data может выступать числовая константа, символьная константа, имя переменной, имя регистра или адресное выражение (без спецификатора размера данных в памяти). Если задается регистр большего размера, то берется заданное параметром size количество младших разрядов. PRINT_UDEC интерпретирует число как беззнаковое, PRINT_DEC — как знаковое.
PRINT_HEX size, data Аналогично предыдущему, но данные выводятся в 16-чном представлении.
PRINT_CHAR ch Печатается символ, заданный параметром ch. В качестве параметра может выступать численная константа, символьная константа, имя переменной, имя регистра или адресное выражение (без спецификатора размера данных в памяти). Печатается всегда содержимое 8 младших разрядов.
PRINT_STRING data Печать строки текста, оканчивающейся символом с кодом 0. В качестве параметра можно передавать строковую константу, имя переменной или адресное выражение (без спецификатора размера данных в памяти). В случае печати строковой константы, наличие символа с кодом 0 в конце строки необязательно.
NEWLINE Макрос переводит печать на новую строку.
GET_UDEC size, data

GET_DEC size, data

Ввод числовых данных в 10-чном представлении с клавиатуры. Размер вводимых данных ограничен параметром size, который задается числом (1, 2, 4, 8 (x64)). Введенные данные обрезаются соответствующим образом. Параметр data – либо имя переменной, либо имя регистра, либо адресное выражение (без спецификатора размера данных в памяти). Если задается регистр большего размера, то старшие разряды заполняются знаковым битом в случае GET_DEC и нулями в случае GET_UDEC. GET_UDEC считывает беззнаковое число, GET_DEC — знаковое. Запрещается использовать в качестве параметра регистр esp.
GET_HEX size, data Аналогично предыдущему, но данные задаются в 16-чном представлении с префиксом 0x.
GET_CHAR data Аналогично предыдущему, но происходит считывание одного символа, нажатие Enter не требуется. Более того, нажатие Enter будет расцениваться как ввод управляющих символов перевода строки: 0xD 0xA в ОС Windows, 0xA в ОС *nix. Если параметр – регистр, размер которого больше 1 байта, значение считанного символа будет дополнено нулями.
GET_STRING data, maxsz Ввод последовательности символов длиной не более чем (maxsz-1). Чтение последовательности останавливается на EOF или переводе строки, причем перевод строки сохраняется в буфере. В конец считанной строки добавляется символ с кодом 0. Параметр data – либо имя переменной, либо адресное выражение (без спецификатора размера данных в памяти). Параметр maxsz – регистр или числовая константа.

 

Немного об отладчике:

В качестве отладчика в SASM используется gdb. В дистрибутиве под Windows он включен в сборку. В Linux Вы должны установить этот пакет.

Внимание! Перед отладкой проверьте – все ли функции формируют фреймы (mov ebp, esp). Это правило должно быть выполнено для всех функций, включая main.

Отладка программ с макросами из "io.inc" также поддерживается.

Для запуска отладки надо выбрать в меню "Отладка" одноименный пункт или нажать F5 - подсветится текущая строка. Теперь Вы можете выполнять необходимые действия по отладке (см. пункт "Отладка" в меню).

Вы можете поставить точку останова (breakpoint) (F8), нажимая на номер строки, на которой необходимо приостановить выполнение отлаживаемой программы.
Команда "Продолжить" (F5) продолжает выполнение программы до точки останова или до конца.
Команда "Шаг с заходом" (F11) переходит к следующей инструкции, возможно с заходом в функции.
Команда "Шаг без захода" (F10) переходит к следующей инструкции без захода в функции.
Команда "Показать регистры" (Ctrl+R) открывает окно со значениями регистров процессора.
Команда "Показать память" (Ctrl+M) открывает окно для просмотра переменных (watches) и памяти по произвольному адресу. Введя в нем имя переменной, адрес или произвольное выражение и указав размер (b - byte (1), w - word (2), d - double word (4), q - quad word (8)), в поле "Значение" Вы получите значение данного выражения. Также можно добавлять переменные из кода, нажав правой кнопкой на строке с переменной и выбрав "Просмотреть". В выражениях поддерживаются любые операторы языка C (*, &, +, -, *, /, %, !, >, &, |, <<, sizeof и др.), регистры нужно вводить с $ в начале (например, $eax). Если выражение является адресом следует установить соответствующую галочку справа. Формат вывода определяется в первом выпадающем меню (формат Smart пытается подобрать наиболее подходящий вид отображения). Доступна возможность просмотра массивов - для отображения их содержимого в поле "Размер массива" укажите количество элементов в массиве. Для удаления просмотра выражения нажмите на него правой кнопкой мыши и выберите "Удалить". В Windows при просмотре переменных из секции .rodata следует отображать их как адрес.
Значения регистров и выражений из двух предыдущих команд обновляются при выполнении переходов на другую инструкцию в программе.

Также при запуске отладчика ниже лога появится поле "Команда GDB". В него Вы можете вводить любые команды, поддерживаемые отладчиком gdb и выполнять их нажатием на соответствующую кнопку или Enter. Сами команды и результаты их выполнения будут выводиться в поле лога выше. Предыдущие введенные команды доступны по нажатию клавиш вверх/вниз. При нажатии кнопки "Выполнить" или Enter с пустой строкой будет выполнена последняя введенная команда. Результаты выполнения команд синхронизируются с отображением текущей строки в поле кода и состоянием окон, отображающих регистры и память. Доступна опция "Вывести" при включении которой результат введенного выражения сразу вводится (к команде добавляется "p ") (удобно для быстрого определения значения выражения (например, как калькулятор)). В выражениях поддерживаются любые операторы языка C (*, &, +, -, *, /, %, !, >, &, |, <<, sizeof и др.), регистры нужно вводить с $ в начале (например, $eax). Например, чтобы посмотреть, что находиться на вершине стека, можно ввести выражение "*((int *)$esp)" с включенной галочкой "Вывести" или просто набрать команду "p *((int *)$esp)".
Чтобы присвоить переменной или регистру какое-то значение, надо перед присваиванием написать "p " или выполнять присваивание в режиме "Вывести". Например, "p $eax = 5".
Вы можете набрать команду "help" для получения справки по командам gdb (на английском). Также хорошее руководство по gdb и принципам отладки в нем можно посмотреть здесь: http://www.opennet.ru/docs/RUS/gdb/ (на русском).

 

Реализация:

Windows

В качестве компилятора для NASM используется nasm 2.11.02, в качестве компоновщика - gcc 4.6.2 из MinGW (gcc 4.8.1 из MinGW64 в режиме x64). Версии компиляторов и компоновщиков подобраны с учетом рекомендуемых программ для курса "Архитектура ЭВМ и язык ассемблера" 1-го потока ВМК МГУ (http://asmcourse.cs.msu.ru/?page_id=169). Также в программу включен отладчик gdb из пакета MinGW и немного измененная с учетом требований отладки библиотека макросов ввода-вывода. Под Windows SASM после установки сразу готов к работе.

Linux

Внимание! Для работы программы на Linux на Вашем компьютере должны быть установлены:

1)    nasm;

2)    gcc;

3)    gdb (для отладки).

 

Предупреждения:

Внимание! Если у Вас что-то работает не так, проверьте следующие пункты:

1)    Так как в качестве компоновщика используется gcc, то точку входа в программу следует пометить глобальной меткой _main (Windows) или main (Linux) или использовать библиотеку макросов "io.inc" с меткой CMAIN.

2)    Перед отладкой проверьте – все ли функции формируют фреймы (mov ebp, esp или mov rbp, rsp). Это правило должно быть выполнено для всех функций, включая main. При невыполнении данного условия правильная работа отладчика не гарантирована.

3)    Если все равно что-то не работает, но работало раньше, попробуйте воспользоваться кнопкой "Сбросить все настройки на начальные" в настройках на вкладке "Общие".

 

Пожелания и сообщения об ошибках отправляйте на адрес Dman1095@gmail.com или оставляйте на GitHub Issues.

Более подробную информацию, а также новые версии программы Вы можете найти на сайте http://dman95.github.io/SASM/