Рубрики
Самоучитель по Assembler

Команды работы с битами.

Работать с отдельными битами операндов можно, используя логические операции и сдвиги. Также в системе команд x86 существуют специальные команды для работы с битами: это команды сканирования битов и команды проверки и модификации битов. Команды сканирования битов Сканирование битов выполняется командами BSF и BSR. Эти команды очень похожи. У них 2 операнда. Первый операнд должен быть […]

 
Рубрики
Самоучитель по Assembler

Основы создания макросов в Assembler.

Макросы — это шаблоны для генерации кода. Один раз создав макрос, можно использовать его во многих местах в коде программы. Макросы делают процесс программирования на ассемблере более приятным и простым, а код программы получается понятнее. Макросы позволяют расширять синтаксис ассемблера и даже добавлять собственные «команды», которых нет в процессоре. Также Макросы могут использоваться для ускорения […]

 
Рубрики
Самоучитель по Assembler

Синтаксис объявления меток.

Метка в ассемблере – это символьное имя, обозначающее ячейку памяти, которая содержит некоторую команду. Метка может содержать следующие символы: Буквы (от A до Z и от a до z), Цифры (от 0 до 9, не первым символом), Знак вопроса (?) Точка (.) (только первый символ), Знак (@), Подчеркивание (_), Доллар ($)). Примеры меток: COUNT, PAGE25, […]

 
Рубрики
Самоучитель по Assembler

Локальные переменные.

Локальные переменные в Assembler используются для хранения промежуточных результатов во время выполнения процедуры. В отличие от глобальных, эти переменные являются временными и создаются при запуске процедуры. Для локальных переменных существует понятие области видимости — так называется область программы, в которой доступна переменная. Обычно в ассемблере область видимости ограничена процедурой, создавшей локальную переменную. Создание локальных переменных […]

 
Рубрики
Самоучитель по Assembler

Передача параметров через стек.

В предыдущих уроках все параметры передавались процедурам через регистры. В этой статье мы рассмотрим другой способ — передачу параметров через стек. Часто этот способ оказывается удобнее. Через регистры можно передать максимум 6-7 параметров, а через стек — сколько угодно. Подробнее о стеке можно узнать в этой статье: Стек в Assembler. Помещение параметров в стек Перед […]

 
Рубрики
Самоучитель по Assembler

Команды управления флагами.

Флаги изменяются в результате выполнения арифметических и логических команд, а также команд сдвига. Регистр флагов можно сохранить в стек с помощью команды PUSHF и восстановить из стека с помощью команды POPF. Кроме того, в процессоре существуют специальные команды, которые позволяют явно установить или сбросить флаги CF, DF и IF. Это очень простые команды: у них […]

 
Рубрики
Самоучитель по Assembler

Простые процедуры.

Процедура представляет собой код, который может выполняться многократно и к которому можно обращаться из разных частей программы. Обычно процедуры предназначены для выполнения каких-то отдельных, законченных действий программы и поэтому их иногда называют подпрограммами. Вызов процедуры С помощью команды CALL выполняется вызов процедуры. Эта команда работает почти также, как команда безусловного перехода (JMP), но с одним […]

 
Рубрики
Самоучитель по Assembler

Стек в Assembler.

Стеком называется структура данных, организованная по принципу LIFO («Last In — First Out» или «последним пришёл — первым ушёл»). Стек является неотъемлемой частью архитектуры процессора и поддерживается на аппаратном уровне: в процессоре есть специальные регистры (SS, BP, SP) и команды для работы со стеком. Стек используется для сохранения содержимого регистров, используемых программой, перед вызовом подпрограммы, […]

 
Рубрики
Самоучитель по Assembler

Циклический сдвиг.

Циклический сдвиг отличается от линейного тем, что выдвигаемые с одного конца биты вдвигаются с другой стороны, то есть движутся по кольцу. В процессора x86 существует 2 вида циклического сдвига: простой и через флаг переноса (CF). Простой циклический сдвиг Циклический сдвиг вправо выполняется командой ROR, а влево — командой ROL. При этом старший (для ROL) или […]

 
Рубрики
Основы программирования

Краткий обзор известных языков программирования.

Прежде чем вы захотите изучать какой-нибудь язык программирования надо знать немного об их истории и где они применяются. Я представляю вам краткий обзор 25 известных языков программирования. Начиная с самого известного до менее популярного. Статья сделана для новичков в сфере программирования. Вы можете почитать о каждом языке и выбрать тот который вам больше понравиться для […]

 
Рубрики
Самоучитель по Assembler

Линейный сдвиг.

Сдвиги — это особые операции процессора, которые позволяют реализовать различные преобразования данных, работать с отдельными битами, а также быстро выполнять умножение и деление чисел на степень 2. Логический сдвиг вправо Логический сдвиг всегда выполняется без учёта знакового бита. Для логического сдвига вправо предназначена команда shr. У этой команды два операнда. Первый операнд представляет собой сдвигаемое […]

 
Рубрики
Самоучитель по Assembler

Условные и безусловные переходы.

Нарушение естественного порядка следования команд, когда адрес следующей выполняемой команды автоматически вычисляется программным счетчиком, осуществляется путем загрузки в программный счетчик и, при необходимости, в сегментный регистр CS новых адресов. Эти действия выполняются при помощи команд условных и безусловных переходов. Безусловные переходы Безусловный переход — это переход, который выполняется всегда. Безусловный переход осуществляется с помощью команды […]

 
Рубрики
Самоучитель по Assembler

Логические операции.

Логическая операция — это операция над выражениями логического (булевского) типа, соответствующая некоторой операции над высказываниями в алгебре логики. Как и высказывания, логические выражения могут принимать одно из двух истинностных значений — «истинно» или «ложно». Сегодня мы рассмотрим наиболее применяемые логические операции в языке Assembler, а именно: Логическое побитовое И; Логическое побитовое ИЛИ; Логическое НЕ (инверсия); […]

 
Рубрики
Самоучитель по Assembler

Режимы адресации.

Режимы адресации в assembler — это различные способы указания местоположения операндов. Эти режимы позволяют организовать работу с массивами, структурами, локальными переменными и указателями. Сегодня мы рассмотрим все режимы адресации. Все имеющиеся режимы адресации можно условно разделить на три группы: регистровая, непосредственная и с указанием адреса памяти. При этом адрес памяти можно задавать по-разному: прямым указанием […]

 
Рубрики
Самоучитель по Assembler

Циклы в ассемблере.

В любом языке программирования, как и в языке Assembler, циклом называется повторяющееся выполнение последовательности команд. Рассмотрим сегодня как организовывать циклы в Assemblere. Команда LOOP Для организации цикла предназначена команда LOOP. У этой команды один операнд — имя метки, на которую осуществляется переход. В качестве счётчика цикла используется регистр CX. Команда LOOP выполняет декремент CX, а […]

 
Рубрики
Самоучитель по Assembler

Преобразование типов в ассемблере.

Бывает так что нужно выполнить действия с числами разного размера. Но напрямую процессор не умеет выполнять такие операции, поэтому в этом случае необходимо выполнять преобразование типов. И сегодня я постараюсь объяснить как это делается. Преобразование отрицательных типов Преобразование отрицательных типов выполняется путём копирования знакового бита на всю старшую часть. Для такого преобразования предназначена команда MOVSX […]

 
Рубрики
Самоучитель по Assembler

Умножение и деление в ассемблере.

Все мы знаем со школы что такое умножение и деление и конечно же в ассемблере эти команды присутствуют, и я расскажу Вам о них. В ассемблере умножение и деление для положительных и отрицательных чисел выполняются по-разному. Умножение положительных чисел Для умножения положительных чисел в ассемблере предназначена команда “MUL”. У этой команды только один операнд — […]

 
Рубрики
Самоучитель по Assembler

Положительные и отрицательные числа.

С предыдущих уроков по языку Assembler мы знаем что процессор работает с двоичными числами, эти числа могут быть положительными или отрицательными. И сегодня я подробно расскажу какие бывают положительные (без знака) и отрицательные (со знаком) числа. Положительные числа Если число положительное, то оно просто представляет собой результат перевода десятичного числа в двоичный вид. Для представления […]

 
Рубрики
Самоучитель по Assembler

Директивы объявления данных.

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

 
Рубрики
Самоучитель по Assembler

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

Вот и пришло время написать нашу первую программу на языке Assembler. Начнем мы с процессора Intel 8086. Будем писать программу под DOS. Программирование под Windows и Linux сложнее. Поэтому начнем с простого и понятного 16-битного процессора 8086. DOS (дисковая операционная система, ДОС) — семейство операционных систем для персональных компьютеров, ориентированных на использование дисковых накопителей, таких […]

 
Рубрики
Самоучитель по Assembler

Система счисления.

Перед началом практического изучения Assemblera мы должны усвоить теоретическую часть языка. И сегодня я расскажу вам о системе счисления т.к. в Assemblere она используется. В школе на информатике вы скорее всего это и проходили, но я все же повторю материал. Система счисления – это символический метод записи чисел, представление чисел с помощью письменных знаков. Система […]

 
Рубрики
Самоучитель по Assembler

Структура процессора.

Чтобы нормально знать ассемблер, надо знать, что такое процессор. Именно поэтому я решил написать данную статью. Мы рассмотрим что такое процессор и его структуру. Центральный процессор – электронный блок либо интегральная схема (микропроцессор), исполняющая машинные инструкции (код программ), главная часть аппаратного обеспечения компьютера или программируемого логического контроллера. Вот упрощённая структура процессора: Основные элементы процессора: Самое […]

 
Рубрики
Самоучитель по Assembler

Зачем нужно изучать ассемблер.

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