首页 | 登录 | 现在注册  [2009年1月6日]
Global Sources
电子系统设计网站

专家博客-文章详细内容 首页 / 论坛 / 专家博客
2008-07-1420:00:52 星期一
《ADI Blackfin系列DSP处理器试验指导》 学习笔记-- ALU逻辑算术指令编程

一。试验目的:

a。 掌握ALU的结构原理和数据流;

b。 掌握ALU的算术逻辑指令用法;

c。 理解饱和和舍入的含义;

二。 试验代码:


.section program ;

.global _main ;

_main :


// 16bit operation ;

// 16bit ALU, Addition ;
 r0.h = 0xa5a5 ;
 r7.l = 0x5a5a ;
 r6.h = r0.h + r7.l (ns) ;
 
// 16bit ALU with AC ;
 R0.L = 0x6000 ;
 R5.H = 0X3000 ;
 R7.L = R5.H + R0.L ( NS) ;  // 不饱和操作;
 R7.H = R5.H + R0.L ( S ) ;  // 饱和操作,比较结果;
           //  两个负数相加后的结果;
 R0.L = 0XE5A4 ;
 R4.H = 0X8A5A ;
 R5.L = R0.L + R4.H (S) ;
 R5.H = R0.L + R4.H (NS) ;   // 对比结果看异同;
        // 两个负数相加后不溢出的情况;
 R6.H = R0.H + R0.L (S) ;
 R6.L = R0.H + R0.L (NS) ;   // 对比结果看异同;
 
// 32bit opertation ;

 R0.H = 0X5555;
 R0.L = 0X5555;
 R2.H = 0XAAAA;
 R2.L = 0XAAAA;
 R4 = R0 + R2 (NS) ;   // 32bit 带饱和操作;
 
 R2.H = 0X5555;
 R2.L = 0X5555 ;
 R5 = R0 + R2 (S) ;
 
// 16bit 实例;

// 16bit ALU operation ;

 R0.H = 0XFFFE ;
 R0.L = 0XFF00 ;
 R2.H = 0X1;
 R2.L = 0X1;
 R6 = R0 +|+ R2 ;  // 没有进位产生,对位相加,对应存储;
 
 R0.H = 0X7FFF ;
 R6 = R0 +|+ R2 ; // 有进位产生,不带饱和操作;
 
 R6 = R0 +|+ R0 ( S) ;  // 带饱和操作 ;
 R7 = R0 -|+ R2 ;
 
//  16bit 双ALU操作 ;

 R0.H = 0XFFFF;
 R0.L = 0XFF00;
 R2.H = 0X1;
 R2.L = 0X1 ;
 R6 = R0 +|- R2 , R7 = R0 -|+ R2 ;
 R6 = R0 +|+ R2 ,R7 = R0 -|- R2 ;
 
// 32bit 双ALU 操作;

 R0.H = 0X7FFF;
 R0.L = 0XFFFF;
 R2.H = 0;
 R2.L = 1;
 R6 = R0 + R2 , R5 = R0 - R2 ;
 R0.H = 0X7FFF ;
 R4.H = 0X8000 ;
 R4.L = 0 ;
 R6 = R4 + R2, R5 = R4 - R2 ( S ) ;

// 带有选项(co)的操作 ;

 R0.H = 0XFFFF ;
 R0.L = 0XFF00 ;
 R2.H = 1 ;
 R2.L = 1 ;
 R6 = R0 +|- R2,R7 = R0 -|+ R2 (CO) ;
 // 计算的结果进行交叉再存储;
 R6 = R0+|-R2 ,R7 = R0-|+R2(S);
 
// 预增比例的加法 ;
 R6.H = R0 + R7 ( RND12 ) ;
 l,
// 预减比例的加法 ;
 R6.H = R0 + R7 (RND20 ) ;  
 
// 绝对值指令 ;
 R1 = ABS R6 ;
 
//最大最小指令;
 R4 = MAX ( R6, R7 ) ;
 R3 = MIN ( R6, R7 ) ;
 
// 逻辑指令;
 R4 = R4 & R3 ;
 R4 = R4 | R3 ;
 R4 = ~ R4 ;
 R4 = R4 ^ R3 ;
 
// 位方式异或指令 ;
 A0 = R6 ;
 A1 = R2 ;
 R4.L = CC = BXORSHIFT ( A0 , R1 ) ;
 R7.L = CC = BXOR ( A0, R1 ) ;
 A0 = BXORSHIFT (A0, A1, CC ) ;
 R5.L = CC = BXOR (A0, A1, CC ) ;
 
// 指数检测指令;
 R1.H = 0X0010 ;
 R1.L = 0X0800 ;
 R7.L = 7 ;
 R2.L = EXPADJ ( R1, R7.L ) ;
 R2.L = EXPADJ ( R1, R7.L ) (V) ; // 带有选项的指令;
 
//符号位指令;
 R0.L = SIGNBITS R3 ;  // 求R3 符号位数;
 R3.L = 0XE711 ;
 R0.L = SIGNBITS R3.L ;
 
// 简单除法指令;

// 计算两个带符号的整数的商 ;
 P0 = 15 ;  // 计算商到16bit ;
 R0 = -130 ; 
 R1 = 5 ;
 R0 <<= 1 ;
 DIVS ( R0 , R1 ) ;
 LOOP .DIV_PRIM LC0 = P0 ;
 LOOP_BEGIN .DIV_PRIM ;
 DIVQ (R0, R1 ) ;
 LOOP_END .DIV_PRIM ;
 R0 = R0.L (X) ;
 
 NOP ;
 

_main.end :

标签: ALU 舍入 饱和
[
0
]
名读者喜欢此文    
实用内容通道
最新行业新闻
系统设计指南
技术资料下载中心
实用电路设计
近期最热文章
网站专题总汇
 
精品设计专栏赏析
绿色能源设计专栏
医疗电子设计专栏
HDTV设计专栏
汽车电子设计专栏
4G/3G设计专栏
机器人设计专栏
HDMI接口设计专栏
ESD保护设计专栏
工业控制应用设计专栏
微波与射频设计专栏
 

更多专题...


个性化主页


电子系统设计个性化主页!
境界决定成就,
开辟属于您的专属"境界" !


共享资源
上千份技术资料免费提供!嵌入式软件EDA/IC设计两大栏目上线!

ARM经典300问
嵌入式实用指南
光电转换电路大全
嵌入式入门笔记
电流检测电路大全

点击进入 分享资料
 
返回论坛首页