一、
源程序,
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啦之类的,都是很大很大的数了,循环根本就进不去,更别提死循环了。这样看来四、五两段程序就没有必要列出来了。其实,我是被它们的汇编代码给迷惑住了。
你好!除了代码,此处没有多少原创之物,皆为本人搜集、整理、总结之记录与心得,欢迎转载分享!转载时请尽量注明出处,将不胜感激。祝你健康、快乐!
sudo apt-get install vim-gnome
我试试