MDK:在C语言和汇编语言中的相互调用

文章目录

一.代码编写

1.参考代码

1.汇编语言

	AREA  My_Function,CODE,READONLY
	EXPORT Init_1;
Init_1
	MOV R1,#0;
	MOV R2,#0;
LOOP;
	CMP R1,#10;
	BHS LOOP_END;
	ADD R2,#1;
	ADD R1,#1;
	B LOOP;
LOOP_END;
	NOP
	END;

2.C语言

#include<stdio.h>
extern void Init_1(void);
int main(){
Init_1();
return 0;
}

执行代码,进入调试
调试如图:
在这里插入图片描述
在这里插入图片描述

二.C语言中调用汇编语言

1.修改代码
(1).c程序

#include<stdio.h>
extern int Init_1(int x); 
extern  x=25;              //在别处定义全局变量x=25
int main(){
	Init_1(x);               //main函数调用函数Init_1,参数为x=25
	return 0;
}

(2).s程序

	AREA	My_Function,CODE,READONLY;  
	EXPORT Init_1;
Init_1
	ADD R0,#100;     
	BX lr;             将寄存器R0的值返回到主函数
	END;

2.调试代码
单步执行
在这里插入图片描述
继续执行
在这里插入图片描述
R0的寄存器的值由19变为7D

三.在汇编程序中调用C程序

1.修改代码

.c程序

#include <stdio.h>
extern int init_2(void);  //声明汇编函数
int init_1(int x)        
{
	return x+100;
}
int main()
{
	init_2();  //调用汇编函数
	return 0;
}

.s程序

	AREA	My_Fuction,CODE,READONLY;
	IMPORT	init_1;引入外部函数,即C语言函数init_1
	EXPORT  init_2
	
init_2
	MOV R0, #25;寄存器R0的值加上25再存入R0中
	BL init_1;调用main中的init_1函数
	BX lr;返回主函数
	END;

2.调试程序

单步执行

在这里插入图片描述

四.实验总结

该实验将汇编语言调用在C语言中,汇编语言体现了寄存器的使用,可以实现逐步改变变量值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值