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

📄 disk.s

📁 Atmega64单片机程序(完整工程)
💻 S
📖 第 1 页 / 共 3 页
字号:
	adiw R26,15
	ld R3,x
	clr R4
	clr R5
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
; 				#if FS_DEBUG_EN
; 				#if USART1_EN
; 	      		{
; 	                Uart1_SendString("\n 3.FATStartSec:");//调试用 ,FAT开始扇区号
	ldi R16,<L51
	ldi R17,>L51
	xcall _Uart1_SendString
; 	                PUT_INT32U_DecTOString(DiskInfo[i].FATStartSec);
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+4
	ldi R25,>_DiskInfo+4
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	ldd R17,z+1
	ldd R18,z+2
	ldd R19,z+3
	xcall _PUT_INT32U_DecTOString
; 	        	}
; 	        	#endif
; 				#endif
;                 
; 		 /* FAT表占用扇区数 */
;                 temp=((INT32U)Buf[23]<<8)+Buf[22];
	ldi R24,8
	ldi R25,0
	movw R30,R14
	ldd R2,z+23
	clr R3
	clr R4
	clr R5
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsl32
	movw R2,R16
	movw R4,R18
	movw R30,R14
	ldd R6,z+22
	clr R7
	clr R8
	clr R9
	add R2,R6
	adc R3,R7
	adc R4,R8
	adc R5,R9
	movw R12,R2
;                 if(temp!=0)
	tst R2
	brne X3
	tst R3
	breq L53
X3:
;                     DiskInfo[i].FATSecCnt=temp ;
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+8
	ldi R25,>_DiskInfo+8
	add R30,R24
	adc R31,R25
	movw R2,R12
	clr R4
	clr R5
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	xjmp L54
L53:
;                 else 
;                 {
;                     DiskInfo[i].FATSecCnt=((INT32U)Buf[37]<<8)+Buf[36];
	ldi R24,8
	ldi R25,0
	movw R30,R14
	ldd R2,z+37
	clr R3
	clr R4
	clr R5
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsl32
	movw R2,R16
	movw R4,R18
	movw R30,R14
	ldd R6,z+36
	clr R7
	clr R8
	clr R9
	add R2,R6
	adc R3,R7
	adc R4,R8
	adc R5,R9
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+8
	ldi R25,>_DiskInfo+8
	add R30,R24
	adc R31,R25
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
;                     DiskInfo[i].FATSecCnt|=(((INT32U)Buf[38]<<16)+((INT32U)Buf[39]<<24));
	ldi R24,46
	mul R24,R10
	movw R2,R0
	ldi R24,<_DiskInfo+8
	ldi R25,>_DiskInfo+8
	add R2,R24
	adc R3,R25
	ldi R24,24
	ldi R25,0
	movw R30,R14
	ldd R4,z+39
	clr R5
	clr R6
	clr R7
	st -y,R24
	movw R16,R4
	movw R18,R6
	xcall lsl32
	movw R30,R14
	ldd R4,z+38
	clr R5
	clr R6
	clr R7
	movw R6,R4
	clr R4
	clr R5
	add R4,R16
	adc R5,R17
	adc R6,R18
	adc R7,R19
	movw R30,R2
	ldd R20,z+0
	ldd R21,z+1
	ldd R22,z+2
	ldd R23,z+3
	or R20,R4
	or R21,R5
	or R22,R6
	or R23,R7
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
;                 }
L54:
; 		#if FS_DEBUG_EN
; 		#if USART1_EN
; 	        {
; 	            Uart1_SendString("\n 4.FATSecCnt:");//FAT表占用扇区数
	ldi R16,<L58
	ldi R17,>L58
	xcall _Uart1_SendString
; 	            PUT_INT32U_DecTOString(DiskInfo[i].FATSecCnt);
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+8
	ldi R25,>_DiskInfo+8
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	ldd R17,z+1
	ldd R18,z+2
	ldd R19,z+3
	xcall _PUT_INT32U_DecTOString
; 	        }
; 	        #endif
; 		#endif
; 		
; 		/* FAT表个数 */
;                 DiskInfo[i].NumFATs=Buf[16];
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+3
	ldi R25,>_DiskInfo+3
	add R30,R24
	adc R31,R25
	movw R26,R14
	adiw R26,16
	ld R2,x
	std z+0,R2
; 		#if FS_DEBUG_EN
; 		#if USART1_EN
; 	        {
; 	            Uart1_SendString("\n 5.NumFATs:");//调试用 ,FAT表个数
	ldi R16,<L61
	ldi R17,>L61
	xcall _Uart1_SendString
; 	            PUT_INT32U_DecTOString(DiskInfo[i].NumFATs);
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+3
	ldi R25,>_DiskInfo+3
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	clr R3
	clr R4
	clr R5
	movw R16,R2
	movw R18,R4
	xcall _PUT_INT32U_DecTOString
; 	        }
; 	        #endif
; 		#endif
;                 
; 		/* 根目录占扇区数 */
;                 DiskInfo[i].RootSecCnt=((((INT16U)Buf[18]<<8)+Buf[17])*32+DiskInfo[i].BytsPerSec-1)/DiskInfo[i].BytsPerSec ;
	ldi R24,46
	mul R24,R10
	movw R2,R0
	movw R30,R14
	ldd R4,z+17
	movw R30,R14
	ldd R5,z+18
	mov R19,R5
	mov R18,R4
	ldi R16,32
	ldi R17,0
	xcall empy16s
	movw R4,R16
	clr R6
	clr R7
	ldi R24,<_DiskInfo+16
	ldi R25,>_DiskInfo+16
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R20,z+0
	ldd R21,z+1
	ldd R22,z+2
	ldd R23,z+3
	add R4,R20
	adc R5,R21
	adc R6,R22
	adc R7,R23
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sub R4,R20
	sbc R5,R21
	sbc R6,R22
	sbc R7,R23
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R20,z+0
	ldd R21,z+1
	ldd R22,z+2
	ldd R23,z+3
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	movw R16,R4
	movw R18,R6
	xcall div32u
	ldi R24,<_DiskInfo+24
	ldi R25,>_DiskInfo+24
	movw R30,R2
	add R30,R24
	adc R31,R25
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
; 		#if FS_DEBUG_EN
; 		#if USART1_EN
; 	        {
; 	            Uart1_SendString("\n 6.RootSecCnt:");//根目录占扇区数
	ldi R16,<L66
	ldi R17,>L66
	xcall _Uart1_SendString
; 	            PUT_INT32U_DecTOString(DiskInfo[i].RootSecCnt);
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+24
	ldi R25,>_DiskInfo+24
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	ldd R17,z+1
	ldd R18,z+2
	ldd R19,z+3
	xcall _PUT_INT32U_DecTOString
; 	        }
; 	        #endif
; 		#endif
; 		
;                 /* 逻辑盘(卷)占扇区数 */
;                 temp=((INT16U)Buf[20]<<8)+Buf[19];
	movw R30,R14
	ldd R2,z+19
	movw R30,R14
	ldd R3,z+20
	mov R13,R3
	mov R12,R2
;                 if(temp!=0)
	tst R12
	brne X4
	tst R13
	breq L68
X4:
;                     DiskInfo[i].SecPerDisk=temp ;
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+12
	ldi R25,>_DiskInfo+12
	add R30,R24
	adc R31,R25
	movw R2,R12
	clr R4
	clr R5
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	xjmp L69
L68:
;                 else 
;                 {
;                     DiskInfo[i].SecPerDisk=((INT32U)Buf[33]<<8)+Buf[32];
	ldi R24,8
	ldi R25,0
	movw R30,R14
	ldd R2,z+33
	clr R3
	clr R4
	clr R5
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsl32
	movw R2,R16
	movw R4,R18
	movw R30,R14
	ldd R6,z+32
	clr R7
	clr R8
	clr R9
	add R2,R6
	adc R3,R7
	adc R4,R8
	adc R5,R9
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+12
	ldi R25,>_DiskInfo+12
	add R30,R24
	adc R31,R25
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
;                     DiskInfo[i].SecPerDisk|=(((INT32U)Buf[34]<<16)+((INT32U)Buf[35]<<24));
	ldi R24,46
	mul R24,R10
	movw R2,R0
	ldi R24,<_DiskInfo+12
	ldi R25,>_DiskInfo+12
	add R2,R24
	adc R3,R25
	ldi R24,24
	ldi R25,0
	movw R30,R14
	ldd R4,z+35
	clr R5
	clr R6
	clr R7
	st -y,R24
	movw R16,R4
	movw R18,R6
	xcall lsl32
	movw R30,R14
	ldd R4,z+34
	clr R5
	clr R6
	clr R7
	movw R6,R4
	clr R4
	clr R5
	add R4,R16
	adc R5,R17
	adc R6,R18
	adc R7,R19
	movw R30,R2
	ldd R20,z+0
	ldd R21,z+1
	ldd R22,z+2
	ldd R23,z+3
	or R20,R4
	or R21,R5
	or R22,R6
	or R23,R7
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
;                 }
L69:
; 		#if FS_DEBUG_EN
; 		#if USART1_EN
; 	        {
; 	            Uart1_SendString("\n 7.SecPerDisk:");//逻辑盘(卷)占扇区数
	ldi R16,<L73
	ldi R17,>L73
	xcall _Uart1_SendString
; 	            PUT_INT32U_DecTOString(DiskInfo[i].SecPerDisk);
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+12
	ldi R25,>_DiskInfo+12
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	ldd R17,z+1
	ldd R18,z+2
	ldd R19,z+3
	xcall _PUT_INT32U_DecTOString
; 	        }
; 	        #endif
; 		#endif
; 		
;                 DiskInfo[i].PathClusIndex=0 ;/* 当前目录为根目录 */
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+36
	ldi R25,>_DiskInfo+36
	add R30,R24
	adc R31,R25
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
; 		
;                 /* 根目录开始扇区号 */
;                 DiskInfo[i].RootDirTable=DiskInfo[i].NumFATs*DiskInfo[i].FATSecCnt+DiskInfo[i].FATStartSec ;
	ldi R24,46
	mul R24,R10
	movw R2,R0
	ldi R24,<_DiskInfo+8
	ldi R25,>_DiskInfo+8
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	ldi R24,<_DiskInfo+3
	ldi R25,>_DiskInfo+3
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R20,z+0
	clr R21
	clr R22
	clr R23
	st -y,R7
	st -y,R6
	st -y,R5
	st -y,R4
	movw R16,R20
	movw R18,R22
	xcall empy32u
	movw R4,R16
	movw R6,R18
	ldi R24,<_DiskInfo+4
	ldi R25,>_DiskInfo+4
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R20,z+0
	ldd R21,z+1
	ldd R22,z+2
	ldd R23,z+3
	add R4,R20
	adc R5,R21
	adc R6,R22
	adc R7,R23
	ldi R24,<_DiskInfo+20
	ldi R25,>_DiskInfo+20
	movw R30,R2
	add R30,R24
	adc R31,R25
	std z+0,R4
	std z+1,R5
	std z+2,R6
	std z+3,R7
;                 #if FS_DEBUG_EN
; 		#if USART1_EN
; 	        {
; 	            Uart1_SendString("\n 8.RootDirTable:");//根目录开始扇区号
	ldi R16,<L80
	ldi R17,>L80
	xcall _Uart1_SendString
; 	            PUT_INT32U_DecTOString(DiskInfo[i].RootDirTable);
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+20
	ldi R25,>_DiskInfo+20
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	ldd R17,z+1
	ldd R18,z+2
	ldd R19,z+3
	xcall _PUT_INT32U_DecTOString
; 	        }
; 	        #endif
; 		#endif
; 	    
; 	        /* 数据区开始扇区号 */
;                 DiskInfo[i].DataStartSec=DiskInfo[i].RootDirTable+DiskInfo[i].RootSecCnt ;
	ldi R24,46
	mul R24,R10
	ldi R24,<_DiskInfo+24
	ldi R25,>_DiskInfo+24
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	ldi R24,<_DiskInfo+20
	ldi R25,>_DiskInfo+20
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R6,z+0
	ldd R7,z+1
	ldd R8,z+2
	ldd R9,z+3
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	ldi R24,<_DiskInfo+28
	ldi R25,>_DiskInfo+28
	movw R30,R0
	add R30,R24
	adc R31,R25
	std z+0,R6
	std z+1,R7
	std z+2,R8
	std z+3,R9
;                 #if FS_DEBUG_EN
; 		#if USART1_EN
; 	        {
; 	            Uart1_SendString("\n 9.DataStartSec:");//数据区开始扇区号
	ldi R16,<L85
	ldi R17,>L85
	xcall _Uart1_SendString
; 	            PUT_INT32U_DecTOString(DiskInfo[i].DataStartSec);
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+28
	ldi R25,>_DiskInfo+28
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	ldd R17,z+1
	ldd R18,z+2
	ldd R19,z+3
	xcall _PUT_INT32U_DecTOString
; 	        }
; 	        #endif
; 		#endif
; 	    
; 	        temp1=DiskInfo[i].SecPerDisk-DiskInfo[i].DataStartSec ;
	ldi R24,46
	mul R24,R10
	ldi R24,<_DiskInfo+28
	ldi R25,>_DiskInfo+28
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	ldi R24,<_DiskInfo+12
	ldi R25,>_DiskInfo+12
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R6,z+0
	ldd R7,z+1
	ldd R8,z+2
	ldd R9,z+3
	sub R6,R2
	sbc R7,R3
	sbc R8,R4
	sbc R9,R5
	movw R30,R28
	std z+2,R6
	std z+3,R7
	std z+4,R8

⌨️ 快捷键说明

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