admin / 13.01.2018
Кыргызский Государственный Национальный Университет
Институт Интеграции Международных Образовательных программ
Кыргызско-Американский Факультет Компьютерных Информационных Систем и ИНТЕРНЕТ (КАФ-ИНТЕРНЕТ)
Курсовой проект
(Организация ЭВМ)
тема
Разработка программы на Ассемблере.
Выполнили: студенты группы КИС 2 – 98
Вершинин АА Исманов АА
Проверил: преподаватель Кочетов ОП
Бишкек 2001
СОДЕРЖАНИЕ
ВВЕДЕНИЕ…………………………………………………………………3
АССЕМБЛЕР. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММЫ…………………4
Содержание
ОБЩИЙ РАЗДЕЛ…………………………………………………………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 и т.д., но все существующие диагностирующие программы написаны на языках высокого уровня, а значит не достаточно быстры и надёжны.
Автор проекта не берётся конкурировать с огромными гигантами по количеству выполняемых этими программами тестов в силу того, что это бессмысленно. Была предпринята попытка написать более надежную, быструю диагностическую программу с использованием машинно-ориентированного языка программирования – Ассемблер.
АССЕМБЛЕР. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММЫ.
Язык программирования наиболее полно учитывающий особенности "родного" микропроцессора и содержащий мнемонические обозначения машинных команд называется Ассемблером. Программа, написанная на Ассемблере называется исходной программой. Далее остановимся на версии, называемой Турбо Ассемблер.
Разработка программы на Ассемблере состоит из следующих этапов:
Текст программы на Ассемблере содержит следующие операции:
Действия обусловленные операциями перечисленными в пп.б,в,г выполняются на этапе трансляции, т.е. являются командами Ассемблеру. Операции, называемые командами или инструкциями выполняются во время выполнения программы, т.е. являются командами микропроцессору.
Инструкция записывается на отдельной строке и включает до четырех полей, необязательные из которых выделены [ ]:
Метка или символический адрес содержит до 31 символа из букв цифр и знаков ? @ . _ $. Причем цифра не должна стоять первой, а точка, если есть должна быть первой.
Мнемоника — сокращенное обозначение кода операции (КОП) команды, например мнемоника ADD обозначает сложение (addition).
Операндами могут быть явно или неявно задаваемые двоичные наборы, над которыми производятся операции.Операнды приводятся в одной из четырех систем счисления и должны оканчиваться символом b(B), o(O), d(D), h(H) для 2, 8, 10 или 16-ной СС. К шестнадцатиричному числу добавляется слева ноль, если оно начинается с буквы.
Система команд может быть классифицирована по трем основным признакам —
Для МП 1810ВМ86 (8086) команда занимает от одного до шести байтов. Первым байтом команды всегда является код операции, например код команды INT XXh равен CD(HEX).
По функциональному признаку инструкции можно разбить на пять больших групп:
Существует пять основных способов адресации:
Большинство остальных способов адресации являются комбинациями или видоизменениями перечисленнных.
В первом случае операнд(ы) располагаются в регистрах микропроцессора (МП), например по команде MOV AX,CX пересылается содержимое CX в AX.
При непосредственной адресации операнд располагается в памяти непосредственно за КОП, инструкция MOV AL,0f5h записывает число 245(f5) в регистр AL.
В случае прямой адресации за КОП следует не сам операнд, а адрес ячейки памяти или внешнего устройства, например команда IN AL,40h вводит байт данных из внешнего устройства с адресом 40h.
Косвенная адресация отличается от регистровой тем, что в регистре хранится адрес операнда, т.е. по команде MOV AL,[BX] в аккумулятор al будет записано число из ячейки памяти с адресом, хранящимся в регистре BX.
Стековая адресация производится к операндам расположенным в области памяти, называемой стек.
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. Завет мужчины с женщиной
Оси и плоскости тела человека — Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д.
Отёска стен и прирубка косяков — Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу.
Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) — В простых моделях рынка спрос и предложение обычно полагают зависящими только от текущей цены на товар.
Лабораторная работа №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 осуществляет подсветку синтаксиса языка Assembler, включает два дополнительных окна для ввода и вывода информации, панели вывода Логов при построении и отладки приложения, где можно отследить время компиляции программы.
Отдельное внимание хочу обратить на библиотеку «io.inc», которая позволяет реализовать ввод и вывод чисел в Assembler с помощью одной команды. Написание функции вывода чисел в Assembler начинающим программистам не под силу, поэтому актуальность данной библиотеки очевидна. Работу функций вывода информации можно увидеть в лабораторных работах по Assembler. Библиотека позволяет осуществлять вывод чисел в различных системах счисления, строках, осуществлять вывод символов и др.
Компоновка программы – первый шаг после разработки программы, далее непосредственно осуществляется ее запуск. Среда SASM позволяет выполнить компоновку и запуск программы как поочередно, так и сразу одним действием. Для выполнения операций компоновки программы и запуска необходимо перейти к пункту «Построение» и выбрать «Построить и запустить F9». Запуск программы можно осуществить в отдельном окне – данная функция доступна в меню «Построения».
Среда SimpleASM позволяет сохранить приложение Assembler в исполняющем формате. Для этого необходимо выполнить команду «Файл» – «Сохранить .exe».
SASM предоставляет пользователю возможность отладки приложения.
В случае необходимости пользователь может просмотреть значение регистров, памяти, осуществить построчную отладку с учетом и без учета входа в подпрограммы Ассемблера.
Запуск отладки осуществляется через меню «Отладка» — клавиша F5, построчная отладка активизируется F10 (без захода в подпрограмму), F11 – с заходом в подпрограмму. Установить «Точку остановки» в среде SASM – F8.
Все команды отладки доступны в панели инструментов «Отладка». Пользователю доступна возможность отладки приложения с помощью команд GDB. GDB – отладчик, позволяет осуществить контроль и мониторинг программы в процессе ее исполнения.
Среда SASM обладает всеми необходимыми настройками для удобной разработки программ. Настройка параметров программы SASM осуществляется в меню «Настройки».
В первой вкладки настройки «Общие», можно установить параметры языка, шрифта, отображение регистров при отладке. Немалозначимый пункт настройки среды является поле «Начальный текст в поле кода», где можно задать код, который будет отображаться при создании нового документа.
На второй вкладки «Вид» расположены параметры настройки фона, цвета ключевых слов, цвет шрифта, строки отладки. Так же отдельно отведена панель для настройки подсветки синтаксиса – определяется цвет операций, чисел, памяти, метки и др.
Третья вкладка «Построение» содержит настройки компилятора и компоновщика, выбор режима работы, настройка ассемблера посредством опций.
Среда программирования SASM и справка реализованы на русском языке. Программа является бесплатным средством разработки приложений на Assmebler. Ознакомиться с отладчиком GDB можно в пункте «Немного об отладчике» в справочной системе программы.
Программа SASM – средство для разработки и отладки приложений Assembler, которая может работать с несколькими компиляторами Assembler как в режиме х86 так и в х64. Имеет встроенный компоновщик GSS, поддерживает команды отладчика GDB.
Скачать 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». В ней есть кроссплатформенные команды ввода-вывода и макросы: 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 – регистр или числовая константа. |
В качестве ассемблера для 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 должны быть установлены: nasm или gas (если их планируется использовать, fasm уже включён в сборку), gcc, gdb (для отладки).
Больше информации о программе и её использовании можно получить в Wiki проекта на GitHub.
12.09.2017 — версия 3.9.0 (zip, exe):
19.02.2017 — версия 3.8.0 (zip, exe):
30.10.2016 — версия 3.7.0 (zip, exe):
25.09.2016 — версия 3.6.0:
26.08.2016 — версия 3.5.1:
19.03.2016 — версия 3.5.0:
11.02.2016 — версия 3.4.0:
27.01.2016 — версия 3.3.0:
14.06.2015 — версия 3.2.0:
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:
23.04.2014 — версия 2.3.1: исправлена ошибка, возникающая при наличии пробелов в пути до временной директории (в частности восстановлена работа SASM на Windows XP).
03.04.2014 — версия 2.3:
16.02.2014 — версия 2.2:
Улучшен механизм точек останова — добавлена возможность остановки на метке (на строке с кодом ниже) и возможность её установки по горячей клавише. Улучшена отладка макросов — теперь они неотличимы от обычных инструкций.
К действиям добавлены иконки, сделаны тулбары.
13.11.2013 — версия 2.1:
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