Руководство по ассемблеру



Листинг 12.1. Пример ветвлений в ассемблере

cmp digit.О jnz nzero

invoke WriteConsoleA. stdout. ADDR z. \ zsize. ADDR cWritten. NULL

jmp exit nzero:

invoke WriteConsoleA. stdout. ADDR nz. \

nzsize. ADDR cWritten. NULL exit: invoke ExitProcess. 0

Ключевую роль здесь играет инструкция jnz nzero, отправляющая процессор к метке nzero, когда переменная digit не равна нулю, и позволяющая процессору выполнить следующую инструкцию, если digit равна нулю.

Команды АЛУ и присвоение флагов

Окончания цифeрных операций возбуждают на расположение 7 флагов. Солидная частица этих джокеров будет рассмотрена после произведения действительных операций с помощью команд относительного перехода, и вдобавок с участием процедуры CIN (перебой по восполнению). Действие циферных процедур на флаги обрисовано ниже.

CF (флаг переноса): Если в достигнутом результате сочинения совершается свитч из большего байта, флаг свитча возводится; в противном случае символ трансдукции обнуляется. При вычете флаг трансдукции взводится, ежели совершается заимствование в больший разряд результата; при нехватке заимствования флаг обновляется. Необходимо иметь в виду, что при происхождении меточного трансдукции ВА = VJ (знак переполнения). Флаг трансдукции МО имеет возможность использоваться для показа неимеющего знака восполнения.

АМ (символ добавочного трансдукта): Если в следствии сложения свершается перенос из младшего полубайта в старший, символ дополнительного свитча взводится; в другом случае знак сбрасывается. При вычете флаг прибавочного переноса возводится, если свершается заимствование из главного полуразряда в меньший; при недостатке заема знак возвращается в исходное положение.


назад далее