一、
源程序,

1
2
3
4
5
6
7
8
int
main()
{
	unsigned a = 1;
	int b = 1;
	while(a + b >= 0) --b;
	return 0;
}

汇编后,

1
2
3
4
5
	movl	$1, -4(%ebp)
	movl	$1, -8(%ebp)
.L2:
	subl	$1, -8(%ebp)
	jmp	.L2

二、
源程序,

1
2
3
//...
	while(a + b > 0) --b;
//...

汇编后,

1
2
3
4
5
6
7
8
9
10
11
12
	movl	$1, -4(%ebp)
	movl	$1, -8(%ebp)
	jmp	.L2
.L3:
	subl	$1, -8(%ebp)
.L2:
	movl	-8(%ebp), %eax
	addl	-4(%ebp), %eax
	testl	%eax, %eax
	setne	%al
	testb	%al, %al
	jne	.L3

三、
源程序,

1
2
3
//...
	while(a + b > -2) --b;
//...

汇编后,

1
2
3
4
5
6
7
8
9
10
11
12
	movl	$1, -4(%ebp)
	movl	$1, -8(%ebp)
	jmp	.L2
.L3:
	subl	$1, -8(%ebp)
.L2:
	movl	-8(%ebp), %eax
	addl	-4(%ebp), %eax
	cmpl	$-1, %eax
	sete	%al
	testb	%al, %al
	jne	.L3

四、
源程序,

1
2
3
//...
	while(a + b >= -2) --b;
//...

汇编后,

1
2
3
4
5
6
7
8
9
10
11
12
	movl	$1, -4(%ebp)
	movl	$1, -8(%ebp)
	jmp	.L2
.L3:
	subl	$1, -8(%ebp)
.L2:
	movl	-8(%ebp), %eax
	addl	-4(%ebp), %eax
	cmpl	$-3, %eax
	seta	%al
	testb	%al, %al
	jne	.L3

五、
源代码,

1
2
3
//...
	while(a + b >= 1) --b;
//...

汇编后,

1
2
3
4
5
6
7
8
9
10
11
12
	movl	$1, -4(%ebp)
	movl	$1, -8(%ebp)
	jmp	.L2
.L3:
	subl	$1, -8(%ebp)
.L2:
	movl	-8(%ebp), %eax
	addl	-4(%ebp), %eax
	testl	%eax, %eax
	setne	%al
	testb	%al, %al
	jne	.L3

  
  这里面猫腻儿还真不少。

  karmic到源里面没有以前到vim-full包了,取而代之到是vim包,但现在有很多问题,n”+yy和n”+p无法和系统”剪切板”里到内容关联了,不知道什么原因。

Update
  一切都释然了,只要意识到,>也需要进行类型提升。那么后面到-1啦-2啦之类的,都是很大很大的数了,循环根本就进不去,更别提死循环了。这样看来四、五两段程序就没有必要列出来了。其实,我是被它们的汇编代码给迷惑住了。

Tags: ,,.
你好!除了代码,此处没有多少原创之物,皆为本人搜集、整理、总结之记录与心得,欢迎转载分享!转载时请尽量注明出处,将不胜感激。祝你健康、快乐!
Home

RFC: Request For Comments. Orz..

Name(required)
Mail (required),(will not be published)

RFC: Request For Comments. Orz..

Website(recommended)