csapp2e 家庭作业 4.45

C代码

#include <stdio.h>

void bubble_a(int *data,int count) {  int i,next;  for(next = 1;next < count;next++)  {   for(i = next-1;i >= 0;i--)    if(*(data+i+1) < *(data+i))    {     int t= *(data+i+1);     *(data+i+1) = *(data+i);     *(data+i) = t;    }  } }

int main() {  int i;  int data[10]={54,63,0,-12,45,34523,34,-4,0,345};  bubble_a(data,10);  for(i=0;i<10;i++)  {   printf("%d ",*(data+i));  } }


 

IA32

	.file	"54.c"
	.text
.globl bubble_a
	.type	bubble_a, @function
bubble_a:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$16, %esp
	movl	$1, -8(%ebp)
	jmp	.L2
.L6:
	movl	-8(%ebp), %eax
	subl	$1, %eax
	movl	%eax, -12(%ebp)
	jmp	.L3
.L5:
	movl	-12(%ebp), %eax
	addl	$1, %eax
	sall	$2, %eax
	addl	8(%ebp), %eax
	movl	(%eax), %edx
	movl	-12(%ebp), %eax
	sall	$2, %eax
	addl	8(%ebp), %eax
	movl	(%eax), %eax
	cmpl	%eax, %edx
	jge	.L4
	movl	-12(%ebp), %eax
	addl	$1, %eax
	sall	$2, %eax
	addl	8(%ebp), %eax
	movl	(%eax), %eax
	movl	%eax, -4(%ebp)
	movl	-12(%ebp), %eax
	addl	$1, %eax
	sall	$2, %eax
	addl	8(%ebp), %eax
	movl	-12(%ebp), %edx
	sall	$2, %edx
	addl	8(%ebp), %edx
	movl	(%edx), %edx
	movl	%edx, (%eax)
	movl	-12(%ebp), %eax
	sall	$2, %eax
	addl	8(%ebp), %eax
	movl	-4(%ebp), %edx
	movl	%edx, (%eax)
.L4:
	subl	$1, -12(%ebp)
.L3:
	cmpl	$0, -12(%ebp)
	jns	.L5
	addl	$1, -8(%ebp)
.L2:
	movl	-8(%ebp), %eax
	cmpl	12(%ebp), %eax
	jl	.L6
	leave
	ret
	.size	bubble_a, .-bubble_a
	.section	.rodata
.LC0:
	.string	"%d "
	.text
.globl main
	.type	main, @function
main:
	pushl	%ebp
	movl	%esp, %ebp
	andl	$-16, %esp
	subl	$64, %esp
	movl	$54, 20(%esp)
	movl	$63, 24(%esp)
	movl	$0, 28(%esp)
	movl	$-12, 32(%esp)
	movl	$45, 36(%esp)
	movl	$34523, 40(%esp)
	movl	$34, 44(%esp)
	movl	$-4, 48(%esp)
	movl	$0, 52(%esp)
	movl	$345, 56(%esp)
	movl	$10, 4(%esp)
	leal	20(%esp), %eax
	movl	%eax, (%esp)
	call	bubble_a
	movl	$0, 60(%esp)
	jmp	.L9
.L10:
	movl	60(%esp), %eax
	leal	0(,%eax,4), %edx
	leal	20(%esp), %eax
	addl	%edx, %eax
	movl	(%eax), %edx
	movl	$.LC0, %eax
	movl	%edx, 4(%esp)
	movl	%eax, (%esp)
	call	printf
	addl	$1, 60(%esp)
.L9:
	cmpl	$9, 60(%esp)
	jle	.L10
	leave
	ret
	.size	main, .-main
	.ident	"GCC: (GNU) 4.4.7 20120313 (Red Hat 4.4.7-3)"
	.section	.note.GNU-stack,"",@progbits


 

Y86

	.file	"54.c"
	.text
.globl bubble_a
	.type	bubble_a, @function
bubble_a:
	pushl	%ebp
	rrmovl	%esp, %ebp
	irmovl $16,%esi
	subl	%esi, %esp
	irmovl $1,%esi
	rmmovl	%esi, -8(%ebp)
	jmp	.L2
.L6:
	mrmovl	-8(%ebp), %eax
	irmovl $1,%esi
	subl	%esi, %eax
	rmmovl	%eax, -12(%ebp)
	jmp	.L3
.L5:
	mrmovl	-12(%ebp), %eax
	irmovl $1,%esi
	addl	%esi, %eax
	addl %eax,%eax
	addl %eax,%eax
	mrmovl 8(%ebp),%esi
	addl	%esi, %eax
	mrmovl	(%eax), %edx
	mrmovl	-12(%ebp), %eax
	addl %eax,%eax
	addl %eax,%eax
	mrmovl 8(%ebp),%esi
	addl	%esi, %eax
	mrmovl	(%eax), %eax
	rrmovl %eax,%esi
	rrmovl %edx,%edi
	subl	%esi,%edi
	jge	.L4
	mrmovl	-12(%ebp), %eax
	irmovl $1,%esi
	addl	%esi, %eax
	addl %eax,%eax
	addl %eax,%eax
	mrmovl 8(%ebp),%esi
	addl	%esi, %eax
	mrmovl	(%eax), %eax
	rmmovl	%eax, -4(%ebp)
	mrmovl	-12(%ebp), %eax
	irmovl $1,%esi
	addl	$esi, %eax
	addl %eax,%eax
	addl %eax,%eax
	mrmovl 8(%ebp),%esi
	addl	%esi, %eax
	mrmovl	-12(%ebp), %edx
	addl %edx,%edx
	addl %edx,%edx
	mrmovl 8(%ebp),%esi
	addl	%esi, %edx
	mrmovl	(%edx), %edx
	rmmovl	%edx, (%eax)
	mrmovl	-12(%ebp), %eax
	addl %eax,%eax
	addl %eax,%eax
	mrmovl 8(%ebp),%esi
	addl	%esi, %eax
	mrmovl	-4(%ebp), %edx
	rmmovl	%edx, (%eax)
.L4:
	irmovl $1,%esi
	mrmovl -12(%ebp),%edi
	subl %esi,%edi
	rmmovl %edi, -12(%ebp)
.L3:
	irmovl $0,%esi
	mrmovl -12(%ebp),%edi
	subl %esi,%edi
	jns	.L5
	irmovl $1,%esi
	mrmovl  -8(%ebp),%edi
	addl %esi,%edi
	rmmovl %edi, -8(%ebp)
.L2:
	mrmovl	-8(%ebp), %eax
	mrmovl 12(%ebp),%esi
	rrmovl %eax,%edi
	subl %esi, %edi
	jl	.L6
	rrmovl %ebp,%esp
	popl %ebp
	ret
	.size	bubble_a, .-bubble_a
	.section	.rodata
.LC0:
	.string	"%d "
	.text
.globl main
	.type	main, @function
main:
	pushl	%ebp
	rrmovl	%esp, %ebp
	irmovl $-16,%esi
	andl	%esi, %esp
	irmovl $64,%esi
	subl	%esi, %esp
	irmovl $54,%esi
	rmmovl	%esi, 20(%esp)
	irmovl $63,%esi
	rmmovl	%esi, 24(%esp)
	irmovl $0,%esi
	rmmovl	%esi, 28(%esp)
	irmovl $-12,%esi
	rmmovl	%esi, 32(%esp)
	irmovl $45,%esi
	rmmovl	%esi, 36(%esp)
	irmovl $34523,%esi
	rmmovl	%esi, 40(%esp)
	irmovl $34,%esi
	rmmovl	%esi, 44(%esp)
	irmovl $-4,%esi
	rmmovl	%esi, 48(%esp)
	irmovl $0,%esi
	rmmovl	%esi, 52(%esp)
	irmovl $345,%esi
	rmmovl	%esi, 56(%esp)
	irmovl $10,%esi
	rmmovl	%esi, 4(%esp)
	rrmovl %esp,%eax
	irmovl $20,%esi
	addl %esi,%eax
	rmmovl	%eax, (%esp)
	call	bubble_a
	irmovl $0,%esi
	rmmovl	%esi, 60(%esp)
	jmp	.L9
.L10:
	mrmovl	60(%esp), %eax
	rrmovl %eax,%edx
	addl %edx,%edx
	addl %edx,%edx
	rrmovl %esp,%eax
	irmovl $20,%esi
	addl %esi,%eax
	addl	%edx, %eax
	mrmovl	(%eax), %edx
	rmmovl	$.LC0, %eax
	rmmovl	%edx, 4(%esp)
	rmmovl	%eax, (%esp)
	call	printf
	irmovl $1,%esi
	mrmovl 60(%esp),%edi
	addl	%esi,%edi
	rmmovl %edi,60(%esp);
.L9:
	irmovl $9,%esi
	mrmovl 60(%esp),%edi
	subl %esi,%edi
	jle	.L10
	rrmovl %ebp,%esp
	popl %ebp
	ret
	.size	main, .-main
	.ident	"GCC: (GNU) 4.4.7 20120313 (Red Hat 4.4.7-3)"
	.section	.note.GNU-stack,"",@progbits


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值