C内嵌汇编

格式:__asm{}   注:两个下划线

内嵌汇编指令中最好不使用物理寄存器名称,以免编译时出错

问题描述:在C工程的main()函数中定义了两个函数:badf()--加一;max()--求三个数最大数。
#include<stdio.h>
#include<string.h>
#define ITM_Port8(n) (*((volatile unsigned char*)(0xE0000000+4*n)))
#define ITM_Port16(n) (*((volatile unsigned short*)(0xE0000000+4*n)))
#define ITM_Port32(n) (*((volatile unsigned long*)(0xE0000000+4*n)))

#define DEMCR (*((volatile unsigned long *)(0xE000EDFC)))  //Debug Exception and Monitor Control Register, DEMCR
#define TRCENA 0x01000000
#include <stdio.h>
struct __FILE{int handle;};
FILE __stdout;
FILE __stdin;
 
int fputc(int ch, FILE *f)  // ??????? 
{
	if(DEMCR & TRCENA)
	{
	   while(ITM_Port32(0) == 0);
	   ITM_Port32(0) = ch;
	}
	return(ch);
}


int badf(int x);
int max(int a,int b,int c);

int main(void)
{
    int ch;
    int x;
    ch=badf(10);
    printf("ch=%d",ch);
    x=max(4,1,20);
    printf("\nmax=%d",x);
    return 0;
}
int badf(int x)
{    __asm
    {add x,x,1}
    return(x);
}
int max(int a,int b,int c)
{
    int maxtem;
    __asm
    {    mov maxtem,a
         cmp maxtem,b
         bhi loop1       ;a>b? ;hi后缀--无符号大于
         mov maxtem,b
    loop1:
         cmp maxtem,c
         bhi loop2       ;a>c?
         mov maxtem,c
    loop2:
         mov a,maxtem
    }
    return(a);
}

结果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值