Первая программа на Assembler.




Вот и пришло время написать нашу первую программу на языке Assembler. Начнем мы с процессора Intel 8086. Будем писать программу под DOS. Программирование под Windows и Linux сложнее. Поэтому начнем с простого и понятного 16-битного процессора 8086.

DOS (дисковая операционная система, ДОС) — семейство операционных систем для персональных компьютеров, ориентированных на использование дисковых накопителей, таких как жёсткий диск и дискета.

DOS является однозадачной операционной системой. После запуска управление передаётся прикладной программе, которая получает в своё распоряжение все ресурсы компьютера и может осуществлять ввод-вывод посредством как функций, предоставляемых операционной системой, так и функций базовой системы ввода-вывода (BIOS), а также работать с устройствами напрямую.

Практическая ценность от программирования под DOS в наше время не очень большая. Но она позволит нам быстро освоить основы ассемблера, а потом мы уже перейдем к программированию под 32-битные системы.

Необходимые инструменты:

Для программирования на ассемблере нам необходим компилятор. Наиболее известные компиляторы это TASM, MASM и FASM. В этом курсе я решил использовать FASM. Это довольно новый, удобный, быстро развивающийся компилятор ассемблера, написанный на себе самом. Его преимущества — это поддержка сложных макросов и мультиплатформенность. Есть версии под DOS, Windows и Linux.

С его помощью можно сгенерировать файл любого формата, не обязательно исполняемый файл, так что FASM — это превосходный инструмент для экспериментов и исследований. Скачать его вы можете на официальном сервере.

Если у вас Windows, тогда устанавливать надо на 32 битную версию (х86) т.к. на 64 битной версии (х64) будет выдавать ошибку. Мой компьютер 64 битной версии, поэтому я установил Windows 7 32 bit на виртуальную машину и уже туда установил FASM. Как установить Windows на виртуальную машину я объяснял в своей статье «Установка Windows 7 на виртуальную машину«.

Приступим к написанию первой программы:

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

  use16
  org 100h
  mov dx,hello
  mov ah,9
  int 21h
  
  mov ax,4C00h
  int 21h
  
  hello db 'Hello, World!$'
  

«use16» — сообщает, что нужно генерировать 16-битный код. Нам нужен именно такой для нашей первой программы.

«org 100h» — объясняет, что следующие команды и данные будут располагаться в памяти, начиная с адреса 100h. Дело в том, что при загрузке нашей программы в память, DOS размещает в первых 256 байтах (с адресов 0000h — 00FFh) свои служебные данные. Нам эти данные изменять нежелательно.

«mov dx,hello» — Помещаем «hello» в регист dx. Делаем что-то типо переменной.

«mov ah,9» — пишем номер функции DOS.

«int 21h» — обращаемся к функции DOS.

«mov ax,4C00h и int 21h» — это стандартное завершение процесса в DOS. Так мы будем завершать все наши программы.

«hello db ‘Hello, World!$'» — сообщаем что в «hello» хранится наше приветствие, которое будет выведено в консоль.

Чтобы откомпилировать программу надо выбрать меню Run->Compile. FASM предложит сохранить файл, если вы этого ещё не сделали, а затем скомпилирует. То есть переведет текст, набранный нами, в машинный код и сделает его программой.

Далее откройте консоль на вашем компьютере (Пуск->Выполнить->cmd и нажимаем Enter, откроется консоль). Потом зайдите в папку где вы сохранили файлы программы, найдите файл с расширением .COM (приложение DOS) возьмите его мышкой перенесите в консоль (либо пропишите путь к этому файлу) и нажмите Enter. После таких манипуляций вы увидите в консоли наше приветствие. Вот так все и работает. Поздравляю все получилось!



1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

2 комментария

  1. Не, так не интересно. Можно сразу х64 код.
    А то заморочек: ставить виртуалку, настраивать, на виртуалку ставить ОСь — труба 🙁

    1. FASM под x64 не идёт и именно поэтому я нашел решение поставив виртуалку. Мне так проще, но если вы найдете решение, то поделитесь. Буду благодарен.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *