我正在尝试用 Graphviz 绘制有限状态图,但无法得到我想要的结果。这是我到目前为止所写的:
digraph G {
rankdir = LR;
subgraph cluster_op1 {
subgraph cluster_0 {
1 -> 2 [label="a"]
}
subgraph cluster_1 {
3 -> {4 6} [label="ε"]
4 -> 5 [label="b"]
5 -> 4 [label="ε"]
5 -> 6 [label="ε"]
}
subgraph cluster_2 {
7 -> {8 10} [label="ε"]
8 -> 9 [label="c"]
9 -> 8 [label="ε"]
9 -> 10 [label="ε"]
}
2 -> 3 [label="ε"]
6 -> 7 [label="ε"]
}
subgraph cluster_op2 {
subgraph cluster_3 {
11 -> {12 …Run Code Online (Sandbox Code Playgroud) 考虑以下C函数:
void f1(int i)
{
int j=i+a;
}
int f2(int i)
{
return i+a;
}
Run Code Online (Sandbox Code Playgroud)
以及汇编语言的翻译(由讲师给出):
#f1 translation :
subl $8, %esp
movl 12(%esp), %eax
movl %eax, 4(%esp)
movl 4(%esp), %eax
addl a, %eax
movl %eax, (%esp)
addl $8, %esp
ret
#f2 translation :
subl $8, %esp
movl 12(%esp), %eax
movl %eax, 4(%esp)
movl a, %eax
movl %eax, (%esp)
movl (%esp), %eax
addl 4(%esp), %eax
addl $8, %esp
ret
Run Code Online (Sandbox Code Playgroud)
我试图绘制并记下两个汇编代码的每一步,但我根本无法看到两者如何导致不同的C代码.
按照惯例,寄存器%eax包含函数的返回值.如果我没弄错,寄存器%eax包含两个汇编代码末尾的值(i …