Chinaunix首页 | 论坛 | 博客
  • 博客访问: 117146
  • 博文数量: 24
  • 博客积分: 1411
  • 博客等级: 上尉
  • 技术积分: 261
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-07 17:49
文章分类

全部博文(24)

文章存档

2009年(24)

我的朋友

分类:

2009-08-10 11:00:22


在程序里直接加入汇编指令是更为直接的办法,但是这样也限制了可移植性

比如下面的语句,直接把 %ebp 赋值给ebp_ptr,ebp_ptr再加1就是上一帧的返回地址。

int *ebp_ptr;

asm("movl %%ebp,%0"
      : "=r" (ebp_ptr) // output
      );
  ebp_ptr++;



另外,今天还看到了这种asm的用法:可以直接set某一个unsigned char,
这样就不用set %bl再 movzbl %bl, %eax

unsigned char byte_result;

    *dest = x*y; 


    asm("setae %0"
    : "=r" (byte_result) // output; 就在这里!直接赋值程序里的unsigned char
    );

    return (int) byte_result;

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