Перейти к содержимому

Как установить ассемблер

  • автор:

MASM под Windows: быстрый старт

В этом документе кратко описан процесс установки учебной среды на основе ассемблера MASM под ОС Windows, а также порядок работы с ней.

Установка MASM

  1. Скачайте архив c MASM с сайта arch32.cs.msu.su.
  2. Распакуйте архив в каталог C:\masm32 (необходимо использовать именно такой путь). Убедитесь, что в каталоге C:\masm32 оказались каталоги bin , lib , include .
  3. Создайте где-либо в удобном месте рабочий каталог для ваших программ, например, C:\asm или D:\study\sem2 . Рабочий стол Windows или папка «Мои документы» не являются подходящими местами для рабочего каталога — проследите, чтобы в полном пути к каталогу не было русских букв или пробелов. Далее таким каталогом будет считаться C:\work .
  4. Скачайте файл prompt.bat и положите его в ваш рабочий каталог.

Простейшая программа

Для следующего шага вам потребуется текстовый редактор, пригодный для работы с программным кодом. Заметим, что Microsoft Word или встроенный в Windows редактор WordPad являются текстовыми процессорами и для работы с программным кодом непригодны. Редактор Notepad (Блокнот) подходит для работы с текстовыми файлами (plain text), но неудобен в качестве программистского редактора — в нем отсутствует подсветка синтаксиса и другие стандартные для таких редакторов функции.

Вы можете воспользоваться вашим любимым текстовым редактором или, если вы затрудняетесь с выбором, скачать простой программистский текстовый редактор Notepad2.

Примечание: Если вы решили скачать Notepad2, при первом запуске установите ширину табуляции (Tabulator width) в значение 8 при помощи меню Settings > Tab Settings.

Создайте в вашем рабочем каталоге файл hello.asm следующего содержания:

include console.inc .code Start: mov ecx, 5 again: outstrln 'Hello World' dec ecx jnz again exit end Start 

Примечание: В Notepad2 при сохранении введите имя файла hello.asm , и подсветка синтаксиса включится автоматически.

Эта программа выводит пять раз строчку “Hello World” на экран. Для вывода текста используется макрос outstrln , который определен в файле console.inc .

Трансляция и запуск программы

Дважды щелкните по файлу prompt.bat , который вы скачали на шаге установки. Откроется окно командной строки. Убедитесь, что все сделано правильно, набрав команду dir и нажав Enter . Вы должны увидеть, что в текущем каталоге (вашем рабочем каталоге) находятся файлы hello.asm и prompt.bat :

C:\work>dir Volume in drive C has no label. Volume Serial Number is C00A-56A9 Directory of C:\work 03/05/2017 11:16 AM . 03/05/2017 11:16 AM .. 03/05/2017 11:11 AM 158 hello.asm 03/05/2017 10:29 AM 81 prompt.bat 2 File(s) 239 bytes 2 Dir(s) 133,457,559,552 bytes free 

Примечание для тех, кто никогда прежде не работал с командной строкой. Взаимодействие с ней устроено следующим образом: командная строка выводит приглашение (в примере выше это C:\work> ), далее пользователь вводит команду (выше — dir ) и нажимает клавишу Enter , после чего на экране появляется вывод команды, то есть результат ее работы.

Для запуска программы требуется ее оттранслировать. Первый шаг — запуск ассемблера MASM, который построит по исходному тексту програмы объектный файл:

C:\work>ml /c /coff hello.asm Microsoft (R) Macro Assembler Version 6.14.8444 Copyright (C) Microsoft Corp 1981-1997. All rights reserved. Assembling: hello.asm 

Аргумент /c инструктирует ассемблер выполнить только трансляцию в объектный файл, без компоновки (которую мы выполним чуть позже). Аргумент /coff указывает формат объектного файла — COFF (Common Object File Format).

В рабочем каталоге появится файл hello.obj . Запустите компоновщик:

C:\work>link /subsystem:console hello.obj Microsoft (R) Incremental Linker Version 5.12.8078 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. 

Аргумент /subsystem:console говорит компоновщику, что нужно построить консольное Windows-приложение.

В рабочем каталоге появится файл hello.exe . Это исполняемый файл, который уже можно запустить:

C:\work>hello Hello World Hello World Hello World Hello World Hello World 

Как это устроено

Командный файл prompt.bat запускает окно командной строки и задает переменные окружения так, чтобы программы ml и link были доступны без указания пути к ним, а пути к include- и lib-файлам MASM также были известны.

Пути заданы жестко, поэтому и требовалось распаковать архив в строго определенный каталог.

Командный файл для упрощения запуска

Когда вам надоест каждый раз набирать три команды для трансляции и запуска программ, создайте такой командный файл (назвать его можно, например, mkr.bat — то есть make/run):

@echo off if .%1.==.. goto USAGE ml /nologo /c /coff %1 && link /nologo /subsystem:console %~n1.obj && %~n1 goto END :USAGE echo usage: mkr program.asm :END 

Использовать его можно будет следующим образом:

C:\work>mkr hello.asm Assembling: hello.asm Hello World Hello World Hello World Hello World Hello World 

Несколько комментариев по устройству этого командного файла:

  • Команда @echo off отключает дублирование каждой исполняемой команды в окне командной строки.
  • Аргумент /nologo при вызове ассемблера и компоновщика убирает строчку “Copyright (C) Microsoft”, захламляющую экран.
  • %1 меняется на аргумент, который передан командному файлу, то есть имя программы на ассемблере (выше — hello.asm ).
  • %~n1 меняется на тот же аргумент, но без расширения (выше — hello ).
  • Связка && выполняет очередную команду, только если предыдущая завершилась успешно. В случае ошибок трансляции ваша программа запущена не будет.

Файл mkr.bat можно или копировать в каждый каталог, где вы планируете размещать исходные тексты программ на ассемблере, или поместить его в каталог C:\masm32\bin , и тогда выполнять его будет можно из любого каталога, при условии, что вы запустили командную строку при помощи prompt.bat .

Итог

То, что получилось в итоге — это простейшая система программирования, состоящая из транслятора (ассемблера MASM), текстового редактора (Notepad2 или иного, если вы его предпочли) и примитивной системы сборки на единственном командном файле.

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

Assembler – Урок 0: Установка компилятора и запуск первой программы через DOSBox 27.06.2021 16:17

В данном курсе планируется разобрать основные особенности программирования на самой простой реализации 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 и видим следующее:

905025751a7d037914be994ca7dec849.JPG

Для начала нам нужно смонтировать диск, на который вы сохранили вашу папку Asm. У меня это диск C, поэтому я прописываю следующую команду:

mount d: c:\asm

8ff1486a85fde1bf2744fd26e758d85f.JPG

Здесь d: это не реальный диск на вашем компьютере, а виртуальный. С таким же успехом вы можете назвать его i или s. А вот C это наоборот реальный диск. Мы прописываем путь до наших файлов ассемблера.

Теперь, откроем смонтированный диск:

Прописав команду dir, вы сможете увидеть все файлы, которые там хранятся. Здесь можно заметить и наш файл CODE с расширением ASM, а так же дату его создания.

9f26805248b3197361b1b87b003f64f3.JPG

И только теперь мы начинает запускать наш файл! Бедные программисты 20 века, как они только терпели всё это? Пропишем следующую команду:

tasm code.asm

После мы увидим следующее сообщение, а наша директория пополнится новым файлом с расширением OBJ.

ab88a97efa85c8ecfec60840d2821bda.JPG

Теперь пропишем ещё одну команду:

tlink code.obj

В нашей папке появилась ещё пара файлов — CODE.MAP и CODE.EXE. Последний как раз и есть исполняемый файл нашего кода assembler.

de94309fbc875167960c4cdf7e22423b.JPG

Если он появился, значит, мы можем запустить режим отладки нашей программы, введя команду последнюю команду. Обратите внимание, теперь мы не указываем расширение файла, который запускаем.

td code

0e9d1f7bdc885fb38598f1e8f4361b40.JPG

Этот старинный интерфейс насквозь пропитан духом ушедшей эпохи старых операционных систем. Тем не менее…

Нажав F7 или fn + F7 вы сможете совершить 1 шаг по коду. Синяя строка начнёт движение вниз, изменяя значения регистров и флагов. Пока это всего лишь шаблон, на которым мы потренировались запускать нашу программу в режиме дебага. Реальное «волшебство» мы увидим лишь в следующих уроках. Пока давайте лишь ознакомимся с имеющимися разделами.

2e7a327866eb7819501c3f863ea4ba4f.jpg

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.

Маленькая шпаргалка для заметок:

  1. mount d: c:\asm — создаём виртуальный диск, где корень –папка asm
  2. d: — открываем созданный диск
  3. tasm code.asm — компилируем исходный код
  4. tlink code.obj — создаём исполняемый файл
  5. td code — запускаем debug
  6. F7 — делаем шаг в программе

Буду ждать комментарии от всех, кому интересен Assembler. Чувствую, я где-то мог накосячить в терминологии или обозначении того или иного элемента. Но статья на Habr отличный повод всё повторить.

Habrahabr.ru прочитано 32358 раз

Статья ASM обучение #2 Установка ПО и первая программа

Раздел данных используется для объявления инициализированных данных или констант. Эти данные не изменяются во время выполнения. Можно объявить различные постоянные значения, имена файлов,размер буфера и т. д. в этом разделе.

Синтаксис для объявления раздела данных:

section.data

Раздел bss используется для объявления переменных. Синтаксис для объявления раздела bss:

 section.bss

Текстовый раздел

Текстовый раздел используется для хранения фактического кода. Этот раздел должен начинаться с объявления global_start, которое сообщает ядру, где начинается выполнение программы.

Синтаксис для объявления текстового раздела:

 section.text global _start _start:

Комментарий на языке ассемблера начинается с точки с запятой (. Он может содержать любые печатные символы, включая пробел. Он может появиться на линии сам по себе, как .

 ; Эта программа отображает сообщение на экране

или, на той же линии, вместе с инструкцией, как

 add eax, ebx ; добавляет значение регистра ebx в eax

Заявления На Языке Ассемблера

  1. Исполняемые инструкции или инструкции
  2. Директивы ассемблера или псевдо-операции
  3. Макросы

Директивы ассемблера или псевдо-opstell ассемблера о различных аспектах процесса сборки. Они не являются исполняемыми и не генерируют инструкции машинного языка.

Макросы-это в основном механизм подстановки текста.

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

Операторы языка ассемблера вводятся по одному оператору на строку. Каждое заявление имеет следующий формат:

[label] mnemonic [операнды] [; комментарий]

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

Ниже приведены некоторые примеры типичных операторов assembly language:

INC COUNT ; прирост памяти переменной COUNT MOV TOTAL, 48; передача значения 48 в ; переменной памяти TOTAL ADD AH, BH ; добавить содержимое BH регистрировать в AH зарегистрируйтесь AND MASK1, 128; ; переменная MASK1 and 128 ADD MARKS, 10 ; Добавить 10 переменной MARKS MOV AL, 10 ; первести значение 10 в AL регистр

Программа Hello World в ASM

Следующий код языка ассемблера отображает строку «Hello World» на экране −

section .text global _start ;должны быть объявлены для компоновщика (ld) _start: ;говорит линкеру точку входа mov edx,len ;сообщает длину mov ecx,сообщение ;сообщение для записи mov ebx,1 ;описатель файла (стандартный вывод) mov eax,4 ;система вызывает номер (sys_write) int 0x80 ;вызов ядра mov eax,1 ;система вызывает номер (sys_exit) int 0x80 ;вызов секции ядра .data msg db 'Hello, world!', 0xa; строка для вывода len equ $ - msg; длина строки

Когда приведенный выше код компилируется и выполняется, он дает следующий результат:

Hello World!

Компиляция и связывание программы сборки в NASM

  1. Введите приведенный выше код с помощью текстового редактора и сохраните его как hello.asm.
  2. Убедитесь, что вы находитесь в том же каталоге, где сохранен hello.asm.
  3. Чтобы собрать программу, введите nasm — f ELF hello.asm
  4. Если есть какая-либо ошибка, вы будете оповещены об этом на данном этапе. В противном случае объектный файл программы с именем Hello.o будет создан.
  5. Чтобы связать объектный файл и создать исполняемый файл с именем hello, введите ld-m elf_i386-s-o hello hello.о
  6. Выполните программу, введя ./hello

Хотелось бы сказать сразу для критиков, это перевод!

Также скажу, что у меня есть ноутбук 2003 года на базе Pentium M, соответственно, всё описанное в этой статье будет в ближайшие дни продемонстрировано, со скринами и прочими интересными и нужными вещами.

За сим я откланяюсь, ждите практики на моём древнем ноуте, желаю хорошего дня.

P.S. я прикрепил опрос, по поводу практики на моём примере

dieZel

Well-known member
Green Team

  • Сообщения 231
  • Реакции 598
CKAP

Green Team
10.06.2019 68 39

Собственно там было много годных советов, ели кому интересно

Ссылка скрыта от гостей

Автор молорик.. Асм в толпе учить веселее.

centr

Green Team
31.01.2017 408 475

Конечно не знаю асм, но думаю если тупо скопипастить код и попытаться запустить, то результат будет нулевым.

CKAP

Green Team
10.06.2019 68 39

Конечно не знаю асм, но думаю если тупо скопипастить код и попытаться запустить, то результат будет нулевым.

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

Последнее редактирование: 12.06.2019

centr

Green Team
31.01.2017 408 475

Гугл транслэйт конечно рулит, однако он переводит всё и даже то, что переводить не нужно(он же не знает что переводить.).

Введите приведенный выше код с помощью текстового редактора и сохраните его как hello.asm

Почему гугл транслэйт?
Да потому что если писать самому, то вероятнее всего будет написано:

Поместите приведённый выше код в текстовый редактор.

С телефона не так удобно писать.

dieZel

Green Team
08.04.2018 231 598

Гугл транслэйт конечно рулит, однако он переводит всё и даже то, что переводить не нужно(он же не знает что переводить.).

Введите приведенный выше код с помощью текстового редактора и сохраните его как hello.asm

Почему гугл транслэйт?
Да потому что если писать самому, то вероятнее всего будет написано:

Поместите приведённый выше код в текстовый редактор.

С телефона не так удобно писать.

Ну вопервых не гугл, а яндекс, а вовторых я этот перевод правлю и делаю читаемым

Конечно не знаю асм, но думаю если тупо скопипастить код и попытаться запустить, то результат будет нулевым.

Я же писал, на днях сделаю практику на своём примере

CKAP

Green Team
10.06.2019 68 39
не гугл, а яндекс,

В таком случае гуль будет удачнее. Не понятно какой тебе от этого кайф.. Заниматься сложными переводами матана про Ассемблер без погружения в Ассемблер 0_________о Скажем для меня, как для новичка это просто возможность подсмотреть некие приколюшечки и не более. Я как лопатил русскоязычных авторов, желательно понимающих о чем они пишут, так и буду. За твои труды конечно лукас. Бат, ай донт андестенд юа )

Отвечая на вопрос Центра.. приём Центр приём.. ыыы

30686

Вобщем нахрапом в НАСМ в прыжке с двух ног сразу, войти. . . не получилось, увы. но мне это пока не о чём не говорит.. может у меня что то настроено через одно место 0____________о Разбираться лениво, подожду практическую работу от ТС.

Аааа я просто не увидел лол.
ну 6 утра было, мне простительно.. Цетр просто протролил ахах

mov ecx, сообщение ;сообщение для записи

Assembler. Установка интерпретатора и запуск первой программы через DOSBox

В данной статье разбирается способ установки интерпретатора и запуск файла EXE через DOSBox. Планировалось погрузить читателя в особенности программирования на TASM, но я согласился с комментаторами. Есть много учебников по Ассемблер и нет смысла перепечатывать эти знания вновь. Лично мне в изучении очень помог сайт av-assembler.ru. Рекомендую. В комментариях также вы найдёте много другой литературы по Assembler. А теперь перейдём к основной теме статьи.

Для начала давайте установим наш старенький интерпретатор.
Ссылка

Почему именно vk.com?

Я прекрасно понимаю, что это ещё тот колхоз делиться файлами через обсуждения VK, но кто знает, во что может превратиться эта маленькая группа в будущем.

После распаковки файлов, советую сохранить их в папке Asm на диск C, чтобы иметь меньше расхождений с представленным тут материалом. Если вы разместите директорию в другое место, изменится лишь путь до файлов, когда вы будете использовать команду mount.

Для запуска интерпретатора нам так же потребуется эмулятор 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. Чтобы это сделать, пропишем следующую команду:

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 шаг по коду. Синяя строка начнёт движение вниз, изменяя значения регистров и флагов. Пока это всего лишь шаблон, на котором мы потренировались запускать нашу программу в режиме дебага. Реальное “волшебство” мы увидим лишь с полноценным кодом на asm.

Небольшой пример для запуска

Прога проверяет, было ли передано верное число открывающих и закрывающих скобок:

s_s segment dw 20 dup('$') s_s ends d_s segment string db '()','$'; result db 0 d_s ends c_s segment assume ss:s_s,ds:d_s,cs:c_s begin: ; начало программы mov ax,d_s mov ds,ax xor ax,ax lea si, string ;Ищем в строке скобку search: lodsb ;Проверка, это конец строки? cmp al, '$' je endString ;Это открывающая или закрывающая скобка? ;Это открывающие скобки? cmp al, '(' je inStack cmp al, '' je outStack cmp al, ']' je outStack jmp search ;Помещаем скобку в Stack, увеличиваем счётчик inStack: inc cx push ax jmp search ;Выниманием из Stack скобку, проверяем пару outStack: ;Была передана лишняя закрыв. скобка? cmp cx, 0 je error3 dec cx pop bx ;Вскрытая скобка закрыта верно? cmp bl, '(' jne close1 cmp al, ')' jne error1 jmp search close1: cmp bl, '[' jne close2 cmp al, ']' jne error1 jmp search close2: cmp bl, '' jne error1 jmp search ;Остались ли незакрытые скобки? endString: cmp cx, 0 jne error2 jmp exit ;Скобки остались, это ошибка №2 error2: mov result, 2 jmp exit ;Лишняя скобка передана, ошибка №3 error3: mov result, 3 jmp exit ;Закрывающая скобка несоответствует открывающей, ош №1 error1: mov result, 1 jmp exit ;Пред-завершение. Каков результат программы? exit: cmp result, 1 jne enough ;Ищем нужную скобку для исправления ошибки №1 cmp bl, '(' jne next1 mov bl, ')' jmp enough next1: cmp bl, '' jmp enough next2: cmp bl, '[' mov bl, ']' jmp enough enough: mov dl, result xor dx, dx mov dl, bl mov ah,4ch int 21h c_s ends end begin

Давайте ознакомимся с имеющимися разделами.

CS

Code segment – место, где turbo debug отражает все найденные строки кода. Важное замечание – все данные отражаются в TD в виде 16-ричной системы. А значит какая-нибудь ‘12’ это на самом деле 18, а реальное 12 это ‘C’. CS аналогичен разделу “Begin end.” на Pascal или функции main.

DS

Data segment, отражает данные, которые TD обнаружил в d_s. Справа мы видим их символьную (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.

Маленькая шпаргалка для заметок:

  1. mount d: c:\asm – создаём виртуальный диск, где корень –папка asm
  2. d: — открываем созданный диск
  3. tasm code.asm – компилируем исходный код
  4. tlink code.obj – создаём исполняемый файл
  5. td code – запускаем debug
  6. F7 – делаем шаг в программе

Буду ждать комментарии от всех, кому интересен Assembler. Чувствую, я где-то мог накосячить в терминологии или обозначении того или иного элемента. Но статья на Habr отличный повод всё повторить.

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

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