ЕМНИП, перевод конструкций примерно следующий:
Код:
if (condition)
then
  positive
else
  negative
endif
переводится в
Код:
call check_condition ; C if succeed
jp nc,failed
<positive>
jp endif
failed:
<negative>
endif:
Код:
while (condition)
  body;
переводится в
Код:
while_loop:
call check_condition
jp nc,while_end
<body>
jp while_loop
while_end:
GOTO переводится в JP, очевидно же.
BEGIN/END действительно могут интерпретироваться как скобки, но исключительно на своем уровне интерпретации (т.е. блочном).

Главное- помнить, что трансляция в машинные коды происходит в несколько этапов. Сначала лексический анализ (программа из текста преобразуется во внутренний код, где токены закодированы более понятным для парсера способом), потом синтаксический анализ (подготовка внутреннего кода в форму ОПЗ, например), потом генерация исходного ассемблерного кода и только потом из ассемблера генерится машинный код. (Могу напутать с названием шагов, давно уже ковырял эту тему).