Регистр EAX
Универсальное хранилище-аккумулятор. Используется при операциях умножения и деления. Обычно используется как буферная память для вычислений, передачи параметров и возврата результата выполнения подпрограммы (функции). Часто используется при системных вызовах операционных систем. Регистр EAX имеет разрядность 32 бита. Можно обратиться к младшим 16-ти битам через регистр AX. Сам же регистр AX делится на две части - младший байт(AL) и старший байт(AH).
EAX | |||
AX | |||
AH | AL |
Регистр EBX
Применяется для указания адреса памяти. Его еще называют регистром базы. Часто используется в командах доступа к оперативной памяти. Обычно используется в паре со смещением. Регистр EBX имеет разрядность 32 бита. Можно обратиться к младшим 16-ти битам через регистр BX. Сам же регистр BX делится на две части - младший байт(BL) и старший байт(BH).
Регистр ECX
Используется для счетчиков. Команды циклов процессора основаны именно на этом регистре. Эти команды автоматически меняют значение этого регистра. Необходим для управления числом повторений циклов, операций сдвига влево или вправо.
Регистр EDX
Применяется для передачи данных. Похож на регистр процессора EAX. Часто используется при системных вызовах операционных систем для передачи параметров.
EFLAGS -Флаговый регистр после выполнения каждой команды меняет свое значение. Сигнализирует процессору о том, как выполнилась арифметическая или логическая команда.
Регистр EIP - служебный регистр. Указывает на текущую исполняемую инструкцию процессора.
Запись в этот регистр командами перемещения данных невозможна. Этот регистр изменяет или сам процессор при переходе на следующую команду, или программист инструкциями перехода, вызова процедур и командами организации цикла. Содержит адрес команды, которая должна выполняться следующей
|
Регистр EIP имеет разрядность 32 бита. К 16-ти младшим битам регистра можно обратиться по имени IP.
Однако старшие половины 32-разрядных регистров не имеют мнемонических обозначений и непосредственно недоступны. Для того, чтобы прочитать, например, содержимое старшей половины регистра ЕАХ (биты 31...16) придется сдвинуть все содержимое ЕАХ на 16 бит вправо (в регистр АХ) и прочитать затем содержимое АХ.
Shr eах,16;сдвигаем EАХ на 16 бит вправо
mov ЕАХ,0FFFFFFFFh;Работа с двойным словом (32 бит)
mov AX,0FFFFh;Работа со словом (16 бит) -word (2 байта)
mov AL, 0FFh;Работа с байтом (8 бит)
Ассемблер - язык программирования низкого уровня. Под ассемблером обычно понимают язык описания команд процессора в удобочитаемом текстовом виде. После написания кода для перевода его в машинный код используют компилятор ассемблера, которые так и называется Ассемблер. Обычно каждая строчка в текстовом файле.asm переводится в одну инструкцию процессора - один или несколько байт машинного кода.
Процессор непосредственно не имеет доступа к памяти ПЗУ, ОЗУ. При запуске программы на выполнение, она загружается из ПЗУ в ОЗУ, частями читается и данные копируются в регистры процессора. При выполнении арифметических операций необходимо контролировать размерность слов. Размерность операндов должна быть одинаковой. Чтобы увеличить число с одного байта до двух, необходимо в старший байт занести 0.
Команды перемещения
|
MOV R1,R2 | Копирование из R2 в R1,при этом в R2 тоже осталось |
MOV AL,6h | Занесли в AL цифру 6. h обозначает, что число представлено в шестнадцатир сист |
MOV BL,AL | Скопировали 6 из AL в BL |
MOV BH,0 | Увеличили число 6 до двух байт, теперь оно записано в BX |
Сложение | |
ADD R1,R2 | Запись результата в R1. R1 =R1+ R2. В R2 осталось прежнее число |
ADD AL,BL | AL =AL+ BL результата помещается в регистр, записанный первым |
Вычитание | |
SUB R1,R2 | R1 =R1- R2 |
SUB AL,BL | AL =AL-BL |
Умножение | |
MUL R1 | Умножить на содержимое регистра R1. Первый множитель процессор берет сам из AL(если размер R1 байт) AL*R1=AX ответ при умножении в два раза длиннее множителей и автоматически помещается в AX |
MUL BX | Так как BX размером 2 байта, то AX*BX и ответ записывается в регистровую пару DX:AX автоматически и будет иметь размерность 4 байта |
Деление | |
DIV R1 | Разделить на содержимое регистра R1, если это число размером 1 байт, то делимое берется размером 2 байта, т е процессор сам берет AX. AX/ R1 результата помещается в AL автоматически. Размер результата такой же, как делителя. |
DIV CL | AX/CL результат помещается в AL |
DIV BX | Делимое автоматически берется из регистровой пары DX:AX/ BX, результат помещается в AX |
Assembler - регистры и арифметические команды-видео на you tube 19 мин посмотреть
Assembler - простая программа -видео на you tube 13 мин
Система команд микропроцессора
Микропроцессор - это программно управляемое устройство, предназначенное для обработки цифровой информации и управления процессами этой обработки, выполненной в виде одной или нескольких интегральных схем с высокой степенью интеграции электронных компонентов. Микропроцессор выполняет команды из фиксированного набора, который называется системой команд микропроцессора.
|
Хотя наборы команд, реализованных в разных процессорах, различаются по количеству и перечню команд, по способам кодирования, по длине команд и по времени их выполнения, в системах команд разных процессоров есть весьма много общего. Знание этих общих свойств помогает быстрее освоить программирование нового процессора.
Система команд - это набор допустимых для данного процессора управляющих кодов и способов адресации данных. Система команд жестко связана с конкретным типом процессора, поскольку определяется аппаратной структурой блока дешифрации команд, и обычно не обладает переносимостью на другие типы процессоров (хотя может иметь место совместимость “снизу-вверх” в рамках серии процессоров, как, например, в серии i80x86).
Система команд любой ЭВМ обязательно содержит следующие группы команд обработки информации.
1. Команды передачи данных (перепись), копирующие информацию из одного места в другое MOV-пересылка операндов.
2. Арифметические операции, к которым в основном относят операции сложения ADD AL,BL и вычитания SUB AL,BL. Умножение MUL BX и деление DIV CL.
3. Логические операции, позволяющие компьютеру производить анализ получаемой информации. Простейшими примерами команд рассматриваемой группы могут служить сравнение, а также известные логические операции AND - логическое умножение (И), OR- логическое сложение (ИЛИ), NOT -логическое отрицание (НЕ).
4. Сдвиги двоичного кода влево и вправо.
Shr eах,16;сдвигаем EАХ на 16 бит вправо
Shl ах,16;сдвигаем АХ на 16 бит влево.
В некоторых случаях сдвиги используются для реализации умножения и деления.
5. Команды ввода и вывода информации для обмена с внешними устройствами. IN REG,PORT
OUT PORT, REG
В некоторых ЭВМ внешние устройства являются специальными служебными адресами памяти, поэтому ввод и вывод осуществляется с помощью команд переписи.
6. Команды управления, реализующие нелинейные алгоритмы. Сюда относят условный (JC метка) и безусловный переходы(JMP метка), а также команды обращения к подпрограмме (переход с возвратом). Часто к этой группе относят операции по управлению процессором типа останов или нет операции.
Формат команды.
Любая команда ЭВМ обычно состоит из двух частей – операционной и адресной. Операционная часть, называемая также кодом операции, указывает, какое действие необходимо выполнить с информацией. Операционная часть имеется у любой команды. Адресная часть описывает, где используемая информация хранится и куда поместить результат. В некоторых командах управления работой машины адресная часть может отсутствовать.
Код операции можно представить себе как некоторый условный номер в общем списке команд. В основном этот список построен в соответствии с определенными внутренними закономерностями.
Адресная часть обладает значительно большим разнообразием. Основу адресной части составляет операнд. В зависимости от количества возможных операндов команды могут быть одно- (MUL BX) и двухадресные(ADD AL,BL). В двухадресных командах результат записывается либо в специальный регистр (сумматор), либо вместо одного из операндов.
По числу команд в системе команд МП делятся на МП с CISC-архитектурой (Complex Instruction Set Computer) и МП сRISC-архитектурой (Reduced Instruction Set Computer).
CISC(Complex Instruction Set Computer)-apxumeкmypa реализована во многих типах микропроцессоров, выполняющих большой набор разноформатных команд с использованием многочисленных способов адресации. Эта классическая архитектура процессоров, которая начала свое развитие в 1940-х годах с появлением первых компьютеров. Типичным примером CISC-процессоров являются микропроцессоры семейства Pentium. Они выполняют более 200 команд разной степени сложности, которые имеют размер от 1 до 15 байт и обеспечивают более 10 различных способов адресации. Причем, для выполнения различных команд требуется различное время. Такое большое многообразие выполняемых команд и способов адресации позволяет программисту реализовать наиболее эффективные алгоритмы решения различных задач. Однако при этом существенно усложняется структура микропроцессора, особенно его устройства управления, что приводит к увеличению размеров и стоимости кристалла, снижению производительности. В тоже время многие команды и способы адресации используются достаточно редко. Поэтому, начиная с 1980-х годов, интенсивное развитие получила архитектура процессоров с сокращенным набором команд (RISC-процессоры).
RISC(Reduced Instruction Set Computer)-apxumeкmypa отличается использованием ограниченного набора команд фиксированного формата. Современные RISC-процессоры обычно реализуют около 100 команд, имеющих фиксированный формат длиной 4 байта. Для их выполнения требуется одинаковое время, сведенное до минимума (одного такта). Также значительно сокращается число используемых способов адресации. Обычно в RISC-процессорах все команды обработки данных выполняются только с регистровой или непосредственной адресацией. При этом для сокращения количества обращений к памяти RISC-процессоры имеют увеличенный объем внутреннего РЗУ - от 32 до нескольких сотен регистров, тогда как в CISC-процессорах число регистров общего назначения обычно составляет 8-16.
VLIW (англ. very long instruction word — «очень длинная машинная команда») — архитектура процессоров с несколькими вычислительными устройствами. Характеризуется тем, что одна инструкция процессора содержит несколько операций, которые должны выполняться параллельно. Фактически это «видимое программисту» микропрограммное управление, когда машинный код представляет собой лишь немного свёрнутый микрокод для непосредственного управления аппаратурой.
https://prog-cpp.ru/asm-command/