logo search
Разработка структуры гипотетического микропроцессора и центральной части МЭВМ на его базе. Эмуляция выполнения команд

1.3 Анализ способов адресации операндов и алгоритмов выполнения заданного подмножества команд

Формат команды: ADD операнд1 операнд2.

В роли первого операнда может служить регистр и память, а в роли второго регистр, память и константа. Команда ADD выполняет сложение побитно, первый операнд служит для приема полученной суммы. Если результат операции превосходит размер операнда, то OF и CF устанавливаются в 1, иначе оба флага сбрасываются в ноль.

Формат команды: MUL операнд.

В роли операнда может служить регистр или память. MUL- целочисленное умножение без знака AL или AX на заданный операнд (регистр или переменная) и помещает результат в AX или AX:DX, соответственно. Если результат операции превосходит размер операнда, то OF и CF устанавливаются в 1, иначе оба флага сбрасываются

Формат команды: DEC операнд.

Команда DEC уменьшает значение операнда на единицу, не влияет на флаги. В роли операнда может выступать память/регистр размерностью один или два байта.

Формат команды: MOV операнд1 операнд2.

Пересылает источник операнда, размещенный в регистре, памяти или непосредственные данные, в приемник операнда. Исходный операнд остается без изменений, а операнд-приемник перезаписывается исходными данными. Флаги не устанавливаются.

Формат команды: PUSH операнд.

Данная операция помещает операнд в вершину стека. Для этого указатель стека ESP уменьшается на 2, если размер операнда 16 бит, и на 4, если 32 бита. Операнд (регистр общего назначения, сегментный регистр, или непосредственные данные) помещается на вершину стека, указываемую ESP.

Если стек организуется из 64К (максимальный размер), то при полном его заполнении каждое следующее включение разрушает ранее записанную информацию. Если стек имеет меньший размер, то при полном его заполнении каждое следующее включение разрушает область памяти, находящуюся вне стекового сегмента. Регистр флажков не модифицируется.

Если размер операнда - 32 бит, а в стек помещается сегментный 16-битный регистр, то перед засылкой в стек процессор дополняет содержимое регистра нулями до 32 бит. Это позволяет выдержать размер двойного слова.

При выполнении процессором инструкций PUSH ESP и PUSH SP, в стек помещается содержимое указателя стека, существовавшее до выполнения инструкции. В этом отличие выполнения этих инструкций от процессора 8086, который помещает в стек новое значение (уже уменьшенное на два).

Формат команды: JA/JNBE метка.

Данный переход относится к беззнаковым переходам, т.е. эта команда осуществляет переход, если выполнено условие сравнения двух чисел, интерпретированных, как беззнаковые.

Допустим, арифметические флажки установлены в результате сравнения двух беззнаковых чисел командой CMP. Тогда переход осуществляется, если флаги CF и ZF равны нулю. Регистр флажков не модифицируется.

Формат команды:

1)JMP SHORT метка

Относительный переход типа NEAR. Диапазон перехода -128 - +127 байт. Если осуществляется переход назад, оператор SHORT можно опустить.

2)JMP метка типа NEAR

Относительный переход типа NEAR. Диапазон перехода -32768 - +32767 байт.

3)JMP метка типа FAR

Прямой переход типа FAR: значение off загружается в IP, значение seg загружается в CS.

4)JMP регистр/память

Косвенный переход типа NEAR. Адрес перехода загружается из 16-битового общего регистра или слова памяти

Команда JMP осуществляет безусловный переход, модифицируя указатель команд IP (при переходе типа NEAR) или пару регистров CS:IP (при переходе типа FAR). Старое значение регистров IP и CS теряется.