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

📄 mult.asm

📁 DSP的例程
💻 ASM
字号:
	.title	"TMS320C2xx PROCESSOR SELFCHECK -- MULTIPLIER TEST"
	.length	60
	.width	120
	.option	X
************************************************************
* MULTIPLIER INSTRUCTIONS TEST                             *
*                                                          *
* This routine checks multiplier operations.               *
*                                                          *
* Written by:                                              *
*                                                          *
* Release Version 1.0                                      *
*                                                          *
************************************************************
	.def	mult
	.nolist
	.copy	"options.h"
	.copy	"memmap.h"
	.list

	.text
mult	.set	$+SS

; preliminary setup
	SPM	0		; product mode shifter off
	LDP	#0h		; data page @ 0h
	SPLK	#07fffh,TEMP00	; data(TEMP00) = 7fffh
	SPLK	#08001h,TEMP01	; data(TEMP01) = 8001h
	SPLK	#0aaaah,TEMP02	; data(TEMP02) = aaaah
	SPLK	#05555h,TEMP03	; data(TEMP03) = 5555h
	SPLK	#00000h,TEMP04	; data(TEMP04) = 0h

; test immediate addressing
	LT	TEMP00		; TREG=7fffh
	MPY	#1fffh		; TREG=7fffh PREG=ffff8001h
	PAC			; TREG=7fffh PREG=ffff8001h ACC=ffff8001h
	CMPL			;                           ACC=00007ffeh
	XOR	#7ffeh          ;                           ACC=0
	BCND	ermult1,NEQ	; if ACC != 0 then error

; test direct addressing
	MPY	TEMP01		; TREG=7fffh PREG=c000ffffh
	LTP	TEMP02		; TREG=aaaah PREG=c000ffffh ACC=c000ffffh
	MPYU	TEMP03		; TREG=aaaah PREG=38e31c72h ACC=c000ffffh
	LTA	TEMP03		; TREG=5555h PREG=38e31c72h ACC=f8e41c71h
	MPYA	TEMP02		; TREG=5555h PREG=e38e1c72h ACC=31c738e3h
	SPAC			; TREG=5555h PREG=e38e1c72h ACC=4e391c71h
	LPH	TEMP03		; TREG=5555h PREG=55551c72h ACC=4e391c71h
	SQRS	TEMP02		; TREG=aaaah PREG=1c7238e4h ACC=f8e3ffffh                
	LTS	TEMP01		; TREG=8001h PREG=1c7238e4h ACC=dc71c71bh
	MPYS	TEMP02		; TREG=8001h PREG=2aaaaaaah ACC=bfff8e37h
	SQRA	TEMP03		; TREG=5555h PREG=1c718e39h ACC=eaaa38e1h
	APAC			; TREG=5555h PREG=1c718e39h ACC=071bc71ah
	XOR	#071bh,16	;                           ACC=0000c71ah
	XOR	#0c71ah		;                           ACC=0
	BCND	ermult2,NEQ	; if ACC != 0 then error

; test indirect addressing
	MAR	*,AR0		; ARP --> AR0
	LAR	AR0,#TEMP00	; AR0 points to TEMP00
	LT	*+		; TREG=7fffh
	MPY	*+		; TREG=7fffh PREG=c000ffffh
	LTP	*+		; TREG=aaaah PREG=c000ffffh ACC=c000ffffh
	MPYU	*		; TREG=aaaah PREG=38e31c72h ACC=c000ffffh
	LTA	*-		; TREG=5555h PREG=38e31c72h ACC=f8e41c71h
	MPYA	*+		; TREG=5555h PREG=e38e1c72h ACC=31c738e3h
	SPAC			; TREG=5555h PREG=e38e1c72h ACC=4e391c71h
	LPH	*-		; TREG=5555h PREG=55551c72h ACC=4e391c71h
	SQRS	*-		; TREG=aaaah PREG=1c7238e4h ACC=f8e3ffffh                
	LTS	*+		; TREG=8001h PREG=1c7238e4h ACC=dc71c71bh
	MPYS	*+		; TREG=8001h PREG=2aaaaaaah ACC=bfff8e37h
	SQRA	*		; TREG=5555h PREG=1c718e39h ACC=eaaa38e1h
	APAC			; TREG=5555h PREG=1c718e39h ACC=071bc71ah
	XOR	#071bh,16	;                           ACC=0000c71ah
	XOR	#0c71ah		;                           ACC=0
	BCND	ermult3,NEQ	; if ACC != 0 then error

; test MAC & MACD instructions
	MPY	#0h		; PREG=0
	RPT	#1h		; execute next instruction twice
	MAC	table,TEMP03	; TREG=5555h PREG=1c718e39h ACC=e38e1c72h
	RPT	#1h		; execute next instruction twice
	MACD	table,TEMP00	; TREG=7fffh PREG=2aaa2aabh ACC=d5550001h
	RPT	#1h		; execute next instruction twice
	MAC	table,*-	; TREG=aaaah PREG=e38e1c72h ACC=e38d471eh
	RPT	#1h		; execute next instruction twice
	MACD	table,*		; TREG=7fffh PREG=2aaa2aabh ACC=9c70b8e6h
	APAC			; TREG=7fffh PREG=2aaa2aabh ACC=c71ae391h
	XOR	#0c71ah,16	;                           ACC=0000e391h
	XOR	#0e391h		;                           ACC=0
	BCND	ermult4,NEQ	; if ACC != 0 then error

; test the remaining multiplier instructions        
	LAR	AR0,#TEMP02	; AR0 points to TEMP02
	SPL	TEMP00		; data(TEMP00) = 2aabh
	SPH	TEMP01		; data(TEMP01) = 2aaah
	SPL	*+		; data(TEMP02) = 2aabh
	SPH	*-		; data(TEMP03) = 2aaah
	LTD	TEMP03		; TREG=2aaah PREG=2aaa2aabh ACC=2aaa2aabh
	MPY	TEMP04		; TREG=2aaah PREG=071c38e4h ACC=2aaa2aabh
	LTD	*+		; TREG=2aabh PREG=071c38e4h ACC=31c6638fh
	MPYA	*		; TREG=2aabh PREG=071c8e39h ACC=38e29c73h
	LT	TEMP01		; TREG=2aaah PREG=071c8e39h ACC=38e29c73h
	MPYA	TEMP00		; TREG=2aaah PREG=071c638eh ACC=3fff2aach
	APAC			; TREG=2aaah PREG=071c638eh ACC=471b8e3ah
	XOR	#471bh,16	;                           ACC=00008e3ah
	XOR	#8e3ah		;                           ACC=0
	BCND	ermult5,NEQ	; if ACC != 0 then error

	RET			; test passes

*
* ERROR HANDLERS
*
ermult1	.set	$+SS

	LACL	#60h		; immediate addressing multiplier error
	RET			; test fails
;
ermult2	.set	$+SS

	LACL	#61h            ; direct addressing multiplier error
	RET			; test fails
;
ermult3	.set	$+SS

	LACL	#62h		; indirect addressing multiplier error
	RET			; test fails
;
ermult4	.set	$+SS

	LACL	#63h            ; MAC or MACD instruction error
	RET			; test fails
;
ermult5	.set	$+SS

	LACL	#64h		; LTD, SPH, or SPL instruction error
	RET			; test fails

*
* DATA TABLE IN PROGRAM SPACE
*
table	.set	$+SS

	.word	0aaaah,5555h  

⌨️ 快捷键说明

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