汇编———循环

.section .rodata
	.LC0:.string "%d "
	
print:
	pushl %ebp
	movl %esp,%ebp
	pushl %ebx
	
	movl $1,%ebx
	jmp .L1
.L2:
	pushl %ebx
	pushl $.LC0
	call printf
	addl $8,%esp
	
	addl $1,%ebx
.L1:
	cmpl $100,%ebx
	jle .L2

	pushl $'\n'
	call putchar
	addl $4,%esp
		
	popl %ebx
	movl %ebp,%esp
	popl %ebp
	ret

print2:
	pushl %ebp
	movl %esp,%ebp
	pushl %ebx
		
	movl $1,%ebx
	jmp .L3
.L4:
	movl %ebx,%eax
	andl $1,%eax
	cmpl $0,%eax
	jne .L5
	
	pushl %ebx
	pushl $.LC0
	call printf
	addl $8,%esp	
   
.L5:		
	addl $1,%ebx
.L3:
	cmpl $100,%ebx
	jle .L4

	popl %ebx
	movl %ebp,%esp
	popl %ebp
	ret	


print7:
	pushl %ebp
	movl %esp,%ebp
	pushl %ebx
	
	movl $1,%ebx
	jmp .L6	
.L7:
	movl %ebx,%eax
	cltd
	movl $7,%ecx
	idivl %ecx
	cmpl $0,%edx
	jne .L8
	
	pushl %ebx
	pushl $.LC0
	call printf
	addl $8,%esp
	
.L8:
	
	addl $1,%ebx	
.L6:
	cmpl $100,%ebx
	jle .L7
	
	pushl $'\n'
	call putchar
	addl $4,%esp	
		
	popl %ebx	
	movl %ebp,%esp
	popl %ebp
	ret

//void print_mn(int m,int n); 
print_mn:
	pushl %ebp
	movl %esp,%ebp
	pushl %ebx
	movl 8(%ebp),%ebx
	jmp .L9
.L10:
	pushl %ebx
	pushl $.LC0
	call printf
	addl $8,%esp
	
	addl $1,%ebx
.L9:
	cmpl 12(%ebp),%ebx
	jle .L10
	
	pushl $'\n'
	call putchar
	addl $4,%esp
	
	popl %ebx
	movl %ebp,%esp
	popl %ebp
	ret	

print_50:
	pushl %ebp
	movl %esp,%ebp
	pushl %ebx
	
	movl $1,%ebx
	jmp .L11
.L12:
	cmpl $50,%ebx
	jle .L13
	pushl %ebx
	pushl $.LC0
	call printf
	addl $8,%esp
	
.L13:
	addl $1,%ebx
.L11:
	cmpl $100,%ebx
	jle .L12
	
	pushl $'\n'
	call putchar
	addl $4,%esp
	
	popl %ebx	
	movl %ebp,%esp
	popl %ebp
	ret

print_r:
	pushl %ebp
	movl %esp,%ebp
	pushl %ebx
	
	movl $100,%ebx
	jmp .L14
.L15:
	pushl %ebx
	pushl $.LC0
	call printf
	addl $8,%esp
	
	subl $1,%ebx
.L14:
	cmpl $1,%ebx
	jge .L15	
	
	pushl $'\n'	
	call putchar
	addl $4,%esp
	
	popl %ebx
	movl %ebp,%esp
	popl %ebp
	ret

print_xx:
	pushl %ebp
	movl %esp,%ebp
	pushl %ebx
	movl $10,%ebx
	jmp .L16
.L17:
	movl %ebx,%eax
	cltd
	movl $10,%ecx
	idivl %ecx
	cmpl %edx,%eax
	jne .L18
	pushl %ebx
	pushl $.LC0
	call printf
	addl $8,%esp
.L18:
	addl $1,%ebx
.L16:
	cmpl $99,%ebx
	jle .L17
	
	pushl $'\n'
	call putchar
	addl $4,%esp
	
	popl %ebx
	movl %ebp,%esp
	popl %ebp
	ret


print_xzx:
	pushl %ebp
	movl %esp,%ebp
	pushl %ebx
	pushl %esi
	pushl %edi
	
	movl $100,%ebx
	jmp .L19
.L20:
	movl %ebx,%eax
	cltd
	movl $10,%ecx
	idivl %ecx
	movl %edx,%esi
	cltd
	idivl %ecx
	movl %eax,%edi
	cmpl %esi,%edi
	jne .L21
	pushl %ebx
	pushl $.LC0
	call printf
	addl $8,%esp
.L21:
	addl $1,%ebx
.L19:
	cmpl $999,%ebx
	jle .L20
	
	popl %edi
	popl %esi
	popl %ebx
	movl %ebp,%esp
	popl %ebp
	ret


print_5x:
	pushl %ebp
	movl %esp,%ebp
	pushl %ebx
	
	movl $1,%ebx
	jmp .L22
.L23:
	movl %ebx,%eax
	imull $5,%eax
	pushl %eax
	pushl $.LC0
	call printf
	addl $8,%esp
	
	addl $1,%ebx
.L22:
	cmpl $100,%ebx
	jle .L23
	
	pushl $'\n'
	call putchar
	addl $4,%esp
	
	popl %ebx	
	movl %ebp,%esp
	popl %ebp
	ret

//int f(int x)
f:
	pushl %ebp
	movl %esp,%ebp
	movl 8(%ebp),%eax
	imull 8(%ebp),%eax
	addl 8(%ebp),%eax
	addl $1,%eax
	movl %ebp,%esp
	popl %ebp
	ret

print_1_10:
	pushl %ebp
	movl %esp,%ebp
	pushl %ebx
	movl $-10,%ebx
	jmp .L24
.L25:
	pushl %ebx
	call f
	addl $4,%esp
	
	pushl %eax
	pushl $.LC0
	call printf
	addl $8,%esp
	
	addl $1,%ebx
.L24:
	cmpl $10,%ebx
	jle .L25
	
	pushl $'\n'
	call putchar
	addl $4,%esp
		
	popl %ebx
	movl %ebp,%esp
	popl %ebp
	ret


print_rand:
	pushl %ebp
	movl %esp,%ebp
	pushl %ebx
	movl $1,%ebx
	jmp .L26
.L27:
	call rand
	cltd
	movl $100,%ecx
	idivl %ecx
	pushl %edx
	pushl $.LC0
	call printf
	addl $8,%esp
	
	addl $1,%ebx
.L26:
	cmpl $100,%ebx
	jle .L27
	pushl $'\n'
	call putchar
	addl $4,%esp
	popl %ebx
	movl %ebp,%esp
	popl %ebp
	ret




print_o:
	pushl %ebp
	movl %esp,%ebp
	pushl %ebx
	pushl %esi
	pushl %edi	
	movl $0,%esi
	movl $0,%edi
	
	movl $1,%ebx
	jmp .L28
.L29:
	call rand
	cltd
	movl $100,%ecx
	idivl %ecx
	andl $1,%edx
	cmpl $0,%edx
	jne .L30
	addl $1,%esi
	jmp .L31
.L30:
	addl $1,%edi
.L31:	
	pushl %esi
	pushl $.LC0
	call printf
	addl $8,%esp
	
	pushl %edi
	pushl $.LC0
	call printf
	addl $8,%esp

	pushl $'\n'
	call putchar
	addl $4,%esp
	
	addl $1,%ebx
.L28:
	cmpl $100,%ebx
	jle .L29
	
	
	popl %edi
	popl %esi
	popl %ebx
	movl %ebp,%esp
	popl %ebp
	ret

print_char:
	pushl %ebp
	movl %esp,%ebp
	pushl %ebx
	movl $'a',%ebx
	jmp .L31
.L32:
	pushl %ebx
	call putchar
	addl $4,%esp
	
	addl $1,%ebx
.L31:
	cmpl $'z',%ebx
	jle .L32
	
	popl %ebx
	movl %ebp,%esp
	popl %ebp
	ret







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值