Sample Code to Brennan's Guide to Inline Assembly

#include <stdio.h>

int times5(int n) {
  asm ("leal (%1,%1,4), %0"
      : "=r" (n)
      : "0" (n) );
  return n;
}

void test_times5() {
  int n = 2;
  printf("%d\n", times5(n));
}

#define rep_movsl(src, dest, numwords) \
  __asm__ __volatile( \
      "cld\n\t" \
      "rep movsl" \
      : \
      : "S" (src), "D" (dest), "c" (numwords))

void test_rep_movsl() {
  int src[] = {100, 200, 300};
  int dest[3];
  rep_movsl(src, dest, 3);

  int i;
  for (i = 0; i < 3; i++)
    printf("dest[%d]: %d\n", i, dest[i]);
}

#define RDTSC(ll) ({ \
    __asm__ __volatile__ ( \
      ".byte 0x0f; .byte 0x31" \
      : "=A" (ll) ); })

void test_RDTSC() {
  unsigned long long ll = 0;
  RDTSC(ll);
  printf("time-stamp counter: %#llX", ll);
}

int main(int argc, const char *argv[]) {
  test_times5();
  test_rep_movsl();
  test_RDTSC();
  return 0;
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值