在 C 代码中,我们可能会使用结构化语句,这里是一个 while 循环:
while ( a < 100 ) {
// loop body
}
// more code
而使用所谓的 if-goto-label ,则相同(仍在 C 中):
Loop1:
if ( a >= 100 ) goto Loop1Exit;
// loop body
goto Loop1;
Loop1Exit:
// more code
因此,希望您看到这两种结构是等效且相同的,因此运行方式相同,尽管后者有点冗长。两者都将运行相同的循环体并进行相同的迭代次数。
然而,后一种形式更接近汇编语言,它也使用 if-goto-label。
那么,组装的关键是如何翻译语句if ( a >= 100 ) goto Loop1Exit;
。 if-goto-label 语句的问题在于,处理器在一条指令中通常需要处理太多操作数(这些操作数是
a
、
>=
、
100
、
Loop1Exit
,我们可以想象一般来说,每个操作数都会有所不同。)因此,许多指令集中的解决方案是使用条件代码将 if-goto-label 构造拆分为两条指令。第一个是
a
和
100
的比较,用于设置条件代码,第二个是使用条件
>=
和标签目标
Loop1Exit
的分支,用于读取条件代码。这两条指令通过条件代码进行通信,但您可以将它们理解为通过两条指令序列执行 if-goto-label 构造。