Рубрики
Учебный курс

Урок 12. Преобразование типов

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

Рубрики
Учебный курс

Урок 11. Умножение и деление

Поход на рынок, как правило, заканчивается покупкой какого-либо товара. Если мы хотим купить несколько единиц товара одного наименования, то продавец посчитает нам итоговую сумму с использованием простейшего компьютера – микрокалькулятора. В аналогии с ассемблером при умножении товаров программа микрокалькулятора будет оперировать с числами без знака, поскольку нельзя купить минус три пури или минус пять круассанов. […]

Рубрики
Учебный курс

Учебный курс. Урок 10. Сложение и вычитание с переносом

Регистры процессоров ограничены в разрядности архитектурой процессора (как правило, x86/64), поэтому сложение чисел, как из реального мира, так и из виртуального в ассемблере имеет дополнительные нюансы. В предыдущем Уроке 9. Сложение и вычитание операции сложения и вычитания выполнялись только в границах размеров регистров. Сложение операндов превышающих размеры регистров приводит к переполнению и установке флага CF. […]

Рубрики
Учебный курс

Учебный курс. Урок 9. Сложение и вычитание

После того, как мы изучили механизм представления и обработки чисел процессором, самое время начать знакомство с инструкциями. Ну а к самым простым инструкциям в ассемблере безусловно относятся мнемоники для сложения и вычитания чисел — ADD и SUB. Сложение — команда ADD Инструкция ADD выполняет сложение двух операндов. ADD можно «скармливать» числа со знаком и без […]

Рубрики
Учебный курс

Учебный курс. Урок 8. Числа со знаком и без

Со школьной скамьи нас учили, что у чисел бывают отрицательные значения. Дело выглядело просто, записываешь число на бумаге, рисуешь черточку слева и все – положительное число превратилось в отрицательное. Для арифметической операции нужно от положительного числа отнять модуль отрицательного числа. К сожалению, такой подход совершенно не приемлем для машинных вычислений, потому что процессор не разделяет […]

Рубрики
Учебный курс

Учебный курс. Урок 7. Системы счисления

Эта статья по большей части для совсем начинающих. Если вы хорошо разбираетесь в системах счисления, можете обратить внимание лишь на особенности синтаксиса ассемблера FASM в конце статьи. На самом деле процессор работает только с двоичными числами, состоящими из единиц и нулей В виде двоичных чисел хранятся и обрабатываются все данные и команды любой программы. Однако, двоичная запись чисел слишком громоздка и неудобна для […]

Рубрики
Учебный курс

Учебный курс. Урок 6. Hello, world!

В этой части наконец-то напишем долгожданный «Hello, world!». Теперь почти всё должно быть понятно. Откроем в текстовом редакторе новый файл и сохраним его как hello.asm в директории C:\fasm. Для начала необходимо с помощью директивы db объявить строку, содержащую сообщение «Hello, word!». Лучше сделать это в конце программы, за последней командой, иначе процессор может принять строку за код […]

Рубрики
Учебный курс

Учебный курс. Урок 5. Директивы объявления данных

Практически любая программа кроме машинных команд содержит также какие-то данные. Например, числа, текстовые строчки, идентификаторы, различные ресурсы и т.д. Данные могут быть как константами, не меняющими своё значение во время выполнения программы, так и переменными, в которых хранятся всякие промежуточные результаты. Прежде всего нужно научиться объявлять данные в программе. Для этого в ассемблере существуют директивы объявления данных. Размер(в байтах) Объявление Резервирование 1 db […]

Рубрики
Учебный курс

Учебный курс. Урок 4. Регистры процессора 8086

Для того, чтобы писать программы на ассемблере, нам необходимо знать, какие регистры процессора существуют и как их можно использовать. Все процессоры архитектуры x86 (даже многоядерные, большие и сложные) являются дальними потомками древнего Intel 8086 и совместимы с его архитектурой. Это значит, что программы на ассемблере 8086 будут работать и на всех современных процессорах x86. Все […]

Рубрики
Учебный курс

Учебный курс. Урок 3. Turbo Debugger

В предыдущем уроке мы скомпилировали свою первую программу. Пока мы не знаем, что она делает. Чтобы узнать, откроем её в отладчике и шаг за шагом пройдем каждую команду. Прежде всего необходимо запустить отладчик. Не спешите запускать DOSBox. Сначала еще раз отредактируем dosbox.conf. Предлогаю вернуться в предущий урок, чтобы освежить память про редактирование dosbox.conf и посмотреть, […]