Assembler – Урок 0: Установка компилятора и запуск первой программы через DOSBox
В данном курсе планируется разобрать основные особенности программирования на самой простой реализации assembler – TASM. Этих знаний лично мне вполне хватило, чтобы на отлично сдать ЭВМ в институте и закончить все лабораторные работы. Во многих уроках будет домашние задание по их мотивам.
Для начала давайте установим наш старенький компилятор.
Ссылка
Почему именно vk.com?
Я прекрасно понимаю, что это ещё тот колхоз делиться файлами через обсуждения VK, но кто знает, во что может превратиться эта маленькая группа в будущем.
После распаковки файлов, советую сохранить их в папке Asm на диск C, чтобы иметь меньше расхождений с представленным тут материалом.
Для запуска компилятора нам так же потребуется эмулятор DOSBox. Он и оживит все наши компоненты. Скачаем и установим его!
Ссылка
В папке Asm я специально оставил файл code.asm. Именно на нём мы и потренируемся запускать нашу программу. Советую сохранить его копию, ибо там хранится весь код, который в 99% случаев будет присутствовать в каждом вашем проекте.
s_s segment s_s ends d_s segment d_s ends c_s segment assume ss:s_s, ds:d_s, cs:c_s begin: mov ax, d_s mov ds, ax mov ax, 0 ; Your code needs to be here mov ah, 4ch int 21h c_s ends end begin
Итак. Запускаем наш DOSBox и видим следующее:
Для начала нам нужно смонтировать диск, на который вы сохранили вашу папку Asm. У меня это диск C, поэтому я прописываю следующую команду:
mount d: c:asm
Здесь d: это не реальный диск на вашем компьютере, а виртуальный. С таким же успехом вы можете назвать его i или s. А вот C это наоборот реальный диск. Мы прописываем путь до наших файлов ассемблера.
Теперь, откроем смонтированный диск:
Прописав команду dir, вы сможете увидеть все файлы, которые там хранятся. Здесь можно заметить и наш файл CODE с расширением ASM, а так же дату его создания.
И только теперь мы начинает запускать наш файл! Бедные программисты 20 века, как они только терпели всё это? Пропишем следующую команду:
tasm code.asm
После мы увидим следующее сообщение, а наша директория пополнится новым файлом с расширением OBJ.
Теперь пропишем ещё одну команду:
tlink code.obj
В нашей папке появилась ещё пара файлов – CODE.MAP и CODE.EXE. Последний как раз и есть исполняемый файл нашего кода assembler.
Если он появился, значит, мы можем запустить режим отладки нашей программы, введя команду последнюю команду. Обратите внимание, теперь мы не указываем расширение файла, который запускаем.
td code
Этот старинный интерфейс насквозь пропитан духом ушедшей эпохи старых операционных систем. Тем не менее…
Нажав F7 или fn + F7 вы сможете совершить 1 шаг по коду. Синяя строка начнёт движение вниз, изменяя значения регистров и флагов. Пока это всего лишь шаблон, на которым мы потренировались запускать нашу программу в режиме дебага. Реальное “волшебство” мы увидим лишь в следующих уроках. Пока давайте лишь ознакомимся с имеющимися разделами.
CS
Code segment – место, где turbo debug отражает все найденные строки кода. Важное замечание – все данные отражаются в TD в виде 16-ричной системы. А значит какая-нибудь ‘12’ это на самом деле 18, а реальное 12 это ‘C’. CS аналогичен разделу “Begin end.” на Pascal или функции main.
DS
Data segment, отражает пока все мусорные данные, которые обнаружил TD. Справа мы видим их символьную (char) интерпретацию. В будущем мы сможем увидеть здесь наш “Hello, world”, интерпретируемый компилятором в числа, по таблице ASCII. Хорошей аналогией DS является раздел VAR, как в Pascal. Пока будем считать, что это одно и тоже.
SS
Stack segment – место хранения данных нашего стека. Возможно, вы уже слышали о такой структуре данных. Если нет, обязуюсь пояснить в последующих статьях.
Регистры
Все эти ax, bx, cx, si, di, ss, cs и т. д. – это наши регистры, которые используются как переменные для хранения данных. Да, это очень грубое упрощение. Переменные из Pascal и регистры Assembler это не одно и тоже, но надеюсь, такая аналогия даёт более чёткую картину. Здесь мы сможем хранить данные о циклах, арифметических операциях, системных прерываниях и т. д.
Флаги
Все эти c, z, s, o, p и т.д. это и есть наши флаги. В них хранится промежуточная информация о том, например, было ли полученное число чётным, произошло ранее переполнение или нет. Они могут хранить результат побитого сдвига. По опыту, могу сказать, на них обращаешь внимание лишь при отладке программы, а не во время штатного исполнения.
Если пока что-то не понятно, уверяю, каждый из сегментов мы рассмотрим подробнее в следующих уроках. Они заслуживают детального обсуждения, и уместить в один абзац всю информацию просто невозможно.
Ещё одно замечание. Если вы измените данные исходного файла с расширением .ASM, то вам придётся совершить все ранее описанные операции вновь, ибо обновив например code.asm вы не меняете code.obj или code.exe.
Маленькая шпаргалка для заметок:
- mount d: c:asm – создаём виртуальный диск, где корень –папка asm
- d: — открываем созданный диск
- tasm code.asm – компилируем исходный код
- tlink code.obj – создаём исполняемый файл
- td code – запускаем debug
- F7 – делаем шаг в программе
Буду ждать комментарии от всех, кому интересен Assembler. Чувствую, я где-то мог накосячить в терминологии или обозначении того или иного элемента. Но статья на Habr отличный повод всё повторить.
Источник: temofeev.ru
Что за папка assembly и можно ли ее удалить?
Некоторые пользователи в поисках свободного места на системном диске C обращают внимание на каталог Assembly, находящийся в папке Windows. Обычно его размер составляет от нескольких сот мегабайт, до нескольких гигабайт. Именно по этому возникает желание удалить папку Assembly и тем самым освободить место на диске C.
Любой здравомыслящий пользователь Windows перед тем как что – то удалять, а тем более из системной папки, попытается разобраться что в ней храниться и к чему может привести ее удаление. Специально для таких пользователей написана данная статья.
Что хранится в папке Assembly?
В данной папке находятся служебные и исполняемый файлы программной платформы NET Framework, которая в свою очередь обеспечивает работу большого количества программ, написанных с использованием NET Framework.
Содержимое папки Assembly
Проще говоря, папка Assembly содержит файлы необходимые для работы программ, которые написаны с использованием сборки NET Framework.
Также в ней могут находиться файлы, обеспечивающие подготовку обновлений операционной системы.
Можно ли удалить папку Assembly?
Конечно же делать этого не стоит. Так как последствиями может стать появление ошибок при запуске некоторых программ и игр.
Если же ситуация безвыходная и папка Assembly занимает непростительно много места, в этом случае лучше воспользоваться стандартными средствами очистки локального диска C через его свойства, предварительно создав контрольную точку восстановления.
Очистка диска C стандартными средствами
Источник: helpadmins.ru
Assembly что это за папка
Многие дотошные пользователи ОС Windows, рассматривая субдиректории, расположенные в системной папке Windows, могут обратить внимание на папку «Assembly», обладающую, подчас, довольно внушительными размерами. У пользователя может возникнут желание избавиться от её содержимого, что делать ни в коем случае не следует, так как находящиеся в данной директории файлы имеют важное значение для работы ОС Windows. В данном материале я расскажу, что за директория Assembly, каково её назначение, и как почистить её от ненужных файлов.
Что за папка Assembly?
Слово «assembly» переводится с английского языка как «сборка». Соответственно, в данной директории находятся сборки программной платформы «.NET Framework» – набор библиотек и системных компонентов, предназначенных для обслуживания приложений, использующих архитектуру .NET Framework (последний являет собой комплекс сетевых сервисов и программ, активно продвигаемых компаний «Майкрософт»).
При этом данные сборки могут выступать в виде как библиотек (файлы .dll), так и исполняемых файлов (обладающих расширением .exe).
Также в директории «Assembly» довольно часто могут находиться различные обновления к ОС Виндовс, подготавливаемые для установки в операционную систему.
Вмещая целый комплекс подобных файлов папка «assembly» часто бывает раздута, обладая объёмом в несколько сот мегабайт (к примеру, у меня она составляет более 500 мегабайт). Механически удалять все находящиеся в ней файлы крайне не рекомендуется, так как после удаления приложения, работающие с архитектурой .NET Framework, могут перестать работать корректно, система начнёт сбоить и подтормаживать.
Особенности содержимого папки Assembly
В большинстве случаев, в папке Assembly находятся несколько субдиректорий, с названиями «GAC_32», «GAC_64», «GAC_MSIL», «GAC», папки «NativeImages» различных версий, а также папки для хранения временных файлов («temp», «tmp»).
Аббревиатура «GAC» расшифровывается как «Global Assembly Cache» (в переводе «глобальный кэш сборок»). Папка «GAC» применяется для работы со сборками NET Framework 1.x, папки «GAC_32» и «GAC_64» содержат .NET dll-библиотеки, задействованные для работы с 32 и 64-битной архитектурой ПК, а папка «GAC_MSIL» содержит библиотеки dll, не зависящие от какой-либо архитектуры вашей системы.
В папке «NativeImages» находятся компиляции промежуточного языка Майкрософт (под названием «MSIL») в виде собственных изображений сборок, выполненных с помощью генератора изображений «NGEN».
Как почистить содержимое папки Assembly
После того, как мы выяснили, что это за папка Assembly, рассмотрим способы её очистки от лишних файлов. Как я уже писал выше, механически удалять эту папку не стоит – её содержимое имеет важное системное значения, и устранение этой директории повлечёт за собой печальные последствия для вашей ОС.
Достойным вариантом в данном случае является использование программных инструментов, специально предназначенных для очистки вашей системы от нежелательного софта. Среди них могу посоветовать CCleaner, ToolWiz Care, Ashampoo WinOptimizer и ряд других аналогов, предназначенных для удобной очистки системы от лишних файлов.
Заключение
В данной статье было рассмотрено, что за папка под именем Assembly, каково её предназначение и функционал. Данная директория служит для хранения библиотек и системных компонентов «.NET Framework», потому важно не только беречь её содержимое, но и вовремя следить за обновлением самой программной платформы «.NET Framework». Это гарантирует стабильную работу вашей системы, а вам – наслаждение от функционала вашего ПК.
Источник: easywebscripts.net
Assembler
Assembler — язык программирования низкого уровня, представляющий собой формат записи машинных команд, удобный для восприятия человеком.
Команды языка ассемблера один в один соответствуют командам процессора и, фактически, представляют собой удобную символьную форму записи (мнемокод) команд и их аргументов. Также язык ассемблера обеспечивает базовые программные абстракции: связывание частей программы и данных через метки с символьными именами и директивы.
Директивы ассемблера позволяют включать в программу блоки данных (описанные явно или считанные из файла); повторить определённый фрагмент указанное число раз; компилировать фрагмент по условию; задавать адрес исполнения фрагмента, менять значения меток в процессе компиляции; использовать макроопределения с параметрами и др.
Каждая модель процессора, в принципе, имеет свой набор команд и соответствующий ему язык (или диалект) ассемблера.
Достоинства и недостатки
- минимальное количество избыточного кода (использование меньшего количества команд и обращений в память). Как следствие — большая скорость и меньший размер программы
- большие объемы кода, большое число дополнительных мелких задач
- плохая читабельность кода, трудность поддержки (отладка, добавление возможностей)
- трудность реализации парадигм программирования и любых других сколько-нибудь сложных конвенций, сложность совместной разработки
- меньшее количество доступных библиотек, их малая совместимость
- непосредственный доступ к аппаратуре: портам ввода-вывода, особым регистрам процессора
- возможность написания самомодифицирующегося кода (т.е. метапрограммирования, причем без необходимости программного интерпретатора)
- максимальная «подгонка» для нужной платформы (использование специальных инструкций, технических особенностей «железа»)
- непереносимость на другие платформы (кроме двоично совместимых).
Синтаксис
Общепринятого стандарта для синтаксиса языков ассемблера не существует. Однако, существуют стандарты де-факто — традиционные подходы, которых придерживаются большинство разработчиков языков ассемблера. Основными такими стандартами являются Intel-синтаксис и ATкомментарий]`
Опкод — непосредственно мнемоника инструкции процессору. К ней могут быть добавлены префиксы (повторения, изменения типа адресации и пр.). В качестве операндов могут выступать константы, названия регистров, адреса в оперативной памяти и пр.. Различия между стандартами Intel и AT ! / #
Зачем учить ассемблер?
ЯЗЫК АССЕМБЛЕРА С НУЛЯ | #1 НАЧАЛО
Источник: progopedia.ru
MS-DOS и TASM 2.0. Часть 3. Первая программа.
Наша первая программа на ассемблере будет в формате *.COM — как мы уже знаем, исполняемые файлы указанного формата очень крохотные (tiny) по размеру и состоят из одного сегмента, в котором размещаются код, данные и стек.
Ещё мы знаем, что в указанном формате пишутся резидентные программы, драйверы и вирусы.
Резидентная (TSR-программа, от англ. Terminate and Stay Resident) — это программа, которая после запуска передает управление операционной системе, но сама не завершается, а остаётся в оперативной памяти, реагируя на определённые действия пользователя. Например, при нажатии сочетания горячих клавиш делает снимок экрана.
Код в статьях отображается в удобочитаемой форме: каждая строка имеет свой номер, строки и код подсвечиваются. Чтобы скопировать «чистый исходник», наведите курсор мыши на текст, дождитесь всплывающего меню и нажмите в меню кнопочку «копировать» (изображение двух листочков бумаги с текстом). Чистый код не содержит нумерации строк!
Наша первая программа выведет на экран монитора (консоль) надпись «Hello, World!». Итак, как говорил Юрий Алексеевич, поехали!
Создаём исполняемый файл PRG.COM.
Для достижения нашей цели делаем следующее.
- Скачиваем с нашего сайта архив (DOS-1.rar) с предустановленными DOSBox и программами. Запускаем DOSBox. Стартует эмулятор MS-DOS и Norton Commander пятой версии.
- В папке D:TASM.2_0TASM находим текстовый файл PRG.ASM. Это обычный текстовый файл, который можно создать
с помощью любого текстового редактора, с расширением ASM вместо TXT. - В файл вносим код:
;Строка, после точки с запятой является комментарием
;и не обрабатывается ассемблером
; prg.asm — название файла.
. model tiny ; создаём программу типа СОМ
. code ; начало сегмента кода
org 100h ; начальное значение смещения программы в памяти — 100h
mov ah , 9 ; номер функции DOS — в АН
mov dx , offset message ; адрес строки — в DX
int 21h ; вызов т.н. «прерывания» — системной функции DOS
ret ; завершение СОМ-программы
message db «Hello, World!» , 0Dh , 0Ah , ‘$’ ; строка для вывода
end start ; конец программы.
- В папке D:TASM.2_0TASM находим «батник» ASM-COM.BAT со следующим текстом:
tasm . exe prg . asm
tlink . exe / t / x prg . obj
Первая строка — запуск транслятора с названием нашего файла с кодом, расположенного в одной директории с транслятором.
Вторая строка — запуск компилятора с параметрами /t /x и название объектного файла — prg.obj, получившегося в результате выполнения первой команды.
Чтобы посмотреть список всех возможных параметров с пояснениями для файлов tasm.exe и tlink.exe необходимо запустить эти программы без параметров. Если вы сделаете это, не выходя из оболочки NC, то, чтобы просмотреть чистое окно DOS нажмите Ctrl+O, чтобы вернуться в NC, нажмите сочетание клавиш повторно.
- После запуска ASM-COM.BAT в этой же директории появится файл prg.com. Запустив его мы увидим сообщение «Hello World!» в окне MS-DOS (при необходимости просмотра, снова применяем Ctrl+O).
Батник ASM-EXE.BAT предназначен для создания исполняемого файла формате *.EXE (предусматривает раздельную сегментацию для кода, данных и стека — наиболее распространённый формат исполняемых файлов DOS).
Батник COMPLEX.BAT предназначен для создания исполняемых файлов из двух файлов кода (названия обязательно должны быть prg.asm, prg1.asm).
Наша первая программа на ассемблере прекрасно работает!
TASMED (Tasm Editor) — среда разработки приложений DOS на ассемблере.
Выше мы рассмотрели стандартный подход к программированию на TASM в системе MS-DOS. Указанным алгоритмом создания программ можно пользоваться и далее.
Для более удобной работы с кодом целесообразно применять какую-либо среду разработки. Среда разработки — это громко сказано для времён MS-DOS, правильнее сказать — специфический редактор.
Можете попробывать TASMED в папке D:UTILSTASMED. Программа уже настроена и готова к использованию.
- подсветка ассемблерного синтаксиса;
- возможность сохранения проектов под любым именем и в любой директории;
- работа как с TASM, так и MASM.
- только английский язык интерфейса, но английский программист должен знать лучше русского;
- слишком много настроек для текстового редактора.
Хотя, в принципе, настройки — не проблема. Основное, что необходимо настроить — это соответствующие пути:
Options->External->Assembler
Options->External->Linker
В общем, разобраться не сложно.
Практические советы: группирование проектов, русский язык в MS-DOS.
Для удобства группирования создаваемых программ можно создать отдельную папку (мы создали папку PROJECTS) в которой создавать папки названий проектов, куда копировать соответствующие файлы. Пока у нас — это PRG.ASM, PRG.OBJ, PRG.EXE. Однако, в зависимости от параметров и наших программ их может быть больше (PRG.MAP, PRG.SYM и др.).
В нашем случае, все программы, рассматриваемые в курсе обучения будут группироваться в директории D:WORK в соответствующих папках. Например, наша первая программа в папке D:WORKPRGCOM (файлы prg.asm и prg.com). Папку D:TASM.2_0PROJECTS оставляем пустой для ваших проектов и экспериментов.
Для того, чтобы в исходниках, которые вы будете просматривать в системе MS-DOS с использованием текстовых редакторов DOS и различных сред разработок нормально отображалась кириллица (например в комментариях к строкам кода) необходимо проделать следующие действия.
- Запустить драйвер русской раскладки клавиатуры. В нашей запущенной MS-DOS системе на базе DOSBox это файл C:KEYRUSkeyrus.com. Впрочем, при запуске MS-DOS согласно нашим настройкам DOSBox, он запустится автоматически. При этом будет обеспечено не только отображение русского текста в текстовых редакторах, но и русскоязычная раскладка клавиатуры. Переключение раскладки Eng->Rus и наоборот — горячая клавиша «правый CTRL».
- Текст исходников необходимо писать в текстовых редакторах или средах разработки DOS.
- Если исходники пишутся в Windows редакторах, должна быть обеспечена русскоязычная кодировка текста — ASCII для DOS (CP866 или OEM866).
Конечно вопрос снимается сам собой, если комментарии писать на английском.
В следующей статье мы разберём код нашей первой программы на ассемблере.
Updated: 09.04.2020
Categories: Ассемблер для DOS Tags: MS-DOS, TASM, обучение программированию
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.
Источник: assembler-code.com