Код магнитолы

JS - телефон

Оппозиция в России ?

Россия и Украина

Мысли в слух...

JS - часы

Российская...власть ?

Skype

Создаём сайт

Любимые сериалы

Гостевая


На главную

Понятия не имею - что именно занесло меня на эту страничку. Даже беглое знакомство с языком "низшего уровня" (?!) по имени 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.exe
TASM.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) именно в корневом каталоге ассемблера - подключение программ к системе, позволяет делать это где угодно.

дальше...