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



Листинг 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 равна нулю.

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

Итоги действительных процедур воздействуют на расположение 8 флагов. Большая область данных джокеров будет рассчитана после исполнения циферных операций с помощью функций условного скачка, и вдобавок с поддержкой процедуры CIN (прерывание по восполнению). Воздействие циферных функций на знаки описано далее.

CF (символ свитча): Ежели в следствии сочинения осуществляется свитч из старшего байта, знак трансдукции взводится; в противном случае символ свитча опустошается. При вычете знак переноса взводится, в случае если осуществляется заем в старший разряд счёта; при нехватке взятия флаг обновляется. Следует учитывать, что при возникновении симптоматичного переноса SC = OF (знак заполнения). Флаг трансдукции CF может применяться для индикации беззнакового восполнения.

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


назад далее