#include <stdio.h>
unsigned *swi_addr = (unsigned *)0x08; //软中断地址
extern void SWI_Handler(void); //软中断服务程序
unsigned Install_Handler( unsigned routine, unsigned *vector ) //安装软中断
{
unsigned vec, old_vec;
vec = (routine - (unsigned)vector - 8) >> 2;
if (vec & 0xff000000)
{
printf("软中断服务程序地址超过32M");
}
vec = 0xea000000 | vec;
old_vec = *vector;
*vector = vec;
return (old_vec);
}
struct int64
{
int inthigh32;
int intlow32;
};
__swi(0) __value_in_regs struct int64 add64(int high32_a,int low32_a,int hign32_b,int low32_b);
int main(void)
{
int n,i;
struct int64 result={0,0},num={0,0};
Install_Handler( (unsigned) SWI_Handler, swi_addr ); //安装中断向量
printf("请输入数组的大小\n");
scanf("%d",&n);
for(i=0;i<2*n;i+=2)
{
printf("num%d low32:",i+1);
scanf("%d",&num.intlow32);
printf("num%d high32:",i+1);
scanf("%d",&num.inthigh32);
result = add64(result.inthigh32,result.intlow32,num.inthigh32,num.intlow32);
}
printf("the high 32 bit of result is %d\n",result.inthigh32);
printf("the low 32 bit of result is %d\n",result.intlow32);
while(1);
return 0;
}