【发布时间】:2016-03-31 07:10:29
【问题描述】:
对于我的作业,我必须填写以下 C 代码的缺失部分。 但是,我不确定缺少哪些部分或必须填写哪些部分。 我有一个该代码将生成的示例汇编代码,但不知道我必须更改哪些部分才能获得预期的结果。我只是想澄清一下。
typedef enum {MODE_A, MODE_B, MODE_C, MODE_D, MODE_E} mode_t;
long switch3 (long *p1, long *p2, mode_t action) {
long result = 0;
switch(action){
case MODE_A:
case MODE_B:
case MODE_C:
case MODE_D:
case MODE_E:
default;
}
return result;
}
其他要点:
- 可能有一些情况应该写在 C 中 带有失败的代码
- 代码显示开关中枚举类型值的分支 陈述。 (问题:简单来说这到底是什么意思?我的教授提供了一个我不明白的复杂定义。)
汇编代码结果示例:
# p1 in %rdi, p2 in %rsi, action in %edx
.L2: # MODE_E
movl $27, %eax
ret
.L7: # MODE_A
movl (%rsi), %rax
movq (%rdi), %rdx
movq %rdx, (%rsi)
ret
.L5: # MODE_B
movq (%rdi), %rax
addq (%rsi), %rax
movq %rax, (%rdi)
ret
.L4: # MODE_C
movq $59, (%rdi)
movq (%rsi), %rax
ret
.L3: # MODE_D
movq (%rsi), %rax
movq %rax, (%rdi)
movl $27, %eax
ret
.L8: # default
movl $12, %eax
ret
【问题讨论】:
-
“在 switch 语句中对枚举类型值进行分支”表示
switch(action),其中action是一个枚举 -
你将不得不解释你的预期结果是什么
-
...我的任务 - 完全正确。 你的。查看程序集,了解逻辑结构,并确定如何在 C 中执行以获得相同的结构。
-
在汇编代码中,每个case的末尾都有一个
ret,所以没有case应该写在C代码中。 -
旁注#2:为什么对这个问题投反对票???这就是我不再在这里发布问题的原因。这个网站上有太多聪明的@$$es。
标签: c assembly switch-statement