簡體   English   中英

匯編中的C循環代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM