admin / 13.01.2018

Программа на ассемблере

Кыргызский Государственный Национальный Университет

Институт Интеграции Международных Образовательных программ

Кыргызско-Американский Факультет Компьютерных Информационных Систем и ИНТЕРНЕТ (КАФ-ИНТЕРНЕТ)

Курсовой проект

(Организация ЭВМ)

тема

Разработка программы на Ассемблере.

Выполнили: студенты группы КИС 2 – 98

Вершинин АА Исманов АА

Проверил: преподаватель Кочетов ОП

Бишкек 2001

СОДЕРЖАНИЕ

ВВЕДЕНИЕ…………………………………………………………………3

АССЕМБЛЕР. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММЫ…………………4

Содержание

ФОРМАТ КОМАНД И ИХ КЛАССИФИКАЦИЯ ………………………….5

НЕКОТОРЫЕ ОПЕРАТОРЫ, ПРЕДОПРЕДЕЛЁННЫЕ ИМЕНА, ДИРЕКТИВЫ И КОМАНДЫ   АССЕМБЛЕРА 80X86(8088) ……………..7

КОМАНДЫ ПЕРЕСЫЛКИ …………………………………………………11

АРИФМЕТИЧЕСКИЕ КОМАНДЫ ………………………………………..12

ЛОГИЧЕСКИЕ КОМАНДЫ И КОМАНДЫ СДВИГА ……………………14

КОМАНДЫ УПРАВЛЕНИЯ МИКРОПРОЦЕССОРОМ …………………18

ПРИМЕЧАНИЯ………………………………………………………………20

ОБЩИЙ РАЗДЕЛ…………………………………………………………21

1.1.        Технико-математическое описание задачи……….………………….21

1.2.        Требования к функциональным характеристикам…………………..23

1.3.        Требования к техническим и программным средствам………….… 25

1.3.1.     Обоснования выбора языка программирования……………………. 26

СПЕЦИАЛЬНЫЙ РАЗДЕЛ…………………………………………………………………. 28

2.1. Постановка задачи……………………………………………………..  28

2.2. Описание структуры программы……………………………….…..…  30

2.3. Описание алгоритма решения задачи………………………….……….32

2.4. Отладка и тестирование……………………………………….……….  34

2.5. Инструкция к пользователю………………………………….………..  35

2.6. Заключение о результатах проектируемой задачи………….………..  36

ПРИЛОЖЕНИЕ 1 (Системы счисления)…………………………………..  37

ПРИЛОЖЕНИЕ 2 (Структурная схема микропроцессора)..……………..  44

ПРИЛОЖЕНИЕ 3 (Основные положения алгебры логики)…….………..  59

СПИСОК ЛИТЕРАТУРЫ…………………………………………….…. 30

ВВЕДЕНИЕ

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

В связи с этим также стремительно развивался и рынок программных тестирующих средств. На рынке существует огромное количество отличных диагностических программ, написанных большими корпорациями: такими как Symantec inc., APS (Advanced Personal Systems), Microsoft и т.д., но все существующие диагностирующие программы написаны на языках высокого уровня, а значит не достаточно быстры и надёжны.

Автор проекта не берётся конкурировать с огромными гигантами по количеству выполняемых этими программами тестов в силу того, что это бессмысленно. Была предпринята попытка написать более надежную, быструю диагностическую программу с использованием машинно-ориентированного языка программирования – Ассемблер.

 

 

АССЕМБЛЕР. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММЫ.

Язык программирования наиболее полно учитывающий особенности "родного" микропроцессора и содержащий мнемонические обозначения машинных команд называется Ассемблером. Программа, написанная на Ассемблере называется исходной программой. Далее остановимся на версии, называемой Турбо Ассемблер.

Разработка программы на Ассемблере состоит из следующих этапов:

  • 1) Составление алгоритма в виде блок-схемы или структурного описания,
  • 2) Ввод в ЭВМ текста исходной программы PROG.ASM с помощью редактора текстов. Имя PROG может быть произвольным, а расширение ASM — обязательно,
  • 3) Перевод (трансляция или ассемблирование) исходной программы в машинные коды с помощью транслятора TASM.EXE. На этом этапе получается промежуточный продукт PROG.OBJ (объектный код). Выявленные при этом синтаксические и орфографические ошибки исправляются повтором пп.2 и 3,
  • 4) Преобразование с помощью программы TLINK.EXE объектного кода PROG.OBJ в выполнимый код PROG.EXE или PROG.COM.
  • 5) Выполнение программы и ее отладка начиная с п.1, если встретились логические ошибки.

Текст  программы на Ассемблере содержит следующие операции:

  • а) команды или инструкции,
  • б) директивы или псевдооператоры,
  • в) операторы,
  • г) предопределенные имена.

Действия обусловленные операциями перечисленными в пп.б,в,г выполняются на этапе трансляции, т.е. являются командами Ассемблеру. Операции, называемые командами или инструкциями выполняются во время выполнения программы, т.е. являются командами микропроцессору.

ФОРМАТ КОМАНД И ИХ КЛАССИФИКАЦИЯ

Инструкция записывается на отдельной строке и включает до четырех полей, необязательные из которых выделены [ ]:

Метка или символический адрес содержит до 31 символа из букв цифр и знаков ? @ . _ $. Причем цифра не должна стоять первой, а точка, если есть должна быть первой.

Мнемоника — сокращенное обозначение кода операции (КОП) команды, например мнемоника ADD обозначает сложение (addition).

Операндами могут быть явно или неявно задаваемые двоичные наборы, над которыми производятся операции.Операнды приводятся в одной из четырех систем счисления и должны оканчиваться символом b(B), o(O), d(D), h(H) для 2, 8, 10 или 16-ной СС. К шестнадцатиричному числу добавляется слева ноль, если оно начинается с буквы.

Система команд может быть классифицирована по трем основным признакам —

  • длина команды или число занимаемых ею байтов,
  • функциональное назначение и
  • способ адресации.

Для МП 1810ВМ86 (8086) команда занимает от одного до шести байтов. Первым байтом команды всегда является код операции, например код команды INT XXh равен CD(HEX).

По функциональному признаку инструкции можно разбить на пять больших групп:

  • 1) команды пересылки данных,
  • 2) арифметические команды,
  • 3) логические команды,
  • 4) команды переходов и
  • 5) команды управления.

Существует пять основных способов адресации:

  • регистровая,
  • непосредственная,
  • прямая,
  • косвенная и
  • стековая.

Большинство остальных способов адресации являются комбинациями или видоизменениями перечисленнных.

В первом случае операнд(ы) располагаются в регистрах микропроцессора (МП), например по команде MOV AX,CX пересылается содержимое CX в AX.

При непосредственной адресации операнд располагается в памяти непосредственно за КОП, инструкция MOV AL,0f5h записывает число 245(f5) в регистр AL.

В случае прямой адресации за КОП следует не сам операнд, а адрес ячейки памяти или внешнего устройства, например команда IN AL,40h вводит байт данных из внешнего устройства с адресом 40h.

Косвенная адресация отличается от регистровой тем, что в регистре хранится адрес операнда, т.е. по команде MOV AL,[BX] в аккумулятор al будет записано число из ячейки памяти с адресом, хранящимся в регистре BX.

Стековая адресация производится к операндам расположенным в области памяти, называемой стек.

НЕКОТОРЫЕ ОПЕРАТОРЫ, ПРЕДОПРЕДЕЛЁННЫЕ ИМЕНА, ДИРЕКТИВЫ И КОМАНДЫ   АССЕМБЛЕРА 80X86(8088)

ПРЕДОПРЕДЕЛЕННЫЕ ИМЕНА

1. $ — программный счетчик. Этот символ отмечает текущий адрес в текущем сегменте. Полезен при определении длины цепочек байтов или строк.

 

text  DB 'This string has NN letters'

NN = $ — text;  NN = длине строки text (количеству байтов

в этой строке). Не путать часть строки '..NN..' и константу NN!

2. @data — адрес начала сегмента данных.

….

mov ax,@data

mov ds,ax;

в сегментном регистре DS теперь адрес сегмента данных.

3. ??date, ??time, ??filename — эти имена во время трансляции заменяются, соответственно на текущие дату, время и имя файла в формате ASCII.

ОПЕРАТОРЫ

1. () — скобки, определяют порядок вычислений

2. [] — например [BX] означает содержимое ячейки памяти с адресом в регистре bx. Признак косвенной адресации.

3. +, -, *, / — операторы сложения, вычитания, умножения и деления.

   mov ax, (2 * 3 + 8 / 2) — 2; в регистр ax будет помещено число 8.

4. MOD — деление по модулю. Даёт остаток.

5. SHL,SHR — сдвиг операнда влево, вправо.

   mov si, 01010101b SHR 3; в регистр SI будет загружено число 0Ah (00001010).

6. NOT — побитовая инверсия.

7. AND,OR,XOR — операции "И","ИЛИ","ИСКЛ.ИЛИ".

   mov dl, (10d OR 5d) XOR 7d; (dl) будет равно 8.

8. :  — переназначение сегмента.

mov dl,[es:bx]; поместить в dl байт данных из сегмента es и отстоящий от его начала на (bx) байтов (смещение).




Обратная связь

ПОЗНАВАТЕЛЬНОЕ

Сила воли ведет к действию, а позитивные действия формируют позитивное отношение


Как определить диапазон голоса — ваш вокал


Как цель узнает о ваших желаниях прежде, чем вы начнете действовать. Как компании прогнозируют привычки и манипулируют ими


Целительная привычка


Как самому избавиться от обидчивости


Противоречивые взгляды на качества, присущие мужчинам


Тренинг уверенности в себе


Вкуснейший «Салат из свеклы с чесноком»


Натюрморт и его изобразительные возможности


Применение, как принимать мумие? Мумие для волос, лица, при переломах, при кровотечении и т.д.


Как научиться брать на себя ответственность


Зачем нужны границы в отношениях с детьми?


Световозвращающие элементы на детской одежде


Как победить свой возраст? Восемь уникальных способов, которые помогут достичь долголетия


Как слышать голос Бога


Классификация ожирения по ИМТ (ВОЗ)


Глава 3. Завет мужчины с женщиной


Оси и плоскости тела человека — Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д.


Отёска стен и прирубка косяков — Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу.


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

Пример выполнения программы в среде разработки RadASM ассемблер Masm32

Лабораторная работа №5

Ввод и вывод элементов массива с преобразованием во внутреннее представление.

Цель работы

Цель лабораторной работы – изучение специальных подпрограмм библиотеки MASM32.lib организации ввода-вывода для консольного режима, изучение команд обработки строк для организации циклической обработки.

Предмет исследования

§ Структура программы на языке ассемблера.

§ Арифметические команды.

§ Задание переменных.

§ Организация ввода-вывода данных.

§ Программа решения задачи в виде консольного приложения.

Контрольные вопросы

1. Структура программы на ассемблере.

2. Назначение арифметических команд.

3. Назначение команд INC и DEC .

4. Типы форматов хранения чисел.

5. Назначение команд ADD и SUB.

6. Вспомогательные команды для арифметических вычислений.

Задание к работе

Создать консольную программу, которая определяет число вызовов таймера. В программе должны быть:

§ строка с сообщением «число вызовов таймера»

§ возможность задания координат и цвета сообщения.

Цвет задаем, используя строки FOREGROUND_BLUE equ 1h ; синий цвет букв и далее. Чтобы сменить координаты выводимого сообщения, надо поменять числа в строках MOV CRD.X,10 и MOV CRD.Y,15.

Таблица 1 — Варианты к заданию:

Координаты сообщения Цвет сообщения и фона
X=5, Y=10 2h+8h
X=15, Y=15 1h+8h
X=10, Y=20 4h+8h
X=5, Y=18 2h+80h
X=19, Y=30 2h+40h
X=12, Y=16 4h+10h
X=35, Y=40 1h+40h
X=0, Y=30 1h+80h
X=28, Y=15 4h+20h
X=17, Y=50 1h+20h

 

Пример выполнения программы в среде разработки RadASM ассемблер Masm32

 

Среда разработки RadASM представляет собой среду разработки программного обеспечения для ОС Windows, изначально предназначенную для написания программ на языке ассемблера. Имеет гибкую систему файлов настроек, благодаря чему может быть использована как среда разработки программного обеспечения на высокоуровневых языках, а также документов, основанных на языках разметки.

Проект представляет собой набор файлов. В файле «Имя_проекта.rap» (расширение – rap) содержится информация о настройках проекта; файлах, входящих в проект. Помимо этого файла, проекта так же содержит файл «Имя_проекта.asm» (расширение – asm) – файл, содержащий основную часть программы. Так же могут входить дополнительные файлы.

Главное окно программ при запуске выглядит следующим образом (рисунок 1).

Окно программы содержит несколько областей: панель меню; панель инструментов; рабочую область; обозреватель проектов; свойство проекта и так далее, которые можно настроить при необходимости.

Для создания нового проекта необходимо зайти в меню «Файл» и выбрать пункт «Новый проект» (рисунок 2).

Рисунок 2 – Окно пункта меню «Файл»

 

В выпадающем списке «Ассемблер» необходимо выбрать строку «masm» (рисунок 3).

Ассемблер для начинающих. Примеры простых программ

Тип проекта – «Console App». Ввести имя проекта. Имя проекта должно содержать ОДНО СЛОВО БЕЗ ПРОБЕЛОВ. При необходимости ввести описание. По умолчанию проекты сохраняются в папке «radasm\Masm\Projects», где radasm – имя папки, содержащий среду. Необходимости указать местоположение проекта на диске D:\\… Нажать кнопку «Next >».

 

Рисунок 3 – Выбор типа проекта

Далее необходимо выбрать базовый шаблон проекта (рисунок 4). Шаблоны находятся в папке «radasm\Masm\Templates\». В шаблоне уже прописан базовый код, общий для всех проектов и необходимые настройки компилятора и отладчика. После создания проекта, в редакторе будет загружена программа (рисунок 5). В данной лабораторной работе не используется шаблон (Нажимаем «Next >».)

Рисунок 4 – Выбор шаблона проекта

 

Предпоследнее окно Мастера предлагает выбрать типы создаваемых файлов – выбираем Asm (исходные файлы ассемблера), и папки – выбираем папку Bak, используемую для размещения предыдущих копий файлов (рисунок 5).

Рисунок 5 – Выбор типов файлов и папок

 

Последнее окно Мастера определяет доступные для работы с проектом пункты меню запуска приложения Создать и выполняемые команды. В данной сборке выполняемые команды уже настроены, поэтому в нем можно ничего не менять, хотя использоваться будут не все пункты созданного меню, а только следующие: Assemble (транслировать или, точнее, ассемблировать), Link (компоновать), Run (выполнить) и Run w/Debug (выполнить в подключенном отладчике).

Рисунок 6 – Пункты меню запуска приложения

 

В результате будет получена пустая заготовка консольного приложения Windows. Просмотреть эту заготовку можно, дважды щелкнув левой клавишей мыши по файлу *.asm в окне навигатора Project, расположенном справа вверху.

 

Создать консольную программу, которая выводит на экран «Число вызовов таймера». Листинг программы находится в разделе приложения (Приложение 3)

Опишем кратко данную программу. В ней задаем тип процессора, модель памяти, константы.

.386P

Плоская модель памяти.

.MODEL FLAT, STDCALL

Константы.

STD_OUTPUT_HANDLE equ -11

STD_INPUT_HANDLE equ -10

TIME_PERIODIC equ 1

Тип события.

KEY_EV equ 1h

MOUSE_EV equ 2h

Задаются атрибуты выводимого сообщения — цвет текста

FOREGROUND_BLUE equ 1h ;Синий цвет букв.

FOREGROUND_INTENSITY equ 8h ;Повышенная интенсивность

BACKGROUND_BLUE equ 10h ;Синий цвет фона.

BACKGROUND_INTENSITY equ 80h ;Повышенная интенсивность

COL1 = 4h+8h ; Изменение цвета текста.

Описываем прототипы внешних процедур в программе.

EXTERN WriteConsoleA@20:NEAR; — запись данных в консоль

EXTERN SetConsoleCursorPosition@8:NEAR; — позиция курсора

EXTERN SetConsoleTitleA@4:NEAR; — получение заголовка окна консоли

EXTERN CharToOemA@8:NEAR; — перекодировка текста

EXTERN ExitProcess@4:NEAR;- завершение процесса работы программы

EXTERN SetConsoleTextAttribute@8:near

EXTERN FreeConsole@0:near

EXTERN timeSetEvent@20:near

EXTERN AllocConsole@0:near

EXTERN ReadConsoleA@20:near

EXTERN timeKillEvent@4:near

EXTERN wsprintfA:near

EXTERN GetStdHandle@4:near

EXTERN SetConsoleScreenBufferSize@8:near

Директивы подключения библиотек

includelib kernel32.lib

includelib user32.lib

includelib winmm.lib

Задаем координаты структуры

COOR STRUC

X WORD ?

Y WORD ?

COOR ENDS

Сегмент данных, в нем описываем выводимые на экран сообщения, тип данных, количество символов, координаты сообщения.

_DATA SEGMENT DWORD PUBLIC USE32 ‘DATA’

HANDL DWORD ?

HANDL1 DWORD ?

STR2 DB "Пример таймера в консольном приложении"

STR3 DB 100 dup(0)

FORM DB "Numbers of Time Call: %lu",0

BUF DB 200 dup(?)

NUM DWORD 0

LENS DWORD ?

CRD COOR <?>

ID DWORD ?

HWND DWORD ?

_DATA ENDS

;В сегменте кода создаем новую консоль, заголовок окна

_TEXT SEGMENT DWORD PUBLIC USE32 ‘CODE’

START:

;Создание новой консоли

CALL FreeConsole@0

CALL AllocConsole@0

 

push STD_INPUT_HANDLE

CALL GetStdHandle@4

MOV HANDL1,eax

 

push STD_OUTPUT_HANDLE

CALL GetStdHandle@4

MOV HANDL, EAX

;Установка имени консоли

PUSH OFFSET STR2

PUSH OFFSET STR2

CALL CharToOemA@8

PUSH OFFSET STR2

CALL SetConsoleTitleA@4

 

;Задаем цветовые атрибуты и устанавливаем таймер

push COL1

PUSH HANDL

CALL SetConsoleTextAttribute@8

PUSH TIME_PERIODIC

 

;Задаем процедуру для таймера, точность вызова таймера, его вызов через секунду

PUSH 0

PUSH offset TIME

PUSH 0

PUSH 1000

CAll timeSetEvent@20

MOV ID,EAX

 

CALL TIME ;Вызов таймера на экран, закрытие таймера и консоли после нажатия Enter

PUSH 0

PUSH offset LENS

PUSH 200

PUSH offset BUF

PUSH HANDL1

CAll ReadConsoleA@20

PUSH ID

CALL timeKillEvent@4

 

CALL FreeConsole@0

PUSH 0

CALL ExitProcess@4

 

;Процедура определения длины строки.

;Строка — [EBP+08H].

;Длина в ЕВХ

LENSTR PROC

ENTER 0,0

PUSH EAX

;———————-

CLD

MOV EDI,DWORD PTR [EBP+08H]

MOV EBX,EDI

MOV ECX,100

XOR AL,AL

REPNE SCASB

SUB EDI,EBX

MOV EBX,EDI

DEC EBX

;———————-

POP EAX

LEAVE

RET 4

LENSTR ENDP

 

;Процедура, вызываемая таймером.

TIME PROC

PUSHA ;Сохранить все регистры.

;Установка позиции курсора.

MOV CRD.X,10

MOV CRD.Y,20

PUSH CRD

PUSH HANDL

CALL SetConsoleCursorPosition@8

;Заполнение строки STR3.

PUSH NUM

PUSH OFFSET FORM

PUSH OFFSET STR3

CALL wsprintfA

ADD ESP,12

;Перекодировка строки STR3.

PUSH OFFSET STR3

PUSH OFFSET STR3

CALL CharToOemA@8

;Вывод строку с номером вызова таймера.

PUSH OFFSET STR3

CALL LENSTR

PUSH 0

PUSH OFFSET LENS

PUSH EBX

PUSH OFFSET STR3

PUSH HANDL

CALL WriteConsoleA@20

INC NUM

POPA

RET 20

TIME ENDP

_TEXT ENDS

END START

 

 

После отладки и запуска программы получаем результат.

 


Как известно для написание программ на языке Assembler достаточно иметь текстовый редактор (например, блокнот) и один из компиляторов: NASM, FASM, MASM,  YASM и др. Но данный способ не совсем удобен из-за отсутствия таких функций, как подсветка синтаксиса, отладки приложения, запуск компоновщика и компилятора с помощью команд.

Для решение проблем связанные с удобством разработки программ на языке Assembler, используют среды программирования, которые помимо редактора включают несколько видов компиляторов и компоновщиков.

SASM (SimpleASM) – середа программирования для языка Assembler. Данная среда включает следующие компиляторы: NASM, FASM, MASM, GAS. SASM использует компоновщик GSS. Так же SASM позволяет компилировать приложения Assembler под. х86 и х64 системы.

Интерфейс SASM

Интерфейс программы состоит из главного меню, панелей работы с файлами, правки, панели отладки и построения. SASM осуществляет подсветку синтаксиса языка Assembler, включает два дополнительных окна для ввода и вывода информации, панели вывода Логов при построении и отладки приложения, где можно отследить время компиляции программы.

Библиотека ввода-вывода информации

Отдельное внимание хочу обратить на библиотеку «io.inc», которая позволяет реализовать ввод и вывод чисел в Assembler с помощью одной команды. Написание функции вывода чисел в Assembler начинающим программистам не под силу, поэтому актуальность данной библиотеки очевидна. Работу функций вывода информации можно увидеть в лабораторных работах по Assembler. Библиотека позволяет осуществлять вывод чисел в различных системах счисления, строках, осуществлять вывод символов и др.

Построение программы

Компоновка программы – первый шаг после разработки программы, далее непосредственно осуществляется ее запуск. Среда SASM позволяет выполнить компоновку и запуск программы как поочередно, так и сразу одним действием. Для выполнения операций компоновки программы и запуска необходимо перейти к пункту «Построение» и выбрать «Построить и запустить F9». Запуск программы можно осуществить в отдельном окне – данная функция доступна в меню «Построения».

Среда SimpleASM позволяет сохранить приложение Assembler в исполняющем формате. Для этого необходимо выполнить команду «Файл» – «Сохранить .exe».

Отладка программы Assembler

SASM предоставляет пользователю возможность отладки приложения.

Разработка программы на Ассемблере (стр. 1 из 11)

В случае необходимости пользователь может просмотреть значение регистров, памяти, осуществить построчную отладку с учетом и без учета входа в подпрограммы Ассемблера.

Запуск отладки осуществляется через меню «Отладка» — клавиша F5, построчная отладка активизируется F10 (без захода в подпрограмму), F11 – с заходом в подпрограмму. Установить «Точку остановки» в среде SASM – F8.

Все команды отладки доступны в панели инструментов «Отладка». Пользователю доступна возможность отладки приложения с помощью команд GDB. GDB – отладчик, позволяет осуществить контроль и мониторинг программы в процессе ее исполнения.

Настройка среды SASM

Среда SASM обладает всеми необходимыми настройками для удобной разработки программ. Настройка параметров программы SASM осуществляется в меню «Настройки».

В первой вкладки настройки «Общие», можно установить параметры языка, шрифта, отображение регистров при отладке. Немалозначимый пункт настройки среды является поле «Начальный текст в поле кода», где можно задать код, который будет отображаться при создании нового документа.

На второй вкладки «Вид» расположены параметры настройки фона, цвета ключевых слов, цвет шрифта, строки отладки. Так же отдельно отведена панель для настройки подсветки синтаксиса –  определяется цвет операций, чисел, памяти, метки и др.

Третья вкладка «Построение» содержит настройки компилятора и компоновщика, выбор режима работы, настройка ассемблера посредством опций.

Справка

Среда программирования SASM и справка реализованы на русском языке. Программа является бесплатным средством разработки приложений на Assmebler. Ознакомиться  с отладчиком GDB можно в пункте «Немного об отладчике» в справочной системе программы.

Программа SASM – средство для разработки и отладки приложений Assembler, которая может работать с несколькими компиляторами Assembler как в режиме х86 так и в х64. Имеет встроенный компоновщик GSS, поддерживает команды отладчика GDB.

Скачать SASM с официального сайта

SASM

English version of site here.

SASM (SimpleASM) — простая кроссплатформенная среда разработки для языков ассемблера NASM, MASM, GAS, FASM с подсветкой синтаксиса и отладчиком. В SASM Вы можете легко разрабатывать и выполнять программы, написанные на языке ассемблера. Вводите код в форму и запускайте приложение. Программа работает «из коробки» и хорошо подойдет для начинающих изучать язык ассемблера. Основана на Qt. Распространяется по свободной лицензии GNU GPL v3.0.

Загрузить для Windows
Загрузить для Linux

Для загрузки программы на Linux выбирайте Ваш дистрибутив в окне «Build Results» справа.

Вы также можете собрать SASM из исходников, которые можно найти в GitHub репозитории или скачать SASM в zip-архиве для Windows.

Если Вы пользователь Mac, возможно, Вам поможет эта заметка об установке SASM на Mac (спасибо Brian R. Hall).

Поддержите проект

WebMoney: Z282016332582 и R331674303467

О программе

В SASM Вы можете легко разрабатывать и выполнять программы, написанные на языках ассемблера NASM, MASM, GAS, FASM.

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

Программа поддерживает работу с несколькими проектами – новые файлы открываются и создаются в новых вкладках. При выходе из программы текущий набор открытых файлов сохраняется. При следующем запуске Вы сможете восстановить предыдущую сессию. В параметрах настраивается шрифт, цветовая схема и текст, отображающийся при создании нового файла. Интерфейс программы доступен на восьми языках (русский, английский, турецкий (спасибо Ali Goren), китайский (спасибо Ahmed Zetao Yang), немецкий (спасибо Sebastian Fischer), итальянский (спасибо Carlo Dapor), польский (спасибо Krzysztof Rossa), иврит (спасибо Elian Kamal)). Все окна в программе плавающие, с возможностью закрепления в одной из множества позиций. Имеется возможность переназначения горячих клавиш.

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

В SASM вы можете находить ошибки в своих программах с помощью интерфейса к отладчику gdb. В программе можно просматривать значения регистров и переменных, а также устанавливать точки останова и перемещаться по отлаживаемой программе. Дополнительно имеется возможность выполнять произвольные команды отладчика gdb, результаты которых будут отображаться в логе.

SASM полностью поддерживает работу с четырьмя ассемблерами NASM, MASM, GAS, FASM в двух режимах — x64 и x86, переключаться между которыми можно в настройках на вкладке «Построение». Там же можно изменить опции ассемблера и компоновщика и выбрать, какие программы будут использоваться для ассемблирования и компоновки.

Устранение неполадок

Если у Вас что-то работает не так (происходят ошибки при компиляции, отладке и др.), пожалуйста, прочитайте главу «Устранение неполадок» в справке в программе (F1) или в Wiki проекта на GitHub. Возможно, там Вы сможете найти полезный совет для решения Вашей проблемы.

Библиотека макросов для NASM «io.inc»

В программу включена библиотека макросов для NASM «io.inc». В ней есть кроссплатформенные команды ввода-вывода и макросы: CMAIN — точка входа и CEXTERN для доступа к внешним функциям на языке C.

Подробнее о ее командах Вы можете узнать здесь или ниже.

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

PRINT_DEC size, data

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

GET_DECsize, data

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

Реализация

Windows

В качестве ассемблера для NASM используется nasm 2.11.02, в качестве компоновщика — gcc 4.6.2 из MinGW (gcc 4.8.1 из MinGW64 в режиме x64) или ld 2.22 из MinGW (ld 2.23.2 из MinGW64 в режиме x64).

Версии ассемблеров и компоновщиков для NASM подобраны с учетом рекомендуемых программ для курса «Архитектура ЭВМ и язык ассемблера» ВМК МГУ 1-го потока.

Также в программу включен отладчик gdb 7.4 (7.6 для x64) из пакета MinGW и немного измененная для отладки библиотека макросов ввода-вывода.

Начиная с версии 3.0, в SASM включены fasm 1.71.39 и gas 2.23.1 из MinGW (gas 2.23.2 из MinGW64).

Ассемблер MASM невозможно было включить в сборку из-за его лицензии. Чтобы им воспользоваться, Вы должны установить MASM на Ваш компьютер с сайта http://www.masm32.com/ и указать пути до ассемблера (ml.exe, путь обычно «C:/masm32/bin/ml.exe») и до компоновщика (link.exe, путь обычно «C:/masm32/bin/link.exe») в соответствующих полях на вкладке «Построение».

Под Windows SASM после установки сразу готов к работе.

Linux

Для работы программы на Linux должны быть установлены: nasm или gas (если их планируется использовать, fasm уже включён в сборку), gcc, gdb (для отладки).

Больше информации о программе и её использовании можно получить в Wiki проекта на GitHub.

История изменений:

12.09.2017 — версия 3.9.0 (zip, exe):

  • Более удобный просмотр значений по адресу.
  • Исправлена ошибка, приводящая к падению отладчика (спасибо lberserq).
  • Добавлена поддержка польского языка (спасибо Krzysztof Rossa).
  • Добавлена поддержка иврита (спасибо Elian Kamal).

19.02.2017 — версия 3.8.0 (zip, exe):

  • Улучшен разбор регистров при отладке.
  • Добавлена опция запуска ассемблера в текущей директории.
  • Добавлена поддержка итальянского языка.

30.10.2016 — версия 3.7.0 (zip, exe):

  • Добавлена поддержка китайского языка.
  • Добавлена поддержка немецкого языка.
  • Исправлена ошибка, приводящая к невозможности повторного запуска программы после аварийного завершения.
  • Исправлена ошибка, при которой вывод программ, содержащий непечатные символы, не отображался полностью.

25.09.2016 — версия 3.6.0:

  • Добавлена поддержка турецкого языка.
  • Улучшено добавление отступов при нажатии клавиши Tab.

26.08.2016 — версия 3.5.1:

  • Исправлены ошибки с отладкой, drag & drop и другие мелкие ошибки.

19.03.2016 — версия 3.5.0:

  • Поддержка компоновщика GoLink.
  • Исправлена ошибка с неправильным именем файла при отркытии или сохранении.

11.02.2016 — версия 3.4.0:

  • Изменение цвета номеров строк.
  • Возможность отключения автоматической вставки отладочной строки.

27.01.2016 — версия 3.3.0:

  • Однооконный режим.
  • Функция drag & drop для открытия файлов. Чтобы открыть файл, можно просто перетащить его на окно программы.
  • Улучшенная справка: расширена часть «Устранение неполадок», добавлена часть «Настройка системы сборки».
  • Исправление множества ошибок, включая ошибку с системно-зависимыми путями и ошибку при показе регистров x87 FPU.

14.06.2015 — версия 3.2.0:

  • Добавлена возможность отключения запуска компоновщика.
  • Обновлён FASM: новая версия 1.71.39.
  • Исправлены некоторые ошибки, возникающие при отладке.

27.05.2015 — версия 3.1.4: исправлена ошибка, возникающая при использовании в системе локализованной версии objdump.

30.03.2015 — версия 3.1.3: добавлено отображение информации о полученных программой сигналах (в т. ч. об ошибках, возникающих в ходе её работы) при отладке.

27.03.2015 — версия 3.1.2: улучшена работа при отладке файлов с директивой include.

24.03.2015 — версия 3.1.1: исправлены ошибки с подсветкой синтаксиса.

29.08.2014 — версия 3.1.0: изменения из pull requsts и issues на GitHub — перемещаемые вкладки, сообщения об ошибках при неправильном ассемблере или компоновщике, улучшенная отмена и постановка отступа в 4 пробела, опция noexecstack для исполняемых файлов в Linux.

24.07.2014 — версия 3.0.1: добавлена возможность просмотра дополнительных регистров (xmm, st и других).

13.07.2014 — версия 3.0:

  • Добавлена поддержка новых ассемблеров, кроме NASM — GAS, MASM, FASM, включая подсветку синтаксиса, отладку и поддержку архитектур x86 и x64. Появилась возможность выбрать вручную ассемблер и компоновщик, а также изменить опции сборки программы.
  • Значительно улучшена работа отладчика, стало возможным отлаживать программы даже без отладочной информации для GDB (например, написанные на MASM). В отладчике добавлена возможность приостановить программу, а также установить точку останова во время её выполнения.
  • Добавлена папка для include файлов.
  • Исправлены проблемы с загрузкой процессора текстовым редактором при открытии больших файлов с исходным кодом. Исправлена ошибка с нарушением работы интерфейса после открытия окна настроек. Исправлено множество мелких ошибок и недочетов.

23.04.2014 — версия 2.3.1: исправлена ошибка, возникающая при наличии пробелов в пути до временной директории (в частности восстановлена работа SASM на Windows XP).

03.04.2014 — версия 2.3:

  • Добавлена возможность выбора режимов x64 или x86 и изменения опций ассемблера и компоновщика. Добавлен инструментарий для компиляции и отладки 64-битного кода. Реализована подсветка 64-битных регистров и команд. Библиотека «io.inc» адаптирована для использования в 64-битных приложениях.
  • Добавлена подсветка команд макроассемблера NASM.
  • Исправлено множество мелких ошибок, в том числе улучшено отображение окна переменных при отладке, исправлена ошибка при считывании в стек макросами из «io.inc».

16.02.2014 — версия 2.2:

  • Значительно улучшен интерфейс программы и её юзабилити, исправлено множество ошибок. Добавлены выбор цветов фона и текста, а также полная настройка подсветки синтаксиса. Окна ввода-вывода и отладки стали плавающими (docking) окнами с многочисленными вариантами их расположения. Улучшены виджеты отображения регистров и памяти (добавлены автоподгонка под текст и возможность копирования), сделана возможность запоминания их состояния.

    Улучшен механизм точек останова — добавлена возможность остановки на метке (на строке с кодом ниже) и возможность её установки по горячей клавише. Улучшена отладка макросов — теперь они неотличимы от обычных инструкций.

    Простые примеры программ на ассемблере для новичков

    К действиям добавлены иконки, сделаны тулбары.

  • Комбинации горячих клавиш приведены в соответствие со стандартными, добавлена возможность их переназначения.

13.11.2013 — версия 2.1:

  • Исправлено множество ошибок, исправлены проблемы совместимости — созданы установочные пакеты для многих Linux-систем на OBS, налажена совместимость с Qt 4, а также упрощена сборка из исходников.
  • Сделано много улучшений, расширена функциональность. В частности, в отладчике — добавлены: просмотр регистров, просмотр памяти, точки останова и команда «продолжить»; улучшены: выполнение произвольных команд gdb, подсветка текущей строки, последовательный вывод во время отладки (изменены макросы io.inc).
  • Компиляция теперь выполняется во временных папках — пропала необходимость в специальных правах при запуске программы.
  • Добавлена отметка о несохраненном документе. Добавлен последовательный вывод в программах. Добавлено отображение статуса завершения программы. Добавлен вывод времени работы программы. Добавлен выбор шрифта.
  • Обновлена справка. Сделана новая иконка. Еще множество минорных улучшений и исправлений.

04.06.2013 — версия 2.0: сделаны все запланированные изменения — реализован отладчик, улучшена подсветка, стало возможно работать с несколькими файлами, SASM (новое название) полностью переписан на Qt и теперь с открытым кодом и кроссплатформен. Исходники выложены на GitHub, сюда же переехал и сайт. Если Вам нужны более ранние версии программы, Вы можете их найти на предыдущем сайте.

21.04.2013 — версия 1.0.4 — исправлена ошибка с CEXTERN.

18.03.2013 — версия 1.0.3 — исправлены ошибки подсветки синтаксиса, теперь подсвечиваются все ключевые слова NASM, исправлен запуск программ на MASM.

10.03.2013 — версия 1.0.2 — исправлены ошибки, добавлено автосохранение кода и пути.

07.03.2013 — появилась первая версия программы — 1.0.0.

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

Copyright © 2013 Дмитрий Манушин

FILED UNDER : IT

Submit a Comment

Must be required * marked fields.

:*
:*