[英]C loop code from assembly
我得到了此匯編代碼和for循環的框架。 我應該填寫骨骼中的空白(此處用“ ____”表示)。 我還提供了我很確定是正確的信息,但我不是100%肯定的。 這是程序集:
foo:
pushl %ebp
movl %esp,%ebp
movl 8(%ebp),%ecx
movl 16(%ebp),%edx
movl 12(%ebp),%eax
decl %eax
js .L3
.L7:
cmpl %edx,(%ecx,%eax,4)
jne .L3
decl %eax
jns .L7
.L3:
movl %ebp,%esp
popl %ebp ret
很簡單吧? 我也得到了這個功能的骨架:
int foo(int *a, int n, int val) {
int i;
for (i = _________; ____________________________ ; i =___________) {
;
}
return i;
}
這是我寫的:
int foo(int *a, int n, int val){
int i;
for(i = val--; i>= 0 && n != a[4*i]; i = val--){
;
}
return(i);
}
如果您認為這看起來正確,請告訴我。 我認為我可能會出錯的地方是我的存儲位置。 認為這是用decl%eax完成的,因為那是具有返回值的寄存器,並且該寄存器已在框架中提供給我。
在偽代碼中,這是:
// ecx <- int *a; edx <- int val; eax <- int n;
n = n - 1;
if (n < 0)
goto end;
loop:
if (a[n] != val)
goto end;
n = n - 1;
if (n >= 0)
goto loop;
end: return; // return n in eax.
它從a[n - 1] .. a[0]
檢查數組a[n]
中的每個元素是否等於val
。 它返回元素的索引,其中a[i] != val
,其中i in {n - 1, .., 0}
,或者如果所有元素都等於val
則為-1
。 例如,
for (i = n - 1; i >= 0 && a[i] == val; i = i - 1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.