if 语句的功能是先对运算条件进行比较,然后根据比较结果选择对应的语句来执行。if 语句只能判断两种情况: “0” 为假,“非0”为真。如果为真,则进入语句块内执行语句; 如果为假, 则跳过 if 语句块,继续执行后面的语句。要注意的是, if 语句转换的条件跳转指令与if 语句的判断结果是相反的。
按照if 语句的规定,满足if判定的表达式才能执行if语句块,而汇编语言的条件跳转是满足某条件则跳转,绕过某些代码块, 这一点与C语言是相反的。
C语言是根据代码的位置来决定编译后的二进制代码的地址高低的,也就是说, 第函数对应低地址,高行数对应高地址,所以有时会使用标号相减得到代码的长度。鉴于此,C语言的编译器是 不能随意改变代码行在内存中的顺序。
if 语句转换规则:
在转换成汇编代码后,由于当 if 比较结果 为假时,需要跳过if 语句内的代码, 因此使用了相反的条件跳转指令。
总结:
;先执行各类影响标志位的指令
;其后是各类条件跳转指令
jxx xxxx
如果遇到以上指令, 可高度怀疑 它是一个由if语句组成的单分支结构,根据标胶信息与跳转指令, 找到其跳转条件的的相反逻辑,即可恢复分支结构原型。而循环结构中也会出现类似的代码,因此在分析过程中,还需要 结合上下文。
附 if 语句结构执行流程