Понятия не имею - что именно занесло меня на эту страничку. Даже беглое знакомство
с языком "низшего уровня" (?!) по имени assembler позволило понять, что ни
проигрывателя, ни калькулятора на нём не напишешь, хотя...
Начинать, похоже, надо
было именно с него! Та-же Java (да и Android), не говоря-уж о HTML, DOM, PHP и JAVAX,
предстают совершенно в ином свете. Что-бы было понятно -
я не стараюсь чему-либо научить,
для этого есть умные книжки, я пытаюсь рассказать - как я сам учился.
Забегая вперёд, с
учётом собственного опыта, могу посоветовать следующий порядок "подхода" к ассемблеру:
1: И.Скляров "Изучаем Assembler за 7 дней", 2010
2: С.Зубков "Assembler для DOS, Windows
и Unix", СПб:Питер, 2004
3: Е.Вставская "Программирование на языке Ассемблера", Ю-УГУ, 2010
4: Е.Ружицкая "Программирование на языке Assembler. Архитектура и программирование сопроцессора",
"BCD числа, цепочечные команды",
Гомель, ГГУ им. Ф.Скорины, 2016
Eсли заинтересуетесь ассемблер-арифметикой: П.Соколенко
"Арифметика длинных чисел", Р-Д.
Посчитаем?
Считать придётся сразу в трёх
системах счисления: десятичной(
dec), двоичной(
bin) и шестнадцатиричной(
hex). И, хотя, ассемблер
одинаково терпимо относится ко всем трем, прерывание
принято указывать именно в
hex.
Ниже предложен сравнительный вариант всех трёх систем счисления. При этом - двоичная,
для
8-ми разрядного процессора. Когда-то именно с таких всё начиналось.
***
Первые процессоры работали в электронных арифмометрах и, что-бы отобразить результат
их работы (цифры и символы), необходимо было 7+1=8 сигналов:
__
|__|
|__|.
Любую цифру можно было сложить из 7 сигналов + точка.
***
разряды: 7 6 5 4 3 2 1 0
dec : 1 2 3 4 5 = 12345 (основание 10)
bin : 0 1 1 0 0 0 0 1 = 97 (основание 2)
hex : A 7 = 167 (основание 16)
рис.1
Каждая система счисления имеет разрядность.
Считаются разряды
справа - налево и начинаются с
0. Что-бы получить
число, необходимо
каждую цифру числа умножить на основание, возведённое в степень, равную
разряду цифры, а затем - сложить полученые результаты:
dec: 1*104+2*103+3*102+4*101+5*100= 12345
bin: 0*27+1*26+1*25+0*24+0*23+0*22+0*21+1*20= 97
hex: 10*161+7*160= 167
В ассемблере последняя строчка (рис.1)
будет выглядеть иначе:
0А7h. Если
hex-число начинается с буквы, то перед ней
ставится
0. Завершается
hex-число буквой
h. Откуда взялась буква? К цифрам
десятичной системы счисления добавили буквы латинского алфавита: 0,1...9,A(10),B(11),C(12),
D(13),E(14),F(15). Двоичное число в ассемблере - завершается буквой
b.
Если не вдаватся
в частности, то ассемблер - это язык, в котором двоичный код (
bin) заменён символами,
более понятными для человеческого восприятия. Для каждой ОС эти символы свои и ассемблер, соответственно,
то-же свой. Мы будем говорить о ассемблере процессора
Intel. Для работы с ним уществуют различные программы.
Как утверждают источники - турбоассемблер
TASM - это прошлое, будущее за макроассемблером
MASM, созданным Microsoft (мы говорим о
Intel). Поверим им на слово, но скачаем и
установим обе программы:
masm32v10r.zip-->install.exeTASM.zip
PSPad.exe - этот файл подключаем в панель Total Commander (рекомендую -
полезная штука).
Схематично это будет выглядеть так:
[masm32]_ <-- каталог появится при инсталяции
|_[bin]_
| |_ ...
| |_ afdpro.exe
| |_ link.exe
| |_ link16.exe
| |_ ml.exe
| |_ ...
|_ ...
|_[docs] <-- создаём каталог для документов (на усмотрение)
|_ ...
|_[project]_ <-- создаём каталог проекта
|_ ... |_[01_о_чём]_ <-- подкаталог проекта
| |_ 01.asm <-- файл проекта
| |_ file.bat <-- вспомогательный файл проекта
| |_ 01.com(01.exe) <-- исполнительный файл проекта
|_ ...
рис.2
В случае с zip-файлом - корневой каталог необходимо будет создать.
Редактор
PSPad.exe - очень полезная вспомогательная программа, позволяющая, среди протчего,
одним кликом превращать набранный
asm-код в
hex-код.
Конечным продуктом всех
ваших пректов будут
ехе-файлы.
Как утверждают источники - изучение ассемблера лучше начинать
с написания
com-файлов, как более простых (не более 64kb). Они действительно более
компактны, чем
ехе-файлы и более
оптимальны в плане использования памяти. Это связано
с тем, что они работают, в основном, с 8-16-ти разрядными сегментами.
Если оставить
в стороне рациональное использование памяти, то лучше работать с
ехе-файлами. Поскольку современные ОС
просто не хотят работать с
com-файлами, а на стадии обучения - это сильно напрягает. Не совсем
бывает понятно - то-ли ты ошибся в программе, то-ли ОС просто чихает на твою программу.
Попробуем это дело обойти.
После
скачивания и установки программ (и лучше - не на системном диске), необходимо
их подключить:
Пуск-->Настройки-->Система-->Дополнительно-->Системные переменные-->
Создать: имя MASM, значение disk:\masm32\bin-->сохранить. Переходим к переменной
Path:
Изменить-->в самый конец, после ;, добавляем %MASM%.
Аналогичную процедуру проделываем с TASM.
Это подключение позволит использовать вспомогательныe
bat-файлы. Не обязательно создавать проект (рис.2) именно в корневом каталоге ассемблера
- подключение программ к
системе, позволяет делать это где угодно.
дальше...