题目: 实现计算 1 + 2 + 3 + … + ( N − 1 ) + N 1+2+3+…+(N-1)+N 1+2+3+…+(N−1)+N 的值 ( N > 0 ) (N>0) (N>0) 的加法运算
- 在 C 语言程序中调用汇编子程序,汇编子程序实现两个数的加法运算
- 在汇编程序中调用 C 语言子程序,C 语言子程序实现两个数的加法运算
一、 C 语言调用汇编子程序
C 语言主程序
#define uint32 unsigned int
#define N 100
extern uint32 doadd(uint32 x,uint32 y); // 引入汇编程序
uint32 sum;
int main()
{
uint32 i;
sum=0;
for(i=0;i<=N;i++)
{
sum=doadd(sum,i);
}
while(1);
return 0;
}
汇编加法子程序
;加法函数,原型为uint32 doadd(uint32 x,uint32 y)
AREA ASMADD,CODE,READONLY
EXPORT doadd ;将子程序输出
doadd ADD R0,R0,R1
MOV PC,LR
END
二、 汇编调用 C 语言程序
汇编主程序
N EQU 100 ;累加次数
;定义名为Adding的代码段
AREA Adding,CODE,READONLY
IMPORT MYADD ;引入 C 语言程序
ENTRY
MOV R0,#0 ;sum
MOV R1,#0 ;i
REPEAT BL MYADD
ADD R1,R1,#1
CMP R1,#N
BLE REPEAT
LDR R2,=RESULT
STR R0,[R2]
HERE B HERE
;定义名为Dataspace的数据段
AREA Dataspace,DATA,READWRITE
RESULT DCD 0
END
C 语言加法程序 (不需要输出即可在汇编中引用)
int MYADD(int x, int y) {
return x+y;
}