⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 excise_20_lib_l_abs.asm

📁 求一个32bits有符号数的绝对值
💻 ASM
字号:
/*
	
*	Copyright@fortemedia.com.cn

*	Author:FeiranYang

*	Date:2008/03/22

*	Email:feirany@fortemedia.com.cn

20.	Long Absolute, LIB_L_ABS


*/
#define N 2

.section/dm data1;	
	
.var x[N]={0x1,0x8000};//input data for words
.var x_abs[N];//output data
.var in;
.var result;
.section/pm interrupts;
	__reset: JUMP start; rti; rti; rti;     /* 0x0000: reset */
        rti; rti; rti; rti;            		/* 0x0004: IRQ2  */
        rti; rti; rti; rti;            		/* 0x0008: IRQL1 */
        rti; rti; rti; rti;            		/* 0x000c: IRQL0 */
        rti; rti; rti; rti;            		/* 0x0010: SPORT0 tx */
        rti; rti; rti; rti;            		/* 0x0014: SPORT1 rx */
        rti; rti; rti; rti;            		/* 0x0018: IRQE */
        rti; rti; rti; rti;            		/* 0x001c: BDMA */
        rti; rti; rti; rti;            		/* 0x0020: SPORT1 tx or IRQ1 */
        rti; rti; rti; rti;            		/* 0x0024: SPORT1 rx or IRQ0 */
        rti; rti; rti; rti;            		/* 0x0028: timer */
        rti; rti; rti; rti;            		/* 0x002c: power down */

.section/pm seg_code;		/* Example setup for DFT routine */

start:  
	m0=1;
	l0=0;
	m1=1;
	l1=0;
	//数据高16位从8000递加到7FFF,其他48位为 0001 0001 0001
	cntr=256;//256;
	do out_loop until ce;
	
	nop;
	cntr=256;
	do in_loop until ce;
	i0=x;       /*input intial*/

	ax0=dm(in); //从文件中读数据到寄存器
	dm(x+N-1)=ax0;//将高16位数据写到存储器
	call LIB_L_ABS;
	
	i1=x_abs;   /*output intial*/
	
	ax0=dm(i1,m1); //将输出写到文件,小端模式
	dm(result)=ax0;

	ax0=dm(i1,m1);
in_loop:	dm(result)=ax0;
	
	
out_loop: nop;
	
end:        IDLE;
/*
*   Get the abstract of any precision, the varible's precision is storee in N
*   Calling Parameters: 
	x[N] with N*16 bit.First LSW,last WSW.
	i0->input data
	m0=1
	l0=0
	i1->input data
	m1=1
	l1=0
		
*   Return Values:
	x's abstract ,store in x_abs[N]
	
*	Altered Registers:
	i0,i1,ax0,ay0,ar,af
	
*	computation time
	8+2*(N-1) for negative
	5+2*N for positive
	
	
*/

/************************************************************/
LIB_L_ABS:
	i0=x;       /*input intial*/
	i1=x_abs;   /*output intial*/
	
	ax0=dm(x+N-1);
	af=pass ax0;
	if GE jump transfer_direct; /*if input>=0,do nothing,just transfer*/
	
	/*if input<0,do the next processing*/
	ax0=dm(i0,m0);
	ax0=dm(i0,m0),ar=-ax0;   /*x_abs=2^(N*16) - x;here x<0*/
	dm(i1,m1)=ar;
	cntr=N-1;
	
	do abs_loop until ce;        /*mul_precision subtract*/
	ax0=dm(i0,m0),ar=-ax0+c-1;
abs_loop: dm(i1,m1)=ar;
	rts;
	
transfer_direct:                /*direct tranfer now*/
	cntr=N;
	do tran_data until ce;
	ax0=dm(i0,m0);
tran_data: dm(i1,m1)=ax0;
		
return: rts;
/************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -