gcc 内嵌汇编的学习笔记 III
--一个loop
作者:ShellEx.
ShellEx.cn && blog.csdn.net/shellex 版权所有
我又来了。今天实现的是类似While(...){...}的一个loop。对于不
支持高级语法(.if之流)的GNU gcc汇编器--也就是GAS--来说,写条件判
断和循环要略微麻烦呢。
#include <stdio.h>
int main() {
int in = 0, out =0, i = 0 ;
printf("PLZ input a Number: /n");
scanf("%d", &in);
asm volatile(
"nop #LoopTest/n"
"L_BEG: /n/t" //起始标志位
"cmp %2, %1 /n/t" //比较in 和 i (放在寄存器中)的值
"jge L_END /n/t" //i 比in 大就跳出
"addl $2, %0 /n/t" //否则out+=2
"incl %1 /n/t" //i自增
"jmp L_BEG /n" //跳回起始 位置
"L_END: /n/t" //结束标志
:"+r"(out),"+r"(i)
:"r"(in)
:
);
printf("out = %d",out);
return 0;
}
///
没有难度,就仅仅是比较和跳转,相当于下列C++ code :
while (i < in) {
out += 2;
++i;
}
shellex.cn && blog.csdn.net/shellex 版权所有