- •1. Регистры общего назначения:
- •Добавление элемента в стек
- •9. Вычитание двоичных чисел без знака
- •10.Вычитание двоичных числе со знаком
- •11. Умножение двоичных чисел без знака
- •12. Деление двоичных чисел без знака
- •13.Умножение двоичных чисел со знаком
- •Пример программы
- •Безусловные переходы
- •19.Команда сравнения, усл переход для ком-ды сравнения.
- •20.Команды условного перехода по состоянию флагов
- •21.Организация циклов
- •Команда loop
- •Cmp eax, ebx; {сравниваем eax с ebx} je @IfNot; {если равны, то переходим на иначе} используются команды сравнения
- •Епочечные команды
- •Ins адрес_приемника,номер_порта insb insw insd
Добавление элемента в стек
Выполняется командой PUSH. У этой команды один операнд, который может быть непосредственным значением, 16-битным регистром (в том числе сегментым) или 16-битной переменной в памяти. Команда работает следующим образом:
значение в регистре SP уменьшается на 2 (так как ширина стека — 16 бит или 2 байта);
операнд помещается в память по адресу в SP.
Выполняется командой POP. У этой команды также один операнд, который может быть 16-битным регистром (в том числе сегментым, но кроме CS) или 16-битной переменной в памяти. Команда работает следующим образом:
операнд читается из памяти по адресу в SP;
значение в регистре SP увеличивается на 2.
6.Упакованные и неупакованные BSD числа
Суть упакованных чисел состоит в том, что в одном байте можно хранить два десятичных числа, например число 12345678 может хранитьс в 4 байтах ( от неупакованных чисел отличаются упакованные тем, что здесь, в одном байте хранится два числа, то есть число 51 в неупакованном формате выглядит как 05h 01h, а у упакованном формате оно выглядит как 51h. Для неупакованного числа на каждую цифру отводится байт, чтобы можно было быстро переводить в формат ANSII, просто заменяя старшие 4 бита в числе на 0011) A dd 12345678h
Упакованный формат чисел имеет следующие преимущества:
• Количество значащих цифр может быть практически любым, это позволяет проводить расчеты с очень высокой точностью (хз что это)
• Конвертировать упакованное десятичное число в формат ANSI достаточно просто Для конвертирования результата сложения и вычитания в формат упакованного числа, для сложения ( ADD, ADC) это DAA, для вычитания (SUB,SBB) это DAS
Команды DAA и DAS конвертируют число, находящееся в регистре AL.
7.Сложение двоичных чисел без знака
Процессор выполняет сложение операндов по правилам сложения двоичных чисел. Проблем не возникает до тех пор, пока значение результата не превышает размерности поля операнда т.е. 8 бит.
254 + + 5 = 259 в двоичном виде:
11111110 + 0000101 - 1 00000011.
Так, для фиксации ситуации выхода за разрядную сетку результата, как в данном случае, предназначен флаг переноса CF. Он располагается в бите 0 регистра флагов EFLAGS/FLAGS
8.Сложение двоичных чисел со знаком
Для сложения двух чисел предназначена команда ADD. Она работает как с числами со знаком, так и с числами без знака (это особенность дополнительного кода).
Операнды должны иметь одинаковый размер (нельзя складывать 16- и 8-битное значение). Результат помещается на место первого операнда. В общем, эти правила справедливы для большинства команд.
После выполнения команды изменяются флаги, по которым можно определить характеристики результата:
Флаг CF устанавливается, если при сложении произошёл перенос из старшего разряда. Для беззнаковых чисел это будет означать, что произошло переполнение и результат получился некорректным.
Флаг OF обозначает переполнение для чисел со знаком.
Флаг SF равен знаковому биту результата (естественно, для чисел со знаком, а для беззнаковых он равен старшему биту и особо смысла не имеет).
Флаг ZF устанавливается, если результат равен 0.
Флаг PF — признак чётности, равен 1, если результат содержит нечётное число единиц.
