Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1412100
  • 博文数量: 143
  • 博客积分: 10005
  • 博客等级: 上将
  • 技术积分: 1535
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-23 17:25
个人简介

淡泊明志 宁静致远

文章分类

全部博文(143)

文章存档

2011年(2)

2009年(1)

2007年(22)

2006年(118)

我的朋友

分类: C/C++

2006-12-05 11:33:39

C语言库函数源代码】

【本程序在Dev C++ 4.9.9.2 下编译通过】

long int my_labs(long int number)

{

   return (number>= 0 ? number : -number);

}

 

long int my_asmlabs(long int number)

{

   __asm__(

      "mov %1,%%eax; \n\r"  //由输入寄存器 %1移动到eax

      "or %%eax,%%eax; \n\r" //或运算

      "jge 4f; \n\r"        //SF = OF 跳转

                //(符号位和溢出位相同的时候,为正数)

      "neg %%eax; \n\r"     //取负数预算指令

      "4:"      

      "mov %%eax,%0; \n\r"  //eax值赋给输出寄存器 %0

      :"=r"(number)       //输出寄存器 %0

      :"r"(number)        //输入寄存器 %1

   );

   return number;

}

 

int main()

{

   printf("%d\n",my_asmlabs(1));

   printf("%d\n",my_asmlabs(-1));

   printf("%d\n",my_asmlabs(0x7FFFFFFF));

   printf("%d\n",my_asmlabs(-0x7FFFFFFF));

   system("pause");

   return 0;

}

阅读(1242) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~