022 数组初始化

/************************022 数组初始化 ***********************
 * C语言精彩编程百例  第 22 */
#include<stdio.h>
void main()
{
	int array1[10]={0,1,2,3,4,5,6,7,8,9};
	char array2[13]="How are you!";
	char array3[13]={'H','o','w',' ','a','r','e',' ','y','o','u','!'};
	int array4[4][4]=
	{
		12,18,6,25,
		23,10,32,16,
		25,63,1,63,
		0,0,27,98
	};
	char array5[]="How are you!";
	int array6[][2]=
	{
		{1,50},
		{45,2},
		{2,0},
		{12,32},
		{42,33},
		{15,18}
	};
}


对应的汇编

 

.file	"022.c"
	.def	___main;	.scl	2;	.type	32;	.endef
	.text
	.align 4
LC1:
	.long	12
	.long	18
	.long	6
	.long	25
	.long	23
	.long	10
	.long	32
	.long	16
	.long	25
	.long	63
	.long	1
	.long	63
	.long	0
	.long	0
	.long	27
	.long	98
	.align 4
LC2:
	.long	1
	.long	50
	.long	45
	.long	2
	.long	2
	.long	0
	.long	12
	.long	32
	.long	42
	.long	33
	.long	15
	.long	18
LC0:
	.ascii "How are you!\0"
	.align 2
.globl _main
	.def	_main;	.scl	2;	.type	32;	.endef
_main:
	pushl	%ebp
	movl	%esp, %ebp
	pushl	%edi
	pushl	%esi
	subl	$208, %esp
	andl	$-16, %esp
	movl	$0, %eax
	movl	%eax, -204(%ebp)
	movl	-204(%ebp), %eax
	call	__alloca
	call	___main
	movl	$0, -56(%ebp)      #array1[0]
	movl	$1, -52(%ebp)
	movl	$2, -48(%ebp)
	movl	$3, -44(%ebp)
	movl	$4, -40(%ebp)
	movl	$5, -36(%ebp)
	movl	$6, -32(%ebp)
	movl	$7, -28(%ebp)
	movl	$8, -24(%ebp)
	movl	$9, -20(%ebp)
	movl	LC0, %eax         # %eax = "How "
	movl	%eax, -72(%ebp)   # array[0]
	movl	LC0+4, %eax       # %eax = "are "
	movl	%eax, -68(%ebp)   # array[4]
	movl	LC0+8, %eax       # %eax = "you!"
	movl	%eax, -64(%ebp)   # array[8]
	movb	LC0+12, %al       # %eax = "\0"
	movb	%al, -60(%ebp)    # %eax[12]
	movl	$0, -88(%ebp)     # array3={}
	movl	$0, -84(%ebp)
	movl	$0, -80(%ebp)
	movb	$0, -76(%ebp)     # 不太明白这里为什么是movb 不是movl
	movb	$72, -88(%ebp)    #'H'
	movb	$111, -87(%ebp)   #'o'
	movb	$119, -86(%ebp)   #'w'
	movb	$32, -85(%ebp)
	movb	$97, -84(%ebp)
	movb	$114, -83(%ebp)
	movb	$101, -82(%ebp)
	movb	$32, -81(%ebp)
	movb	$121, -80(%ebp)
	movb	$111, -79(%ebp)
	movb	$117, -78(%ebp)
	movb	$33, -77(%ebp)     #'!'
	leal	-152(%ebp), %edi # 
	movl	$LC1, %esi         # esi
	cld                        # 清方向标志,把标识寄存器的D位置呈零,告诉后面的命令:字符串向高地址取得。
	movl	$16, %eax          # 
	movl	%eax, %ecx         # 16个单元
	rep
	movsl
	movl	LC0, %eax          # array5和array2的处理方式一样
	movl	%eax, -168(%ebp)
	movl	LC0+4, %eax
	movl	%eax, -164(%ebp)
	movl	LC0+8, %eax
	movl	%eax, -160(%ebp)
	movb	LC0+12, %al
	movb	%al, -156(%ebp)
    leal	-216(%ebp), %edi  #edi设置为array6[0]
	movl	$LC2, %esi
	cld
	movl	$12, %eax
	movl	%eax, %ecx
	rep
	movsl
	leal	-8(%ebp), %esp
	popl	%esi
	popl	%edi
	popl	%ebp
	ret


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值