我在 C 中有以下流程:
// some stuff1
//................
if (something1) {
func1();
func2();
} else if (something2) {
func3();
func4();
}
// some stuff2
我想知道如何在汇编中对其进行编码?我的意思是,不是精确的说明,而是流程。我应该使用标签跳转到 if (something1) { ...} 和“else if (something2)”内部的内容吗?我该如何返回“// some stuff2”?
; some stuff1
; and then
cmp [some_struc], SOME_CONST
je .... ????
cmp [some_struc], SOME_CONST2
je .... ????
; some stuff2
; how to better get back here?
cmp rax, 0
或者我应该将它们称为函数?那么如果第一个是真的,我将如何跳过第二个“else if (something2) {”?
我可以以某种方式实施,但我想知道如何更好地做到这一点。
我想说,这很大程度上取决于这些 {...} 块中有多少代码。
如果其中的代码有限,请使用:
cmp [some_struc], SOME_CONST
jne Else
{...}
jmp EndIf
Else:
cmp [some_struc], SOME_CONST2
jne EndIf
{...}
EndIf:
cmp rax, 0
如果还有更多代码:
cmp [some_struc], SOME_CONST
jne Else
call Part1
jmp EndIf
Else:
cmp [some_struc], SOME_CONST2
jne EndIf
call Part2
EndIf:
cmp rax, 0
Part1:
{...}
ret
Part2:
{...}
ret
最佳使用call
。我不建议跳到Part1 or Part2然后跳回EndIf.
这将创建意大利面条式代码。可读性较差,并且很快就会变得难以维护。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)