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

📄 div_f.lst

📁 TMS320C3X 汇编语言程序编译环境
💻 LST
字号:
 0001                	* REGISTER USED AS INPUT: R0
 0002                	* REGISTERS MODIFIED: R0, R1, R2, R3
 0003                	* REGISTER CONTAINING RESULT: R0
 0004                	         .global RESET,INIT
 0005                	         .global INVF,Loo
 0006                	* REGISTER FROM 808000H (CTRL)
 0007 000000         		 .data
 0008 000000 ffffffff 	MASK     .word 0FFFFFFFFH
 0009 000001 00809800 	BLK0     .word 0809800H ; 片内1K×32bit RAM块0起始地址
 0010 000002 00809c00 	BLK1     .word 0809C00H ; 片内1K×32bit RAM块1起始地址
 0011 000003 00809e00 	STCK     .word 0809E00H ; 堆栈起始地址
 0012 000004 00808000 	CTRL     .word 0808000H ; Pointer for peripheral±bus me
 0013 000005 00000000 	DMACTL   .word 0000000H ; Init for DMA control (0)
 0014 000006 00000000 	TIM0CTL  .word 0000000H ; Init of timer 0 control (32)
 0015 000007 00000000 	TIM1CTL  .word 0000000H ; Init of timer 1 control (48)
 0016 000008 00000000 	SERGLOB0 .word 0000000H ; Init of serial 0 glbl control 
 0017 000009 00000000 	SERPRTX0 .word 0000000H ; Init of serial 0 xmt port cont
 0018 00000a 00000000 	SERPRTR0 .word 0000000H ; Init of serial 0 rcv port cont
 0019 00000b 00000000 	SERTIM0  .word 0000000H ; Init of serial 0 timer control
 0020 00000c 00000000 	SERGLOB1 .word 0000000H ; Init of serial 1 glbl control 
 0021 00000d 00000000 	SERPRTX1 .word 0000000H ; Init of serial 1 xmt port cont
 0022 00000e 00000000 	SERPRTR1 .word 0000000H ; Init of serial 1 rcv port cont
 0023 00000f 00000000 	SERTIM1  .word 0000000H ; Init of serial 1 timer control
 0024 000010 00000000 	PARINT   .word 0000000H ; Init of parallel interface con
 0025 000011 00000000 	IOINT    .word 0000000H ; Init of I/O interface control 
 0026                	*
 0027                	
 0028 000000         	         .sect "init"; Named section
 0029 000000 00000000'	RESET    .word INIT ; RS± load address INIT to PC
 0030 000001 00000000 	         .space 63 ; Reserved space
 0031                	
 0032 000000         		.text
 0033                	* THE STATUS REGISTER HAS THE FOLLOWING ARRANGEMENT:
 0034                	* BITS:    31–14 13  12 11 10  9    8   7   6  5  4  3 
 0035                	* FUNCTION: RESRV GIE CC CE CF RESRV RM OVM LUF LV UF N 
 0036                	*
 0037 000000 08700000 	INIT:    LDP 0,DP ; Point the DP register to page 0
 0038 000001 08751800 	         LDI 1800H,ST ; Clear and enable cache, and disa
 0039 000002 08360000+	         LDI @MASK,IE ; Unmask all interrupts
 0040 000003 08280001+	         LDI @BLK0,AR0 ; AR0 points to block 0
 0041 000004 08290002+	         LDI @BLK1,AR1 ; AR1 points to block 1
 0042 000005 07608000 	         LDF 0.0,R0 ; 0 register R0
 0043 000006 13fb03ff 	         RPTS 1023 ; Repeat 1024 times ...
 0044 000007 c0002120	         STF R0,*AR0++(1) ; Zero out location in RAM blo
 0045                	         || STF R0,*AR1++(1) ; Zero out location in RAM 
 0046 000008 08280004+	         LDI @CTRL,AR0 ; Load in AR0 the pointer to cont
 0047 000009 08200005+		 LDI @DMACTL,R0
 0048 00000a 15400000 		 STI R0,*+AR0(0) ; Init DMA control
 0049 00000b 08200006+		 LDI @TIM0CTL,R0
 0050 00000c 15400020 		 STI R0,*+AR0(32) ; Init timer 0 control
 0051 00000d 08200007+		 LDI @TIM1CTL,R0
 0052 00000e 15400030 		 STI R0,*+AR0(48) ; Init timer 1 control
 0053 00000f 08200008+		 LDI @SERGLOB0,R0
 0054 000010 15400040 		 STI R0,*+AR0(64) ; Init serial 0 global control
 0055 000011 08200009+		 LDI @SERPRTX0,R0
 0056 000012 15400042 		 STI R0,*+AR0(66) ; Init serial 0 xmt control
 0057 000013 0820000a+		 LDI @SERPRTR0,R0
 0058 000014 15400043 		 STI R0,*+AR0(67) ; Init serial 0 rcv control
 0059 000015 0820000b+		 LDI @SERTIM0,R0
 0060 000016 15400044 		 STI R0,*+AR0(68) ; Init serial 0 timer control
 0061 000017 0820000c+		 LDI @SERGLOB1,R0
 0062 000018 15400050 		 STI R0,*+AR0(80) ; Init serial 1 global control
 0063 000019 0820000d+		 LDI @SERPRTX1,R0
 0064 00001a 15400052 		 STI R0,*+AR0(82) ; Init serial 1 xmt control
 0065 00001b 0820000e+		 LDI @SERPRTR1,R0
 0066 00001c 15400053 		 STI R0,*+AR0(83) ; Init serial 1 rcv control
 0067 00001d 0820000f+		 LDI @SERTIM1,R0
 0068 00001e 15400054 		 STI R0,*+AR0(84) ; Init serial 1 timer control
 0069 00001f 08200010+		 LDI @PARINT,R0
 0070 000020 15400064 		 STI R0,*+AR0(100) ; Init parallel interface control (C
 0071 000021 08200011+		 LDI @IOINT,R0
 0072 000022 15400060 		 STI R0,*+AR0(96) ; Init I/O interface control
 0073 000023 08340003+		 LDI @STCK,SP ; Init the stack pointer
 0074 000024 10752000 		 OR  2000H,ST ; Global interrupt enable
 0075                	
 0076 000025 07601b00 	         LDF   -3.25,R0
 0077 000026 6200002a+		 CALL  INVF
 0078 000027 07612700 		 LDF   7.5,R1
 0079 000028 24820100 		 MPYF3 R0,R1,R2
 0080                	
 0081 000029 60000029 	         BR $
 0082                	
 0083 00002a 07030000 	INVF: 	 LDF   R0,R3 ; 浮点除数v暂存R3
 0084 00002b 00000000 		 ABSF  R0 ; 浮点除数v取正
 0085                	* EXTRACT THE EXPONENT OF v.
 0086 00002c 0fa00000 		 PUSHF R0
 0087 00002d 0e210000 		 POP   R1
 0088 00002e 03e1ffe8 		 ASH   -24,R1 ;R1中的低8位为除数的指数部分
 0089                	* x[0] FORMATION IS GIVEN THE EXPONENT OF v.
 0090                	
 0091 00002f 0c010001 		 NEGI  R1
 0092 000030 18610001 		 SUBI  1,R1 ; 求-e-1, the exponent of x[0]
 0093 000031 03e10018 		 ASH   24,R1
 0094 000032 0f210000 		 PUSH  R1
 0095 000033 0ea10000 		 POPF  R1 ; Now R1 = x[0] = 1.0 * 2**(-e-1)
 0096                	* NOW THE ITERATIONS BEGIN.
 0097 000034 087b0008 	         LDI   8,RC
 0098 000035 64000038+	         RPTB  Loo
 0099 000036 24820001 		 MPYF  R1,R0,R2 ; R2 = v * x[0]
 0100 000037 19621000 		 SUBRF 2.0,R2 ; R2 = 2.0 ± v * x[0]
 0101 000038 0a010002 	Loo:	 MPYF  R2,R1 ; R1 = x[1] = x[0] * (2.0 - v * x[0])
 0102                	
 0103 000039 11010001 		 RND   R1 ; This minimizes error in the LSBs
 0104                	
 0105                	* FOR THE LAST ITERATION WE USE THE FORMULATION:
 0106                	* x[5] = (x[4] * (1.0 ± (v * x[4]))) + x[4]
 0107                	
 0108 00003a 24820001 		 MPYF  R1,R0,R2 ; R2 = v * x[4] = 1.0..01.. => 1
 0109 00003b 19620000 		 SUBRF 1.0,R2 ; R2 = 1.0 ± v * x[4] = 0.0..01... => 0
 0110 00003c 0a020001 		 MPYF  R1,R2 ; R2 = x[4] * (1.0 - v * x[4])
 0111 00003d 01810002 		 ADDF  R2,R1 ; R2 = x[5] = (x[4]*(1.0±(v*x[4])))+x[4]
 0112                	*
 0113 00003e 11000001 		 RND   R1,R0 ; Round since this is followed by a MPYF
 0114                	*
 0115                	* NOW THE CASE OF v < 0 IS HANDLED.
 0116                	*
 0117 00003f 0b820000 		 NEGF  R0,R2
 0118 000040 07030003 		 LDF   R3,R3 ; This sets condition flags
 0119 000041 43800002 		 LDFN  R2,R0 ; If v < 0, then R0 = -R0
 0120                	*
 0121 000042 78800000 		 RETS
 0122                	
 0123                		.end
 No Errors,  No Warnings

⌨️ 快捷键说明

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