【讨论题】根据汇编代码,将对应的C语言代码填写完整

【C语言部分】

#include "stdio.h"

#include "stdlib.h"

int main()

{

       int a[]={3,-5,6,7,2,-8,10,2,4};

       struct link

       {

              int i;

              struct link * next;

              struct link * pre;

       }head,*p1,*p2;

       head.i=a[0];

       head.next=NULL;

       head.pre=NULL;

       int j=0;

       p1=__________;

       for(j=1;j<=8;j++)

       {

              p2=(struct link*)malloc(sizeof(head));

              p2->i=______;

              p1->next=p2;

              p2->next=NULL;

              p2->pre=p1;

              p1=p2;

       }

       p1=&head;

       while(p1->next)

       {

              if(__________) 

                     ____________;

              else

                   p1->i-=p1->next->i;

              printf("%d\n",p1->i);

              p1=p1->next;     

       }

       return 0;

}

【汇编代码部分】

main:

       pushl      %ebp

       movl       %esp, %ebp

       andl     $-16, %esp

       subl     $80, %esp

       movl       $3, 20(%esp)

       movl       $-5, 24(%esp)

       movl       $6, 28(%esp)

       movl       $7, 32(%esp)

       movl       $2, 36(%esp)

       movl       $-8, 40(%esp)

       movl       $10, 44(%esp)

       movl       $2, 48(%esp)

       movl       $4, 52(%esp)

       movl       20(%esp), %eax

       movl       %eax, 56(%esp)

       movl       $0, 60(%esp)

       movl       $0, 64(%esp)

       movl       $0, 72(%esp)

       leal      56(%esp), %eax

       movl       %eax, 68(%esp)

       movl       $1, 72(%esp)

       jmp .L2

.L3:

       movl       $12, (%esp)

       call  malloc

       movl       %eax, 76(%esp)

       movl       72(%esp), %eax

       movl       20(%esp,%eax,4), %eax

       movl       %eax, %edx

       imull       72(%esp), %edx

       movl       76(%esp), %eax

       movl       %edx, (%eax)

       movl       68(%esp), %eax

       movl       76(%esp), %edx

       movl       %edx, 4(%eax)

       movl       76(%esp), %eax

       movl       $0, 4(%eax)

       movl       76(%esp), %eax

       movl       68(%esp), %edx

       movl       %edx, 8(%eax)

       movl       76(%esp), %eax

       movl       %eax, 68(%esp)

       addl      $1, 72(%esp)

.L2:

       cmpl       $8, 72(%esp)

       jle    .L3

       leal  56(%esp), %eax

       movl       %eax, 68(%esp)

       jmp .L4

.L7:

       movl       68(%esp), %eax

       movl       (%eax), %edx

       movl       68(%esp), %eax

       movl       4(%eax), %eax

       movl       (%eax), %eax

       leal  (%edx,%eax), %ecx

       movl       68(%esp), %eax

       movl       (%eax), %edx

       movl       68(%esp), %eax

       movl       4(%eax), %eax

       movl       (%eax), %eax

       imull       %edx, %eax

       movl       %eax, %edx

       shrl  $31, %edx

       addl %edx, %eax

       sarl  %eax

       cmpl       %eax, %ecx

       jle    .L5

       movl       68(%esp), %eax

       movl       (%eax), %edx

       movl       68(%esp), %eax

       movl       4(%eax), %eax

       movl       (%eax), %eax

       addl %eax, %edx

       movl       68(%esp), %eax

       movl       %edx, (%eax)

       jmp .L6

.L5:

       movl       68(%esp), %eax

       movl       (%eax), %edx

       movl       68(%esp), %eax

       movl       4(%eax), %eax

       movl       (%eax), %eax

       subl %eax, %edx

       movl       68(%esp), %eax

       movl       %edx, (%eax)

.L6:

       movl       68(%esp), %eax

       movl       (%eax), %edx

       movl       $.LC0, %eax

       movl       %edx, 4(%esp)

       movl       %eax, (%esp)

       call  printf

       movl       68(%esp), %eax

       movl       4(%eax), %eax

       movl       %eax, 68(%esp)

.L4:

       movl       68(%esp), %eax

       movl       4(%eax), %eax

       testl %eax, %eax

       jne  .L7

       movl       $0, %eax

       leave

       ret

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值