gcc 内嵌汇编的学习笔记 III

           gcc 内嵌汇编的学习笔记 III
                                     --一个loop
  作者:ShellEx. 
  ShellEx.cn && blog.csdn.net/shellex 版权所有
 我又来了。今天实现的是类似While(...){...}的一个loop。对于不
支持高级语法(.if之流)的GNU gcc汇编器--也就是GAS--来说,写条件判
断和循环要略微麻烦呢。
#include
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 版权所有 

你可能感兴趣的:(编程的艺术.ASM)