Как писать программы на ассемблере

Введение
Теоретическая часть
1 Архитектура компьютера
Лабораторный практикум
1 Создание программы на языке ассемблера
2 Применение функций DOS и BIOS
3 Линейные алгоритмы
4 Десятичная арифметика
5 Команды передачи управления
6 Циклы с условием
7 Циклы со счетчиком
8 Работа с массивами
9 Цепочечные команды
Приложения
1 Таблица кодов символов ASCII
2 Функции DOS и BIOS
Гостевая книга

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

Создание программы на языке ассемблера

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

  1. Постановка задачи (точное и подробное описание функциональности будущей программы, а также описание всех входных и выходных данных и способа их передачи программе);
  2. Разработка алгоритма программы (построение блок схемы, граф-схемы или текстовое или математическое описание решения);
  3. Формализация алгоритма (запись алгоритма на языке программирования).
    Создание текстового файла программы с расширением .asm (например my.asm ). Отсутствие среды разработки позволяет программисту самостоятельно выбрать текстовый редактор для написания кода программы. Для этой цели подойдет любой текстовый редактор с нумерацией строк, мы рекомендуем редактор, встроенный в оболочку "FAR Manager".
  4. Компиляция программы;
    Компиляция — процесс перевода программы из текстового вида в машинный код. При использовании компилятора фирмы Borland необходимо выполнить:
    tasm my.asm
    т.е. запускаем компилятор tasm и передаем с командной строки имя файла, содержащего программу. Если программа имеет синтаксические ошибки, компилятор выдаст сообщение об ошибке с указанием номера строки и описанием для каждой ошибки (нужно вернуться на этап №3 и исправить синтаксические ошибки).
    В случае успешной компиляции будет создан файл, содержащий объектный код программы my.obj , который ещё не является исполняемым модулем.
  5. Компоновка программы;
    Компоновка — создание из файла объектного кода исполняемого модуля.
    tlink my.obj
    В качестве параметра компоновщик tlink принимает имя файла содержащего объектный код программы (в нашем случае — my.obj ). В случае успешной компоновки будет создан исполняемый модуль my.exe
  6. Запуск и тестирование исполняемого модуля программы.
    На данном этапе необходимо проверить, соответствует ли написанная программа постановке задачи, сделанной нами на этапе №1. Неправильная работа программы говорит об алгоритмической ошибке (семантическая ошибка), поэтому для успешного её устранения нужно вернуться на этап разработки алгоритма (этап №2).
Читайте также:  Как отключить электросеть в watch dogs 2

Написание первой программы на языке ассемблера

  1. Постановка задачи. Написать программу, которая выводит на экран строчку "Привет!".
  2. Разработка алгоритма программы. Алгоритм линейный, разработки не требует.
  3. Формализация (запись) алгоритма
    В текстовом редакторе создаем файл privet.asm и записываем в него следующий код (без номеров строк) :
1 data segment ;описание сегмента данных 2 mes db ‘Привет!$’ ;строка для вывода на экран. ‘$’ — признак конца строки 3 data ends ;конец сегмента данных 4 5 code segment ;начало сегмента кода 6 start: ;метка start — начало нашей программы 7 assume cs:code, ds: data ;директива компилятора 8 mov ax, data ;настройка сегмента данных 9 mov ds, ax 10 11 mov ah, 9 ;функция №9 — вывод строки на экран 12 lea dx, mes ;берём адрес строки 13 int 21h ;вызов прерывания для вывода строки 14 15 mov ax, 4c00h ;функция завершения программы 16 int 21h ;завершаем программу 17 code ends ;конец сегмента кода 18 end start ;конец программы с точкой входа start

  • Компиляция программы
    tasm privet.asm
  • Компоновка программы
    tlink privet.obj
  • Запуск и тестирование
    privet.exe
  • Описание программы privet.asm

    Строки 1 — 3 программы privet.asm содержат описание сегмента данных. Сегмент данных — область память, в которой будут храниться данные для наших программ.
    Строки 5 — 17 — это код программы, её исполняемая часть.
    В 8 и 9 строках выполняется настройка сегмента данных программы.
    Строки 11 — 13 — вывод строки на экран при помощи функции №9 прерывания 21h (подробнее о функциях и работе с ними на следующей лабораторной работе).
    15 и 16 строки — стандартное завершение программы.
    После символа ‘;’ пишутся комментарии, они не обрабатываются компилятором.

    Переход на новую строку

    Для организации перехода на новую строку достаточно вывести на экран символы перевода строки и возврата каретки (CR/LF). Эти символы имеют коды 10 и 13. Если в нашей программе необходимо после вывода строки перейти на новую, то для этого достаточно переписать вторую строку программы:

    mes2 db ‘Выводим строку и переходим на новую. ‘, 10 , 13 , ‘$’

    Переход на новую строку можно выполнить и до вывода сообщения на экран:

    mes3 db 10 , 13 , ‘Выводим с новой строки. $’

    Задание для выполнения

    Написать программу, которая выводит одно под другим следующие сообщения:
    Привет!
    Меня зовут компьютер!
    До свидания!

    Наша первая программа на ассемблере.

    Наша первая программа на ассемблере будет в формате *.COM — как мы уже знаем, исполняемые файлы указанного формата очень крохотные (tiny) по размеру и состоят из одного сегмента, в котором размещаются код, данные и стек.

    Читайте также:  Как зайти на маршрутизатор tp link

    Ещё мы знаем, что в указанном формате пишутся резидентные программы, драйверы и вирусы.

    Резидентная (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.
    • В файл вносим код:
    • В папке D:TASM.2_0TASM находим «батник» ASM-COM.BAT со следующим текстом:

    Первая сторка — запуск транслятора с названием нашего файла с кодом, расположенного в одной директории с транслятором.

    Вторая строка — запуск компилятора с параметрами /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. Указанным алгоритмом создания программ можно пользоваться и далее.

    Читайте также:  Как подписать документ электронной подписью в pdf

    Для более удобной работы с кодом целесообразно применять какую-либо среду разработки. Среда разработки — это громко сказано для времён MS-DOS, правильнее сказать — специфический редактор.

    Можете попробывать TASMED в папке D:UTILSTASMED. Программа уже настроена и готова к использованию.

    Первая программа на ассемблере в среде разработки TASMED.

    • подсветка ассемблерного синтаксиса;
    • возможность сохранения проектов под любым именем и в любой директории;
    • работа как с 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 и различных сред разработок нормально отображалась кириллица (например в комментариях к строкам кода) необходимо проделать следующие действия.

    1. Запустить драйвер русской раскладки клавиатуры. В нашей запущенной MS-DOS системе на базе DOSBox это файл C:KEYRUSkeyrus.com. Впрочем, при запуске MS-DOS согласно нашим настройкам DOSBox, он запустится автоматически. При этом будет обеспечено не только отображение русского текста в текстовых редакторах, но и русскоязычная раскладка клавиатуры. Переключение раскладки Eng->Rus и наоборот — горячая клавиша «правый CTRL».
    2. Текст исходников необходимо писать в текстовых редакторах или средах разработки DOS.
    3. Если исходники пишутся в Windows редакторах, должна быть обеспечена русскоязычная кодировка текста — ASCII для DOS (CP866 или OEM866).

    Русскоязычная кодировка текста — программа просмотра файлов Total Commander. Русскоязычная кодировка текста — используем Notepad++.

    Конечно вопрос снимается сам собой, если комментарии писать на английском.

    В следующей статье мы разберём код нашей первой программы на ассемблере.

    Adblock
    detector