- •1.Техническое задание
- •1.1.Исходные данные
- •1.2.Пример выходныx данныx.
- •2.Теоретические сведения
- •3.Описание инструментов
- •3.1.Visual Studio и расширения
- •4.Подход к решению задачи
- •Методы классов
- •5.Описание структур
- •6.Схема вызовов функций
- •7.Резултаты работы программы
- •8.Вывод
- •9.Текст программы
3.Описание инструментов
3.1.Visual Studio и расширения
Для решения поставленной задачи была использована IDE Microsoft Visual Studio 2012. Visual Studio включает в себя редактор исходного кода с поддержкой технологии IntelliSense и возможностью простейшего рефакторинга кода. Так же есть возможность создавать и подключать сторонние дополнения (плагины) для расширения функциональности практически на каждом уровне, включая добавление поддержки систем контроля версий исходного кода, добавление новых наборов инструментов (например, для редактирования и визуального проектирования кода на предметно-ориентированных языках программирования или инструментов для прочих аспектов процесса разработки программного обеспечения).
Используемые расширения:
Git Extensions (Система контролей версий)
ReSharper (Дополнительные средства форматирования и рефакторинга кода)
NDepend (Набор инструментов для анализа кода)
Данная среда разработки позволяет выполнять множество операций с кодом, такие как визуализация вызовов, иерархии классов, просмотр стека вызовов и т.д.
Средствами Visual Studio И NDepend были построенны следующие диаграммы классов, методов и дерева вызовов.
Оригинал файла в большом разрешении
О
ригинал
теста на производительность
Так же в процессе построения генерируется XML файл, содержащий документацию к методам и полям программы.
3.2.TASM
Для проверки результатов использовался комплект программного обеспечения Borland Turbo Assembler. В его состав входят:
Транслятор tasm.exe
Компановщик tlink.exe
Отладчик td.exe
Команда для получения исполняемого файла
На первой стадии выполнения сравнивались листинги одинаковых программ на ассемблере полученных разным способом.
Команда для получения объектного файла и файла листинга:
tasm *.asm /l
Далее необходимо получить исполняемые файлы обоих объектных файлов
tlink *.obj
Заключительным этапом является сравнение результатов в отладчике
td *.exe
4.Подход к решению задачи
Для реализации данной задачи я выбрал Объектно-Ориентированных Программирование.
Два основных подхода в ООП:
Деление на ответственности
Деление по составным частям
Так как наша задача выполняет небольшой функционал, я выбрал второй подход. После моделирования, была построена следующая иерархия классов.
Таблица классов
Класс |
Предок |
Описание |
AssemblerObject |
- |
Коревой объект сруктуры. Любой объект кода Ассемблера является его потомком |
Segment |
AssemblerObject |
Класс, описывающий все свойства сегмента в коде Ассемблера |
Operator |
AssemblerObject |
Класс, описывающий все свойства, принадлежащие всем командам в коде Ассемблера |
PopOperation |
Operator |
Класс, описывающий свойства команды POP |
PushOperation |
Operator |
Класс, описывающий свойства команды PUSH |
DwOperation |
Operator |
Класс, описывающий свойства операции резервирования памяти DW |
JmpOperation |
Operator |
Класс, описывающий команду безусловного перехода JMP |
RetOperation |
Operator |
Класс, описывающий команду RET |
Marker |
Operator |
Класс, описывающий свойства метки в коде Ассемблера |
RegClass |
- |
Статически класс, хранит таблицы регистров |
Generator |
- |
Основной класс программы |
