我现在正在审查一个练习期中考试。这个问题给出了一段汇编代码(IA32),并指示编写它的C等价物。只是想确保我正确地做到了。谢谢!
给出的汇编程序:
.global _someOperation
_someOperation:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %ebx
movl 12(%ebp), %edx
decl %edx
xorl %esi, %esi
movl (%ebx, %esi, 4), %eax
continue:
incl %esi
cmpl (%ebx, %esi, 4), %eax
jl thelabel
movl (%ebx, %esi, 4), %eax
thelabel:
cmp %esi, %edx
jne continue
movl %ebp, %esp
popl %ebp
ret
这是我写的代码:
void someOperation(int *num, int count) //Given
{
int k; //Given
count--;
int i = 0;
k = num[i];
i++;
while(count != i)
{
if(k >= num[i]
k = num[i];
i++;
}
return (k);
}
答案 0 :(得分:2)
看起来非常接近我,虽然在ASM中增量仅在循环开始时,并且第一次不检查条件。考虑使用DO ... WHILE代替。
编辑:同样,你的作业是错误的。 MOV指令从第二个参数复制到第一个参数。你可以在C代码中使用它。