logo
Материал / 03

Техника "заплат"

Аналогично, если в языке есть оператор goto, то мы можем использовать его не только для перехода назад, но и для перехода вперед. Таким образом, мы не всегда можем определить операнд команды перехода, по крайней мере до тех пор, пока не доберемся до конца программы. Однако в простых случаях мы можем использоватьтехнику "заплат"(backpatching). Рассмотрим фрагмент программы на языке ассемблера:

...

goto target;

...

goto target;

...

target: mov foobar, r1

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

Таблица

target

goto target

….

goto target

target: mov foobar, r1