Основные регистры -8,16, 32 битные использование, характеристики

Заглавие Разрядность Основное предназначение
EAX Аккумулятор
EBX База
ECX Счётчик
EDX Регистр данных
EBP Указатель базы
ESP Указатель стека
ESI Индекс источника
EDI Индекс приёмника
EFLAGS Регистр флагов
EIP Указатель аннотации (команды)
CS Сегментный регистр
DS Сегментный регистр
ES Сегментный регистр
FS Сегментный регистр
GS Сегментный регистр
SS Сегментный Основные регистры -8,16, 32 битные использование, характеристики регистр

Регистры EAX, EBX, ECX, EDX – это регистры общего предназначения. Они имеют определённое предназначение (так сложилось исторически), но в их можно хранить всякую информацию.

Регистры EBP, ESP, ESI, EDI – это также регистры общего предназначения. Они имеют уже более конкретное предназначение. В их также можно хранить пользовательские данные, но делать это необходимо уже Основные регистры -8,16, 32 битные использование, характеристики более осторожно, чтоб не получить «неожиданный» итог.

Регистр флагов и сегментные регистры требуют отдельного описания и будут более тщательно рассмотрены дальше.

Пока вам тут очень много непонятных слов, но с течением времени всё прояснится)))

Когда-то микропроцессоры были 16-разрядными, и, соответственно, все их регистры были также 16-разрядными. Для сопоставимости Основные регистры -8,16, 32 битные использование, характеристики со старенькыми программками, также для удобства программирования некие регистры разбиты на 2 либо 4 «маленьких» регистра, у каждого из которых есть свои имена. В таблице 2.2 перечислены такие регистры.

Вот вам наглядный пример такового регистра.

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

MOV AX Основные регистры -8,16, 32 битные использование, характеристики, 1

MOV EAX, 1

Обе команды поместят в регистр AX число 1. Разница будет заключаться исключительно в том, что 2-ая команда обнулит старшие разряды регистра EAX, другими словами после выполнения 2-ой команды в регистре EAX будет число 1. А 1-ая команда оставит в старших разрядах регистра EAX старенькые данные. И если там Основные регистры -8,16, 32 битные использование, характеристики были данные, хорошие от нуля, то после выполнения первой команды в регистре EAX будет какое-то число, но не 1. А вот в регистре AX будет число 1. Трудно? Ну это пока… С течением времени вы к таким вещам привыкните.

Мы пока не гласили о разрядах (битах). Данную тему мы Основные регистры -8,16, 32 битные использование, характеристики обсудим в разделах, посвящённых системам счисления. А на данный момент пока вам довольно знать, что нулевой разряд (бит) – это младший бит. Он последний справа. Старший бит – последний слева. Номер старшего бита находится в зависимости от разрядности числа/регистра. К примеру, в 32-разрядном регистре старшим битом является 31-й бит (так как Основные регистры -8,16, 32 битные использование, характеристики отсчёт начинается с 0, а не с 1).

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

Регистр Старшие разряды Имена 16-ти и 8-ми битных регистров
31…16 15…8 7…0
EAX ... AX
AH AL
EBX ... BX Основные регистры -8,16, 32 битные использование, характеристики
BH BL
ECX ... CX
CH CL
EDX ... DX
DH DL
ESI ... SI
EDI ... DI
EBP ... BP
ESP ... SP
EIP ... IP

Циклы.

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

Метка представляет собой символическое имя, заместо которого компилятор подставляет адресок. В программке на ассемблере можно присвоить имя хоть какому адресу в коде либо Основные регистры -8,16, 32 битные использование, характеристики данных. Обычно метки употребляются для организации переходов, циклов либо каких-либо манипуляций с данными. На самом деле имена переменных, объявленных при помощи директив объявления данных, тоже являются метками. Но с ними компилятор дополнительно связывает размер переменной. Метка объявляется до боли просто: довольно сначала строчки написать имя и поставить двоеточие. К Основные регистры -8,16, 32 битные использование, характеристики примеру:

m1: mov ax,4C00h int 21h

Сейчас заместо имени m1 компилятор всюду будет подставлять адресок комады mov ax,4C00h. Можно объявлять метку на пустой строке перед командой:

exit_app: mov ax,4C00h int 21h

Имя метки может состоять из латинских букв, цифр и знаков подчёркивания, но Основные регистры -8,16, 32 битные использование, характеристики должно начинаться с буковкы. Имя метки должно быть уникальным. В качестве имени метки нельзя использовать директивы и ключевики компилятора, наименования команд и регистров (в данном случае FASM покажет сообщение об ошибке). FASM различает регистр знаков в именах меток. Можно также объявлять несколько меток на один адресок. К примеру:

no Основные регистры -8,16, 32 битные использование, характеристики_error: exit_app: m1: mov ax,4C00h

Подробнее о синтаксисе объявления меток рассказывается в части 27.

Команда LOOP

Для организации цикла предназначена команда LOOP. У этой команды один операнд — имя метки, на которую осуществляется переход. В качестве счётчика цикла употребляется регистр CX. Команда LOOPвыполняет декремент CX, а потом Основные регистры -8,16, 32 битные использование, характеристики инспектирует его значение. Если содержимое CX не равно нулю, то осуществляется переход на метку, по другому управление перебегает к последующей после LOOP команде.

Содержимое CX интерпретируется командой как число без знака. В CX необходимо помещать число, равное требуемому количеству повторений цикла. Понятно, что очень может быть 65535 повторений. Ещё одно ограничение Основные регистры -8,16, 32 битные использование, характеристики связано с дальность перехода. Метка должна находиться в спектре -127…+128 б от команды LOOP (если это не так, FASM скажет об ошибке).

Пример цикла

В качестве примера я приведу ординарную программку, которая будет печатать все буковкы британского алфавита. ASCII-коды этих знаков размещены поочередно, потому можно выводить их в цикле. Для вывода знака Основные регистры -8,16, 32 битные использование, характеристики на экран употребляется функция DOS 02h (выводимый б должен находиться в регистре DL).

use16 ;Генерировать 16-битный код org 100h ;Программка начинается с адреса 100h mov ah,02h ;Для вызова функции DOS 02h - вывод знака mov dl,'A' ;1-ый выводимый знак mov cx,26 ;Счётчик повторений цикла metka: int Основные регистры -8,16, 32 битные использование, характеристики 21h ;Воззвание к функции DOS inc dl ;Последующий знак loop metka ;Команда цикла mov ah,09h ;Функция DOS 09h - вывод строчки mov dx,press ;В DX адресок строчки int 21h ;Воззвание к функции DOS mov ah,08h ;Функция DOS 08h - ввод знака без эха int 21h ;Воззвание к функции Основные регистры -8,16, 32 битные использование, характеристики DOS mov ax,4C00h ;\ int 21h ;/ Окончание программки ;------------------------------------------------------- press: db 13,10,'Press any key...$'

Условные операторы.

Условный оператор if-else употребляется для принятия решения о предстоящем пути

выполнения программки. Синтаксис условного оператора в нотации языков С и C++:

if (выражение) оператор_1;

else оператор_2

Метод работы условного оператора — рассчитывается логическое значение выражения Основные регистры -8,16, 32 битные использование, характеристики: если оно поистине, то производится оператор_1, в неприятном случае — оператор_2.

В общем случае условный оператор может состоять из 1-го блока if (без бло­ка else):

if (выражение) оператор_1;

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

маленький вариант оператора if (выражение) оператор_1; cmp Основные регистры -8,16, 32 битные использование, характеристики opl,op2 вычисление выражения jne endif

;... последовательность команд, соответственная оператор_1

endif: ;конец коротково условново оператора

Строго говоря, внедрение команды СМР при реализации условного оператора не является неотклонимым. В этом случае она быстрее обозначает место вычисления некого условия в программке, по результатам которого принимается решение о ветвлении. Заместо данной команды можно Основные регистры -8,16, 32 битные использование, характеристики использовать всякую команду, изменяющую флаг, который будет анализироваться следующим оператором условного перехода. Эти же рассуждения касаются и команды JNE, заместо которой может сто­ять требуемая в данном вычислительном контексте команда условного перехода:

:полный вариант оператора if (выражение) оператор_1; else оператор_2 cmp opl,op2 вычисление выражения jne elsel

;... последовательность команд, соответственная оператор і

jmp Основные регистры -8,16, 32 битные использование, характеристики endif elsel:

;... последовательность команд, соответственная оператор_2

endif: ;конец полного условного оператора.

Процедуры .

Команды CALL и RET

Для работы с процедурами предусмотрены команды CALL и RET. При помощи команды CALL выполняетсявызов процедуры. Эта команда работает практически также, как команда бесспорного перехода (JMP), но с одним различием — сразу в стек сохраняется текущее Основные регистры -8,16, 32 битные использование, характеристики значение регистра IP. Это позволяет позже возвратиться к тому месту в коде, откуда была вызвана процедура. В качестве операнда указывается адресок перехода, который может быть конкретным значением (меткой), 16-разрядным регистром (не считая сегментных) либо ячейкой памяти, содержащей адресок.

Возврат из процедуры производится командой RET. Эта команда восстанавливает Основные регистры -8,16, 32 битные использование, характеристики значение из верхушки стека в регистр IP. Таким макаром, выполнение программки длится с команды, последующей сходу после команды CALL. Обычно код процедуры завершается этой командой. Команды CALL и RET не изменяют значения флагов (не считая неких особенных случаев в защищенном режиме). Маленький пример различных методов вызова процедуры:


osnovnie-sposobi-videleniya.html
osnovnie-sql-zaprosi-sintaksis-sql-zaprosov.html
osnovnie-sredstva-fizicheskoj-kulturi.html