Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Assembler.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
34 Кб
Скачать
☆

Добавление элемента в стек

Выполняется командой PUSH. У этой команды один операнд, который может быть непосредственным значением, 16-битным регистром (в том числе сегментым) или 16-битной переменной в памяти. Команда работает следующим образом:

  1. значение в регистре SP уменьшается на 2 (так как ширина стека — 16 бит или 2 байта);

  2. операнд помещается в память по адресу в SP.

Выполняется командой POP. У этой команды также один операнд, который может быть 16-битным регистром (в том числе сегментым, но кроме CS) или 16-битной переменной в памяти. Команда работает следующим образом:

  1. операнд читается из памяти по адресу в SP;

  2. значение в регистре 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, если результат содержит нечётное число единиц.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]