Переходы

Материал из Compilers Wiki
Перейти к: навигация, поиск
JUMP :=
   'jmp' @IDENT               # Безусловный
 | 'jnz' VAL, @IDENT, @IDENT  # Условный
 | 'ret' [VAL]                # Возврат/Return

Команда перехода заканчивает каждый блок и передает управление в другое место программы. Целью перехода никогда не должен быть первый блок в функции. Три вида доступных переходов описаны далее в списке.

A jump instruction ends every block and transfers the control to another program location. The target of a jump must never be the first block in a function. The three kinds of jumps available are described in the following list.

Безусловный переход. Переход к исполнению другого блока данной функции.

Unconditional jump. Simply jumps to another block of the same function.

Условный переход. Когда первый аргумент (тип w - word) имеет ненулевое значение, переход осуществляется по первой метке-имени блока, стоящего первым (второй аргумент перехода); иначе переход осуществляется по второй метке-имени блока (третий аргумент перехода). Первый аргумент должен быть типа word; из-за подтипирования long-аргумент может быть корректно обработан, но только его младшие 32 бита будут сравниваться с 0.

Conditional jump. When its word argument is non-zero, it jumps to its first label argument; otherwise it jumps to the other label. The argument must be of word type; because of subtyping a long argument can be passed, but only its least significant 32 bits will be compared to 0.

Функция возврата/return. Завершает выполнение текущей функции, возвращая ее результат в место, где эта функция была вызвана. Возвращаемое значение должно указываться в прототипе функции. Если возвращаемый тип не определен, то возвращаемое значение не может быть использовано.

Function return. Terminates the execution of the current function, optionally returning a value to the caller. The value returned must be of the type given in the function prototype. If the function prototype does not specify a return type, no return value can be used.



Источник: c9x.me