csapp2e 家庭作业 4.46

修改在.L5

修改后的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,%ebx  movl (%eax), %edx    movl -12(%ebp), %eax  sall $2, %eax  addl 8(%ebp), %eax  movl %eax,%ecx  movl (%eax), %eax    cmpl %eax, %edx  cmovl %ebx,%esi  cmovl %ecx,%ebx  cmovl %esi,%ecx    movl %edx,(%ebx)  movl %eax,(%ecx)

 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
	rrmovl %eax,%ebx
	mrmovl	(%eax), %edx
	
	mrmovl	-12(%ebp), %eax
	addl %eax,%eax
	addl %eax,%eax
	mrmovl 8(%ebp),%esi
	addl	%esi, %eax
	rrmovl %eax,%ecx
	mrmovl	(%eax), %eax
	
	rrmovl %eax,%esi
	rrmovl %edx,%edi
	subl	%esi,%edi
	
	cmovl %ebx,%esi
	cmovl %ecx,%ebx
	cmovl %esi,%ecx
	
	rmmovl %edx,(%ebx)
	rmmovl %eax,(%ecx)


	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


 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值