📄 demo.s90
字号:
LDI R30,LOW(__Tab)
LDI R31,HIGH(__Tab)
LDI R19,(__Tab) >> 16
OUT 0x3B,R19
ELPM R16,Z
LDI R17,0
RCALL putchar
BST R12,4
BRTC ??read_directory_18
LDI R30,LOW(__OpenBracket)
LDI R31,HIGH(__OpenBracket)
LDI R19,(__OpenBracket) >> 16
OUT 0x3B,R19
ELPM R16,Z
LDI R17,0
RCALL putchar
??read_directory_18:
LDI R24,0
LDI R25,0
RJMP ??read_directory_19
??read_directory_20:
LD R16,Y
LDD R17,Y+1
MOVW R31 : R30,R17 : R16
SUBI R30,LOW((-(_FF_buff) & 0xFFFF))
SBCI R31,(-(_FF_buff) & 0xFFFF) >> 8
LD R16,Z
LDI R17,0
RCALL putchar
ADIW R25 : R24,1
??read_directory_19:
CPI R24,8
LDI R16,0
CPC R25,R16
BRCC ??read_directory_21
MOVW R17 : R16,R11 : R10
MOVW R19 : R18,R17 : R16
LDI R20,5
MOVW R17 : R16,R19 : R18
CALL ?S_SHL_L02
ADD R16,R24
ADC R17,R25
ST Y,R16
STD Y+1,R17
LD R16,Y
LDD R17,Y+1
MOVW R31 : R30,R17 : R16
SUBI R30,LOW((-(_FF_buff) & 0xFFFF))
SBCI R31,(-(_FF_buff) & 0xFFFF) >> 8
LD R16,Z
CPI R16,32
BRNE ??read_directory_20
??read_directory_21:
BST R12,4
BRTC ??read_directory_22
LDD R16,Y+4
LDD R17,Y+5
ST -Y,R17
ST -Y,R16
LDI R16,LOW(SC_str)
LDI R17,HIGH(SC_str)
LDI R18,(SC_str) >> 16
CALL printf_P
ADIW R29 : R28,2
RJMP ??read_directory_12
??read_directory_22:
LDI R30,LOW(__Period)
LDI R31,HIGH(__Period)
LDI R19,(__Period) >> 16
OUT 0x3B,R19
ELPM R16,Z
LDI R17,0
RCALL putchar
LDI R24,8
LDI R25,0
RJMP ??read_directory_10
??read_directory_13:
LDI R16,1
ADD R8,R16
LDI R16,0
ADC R9,R16
LDI R30,LOW(_FF_ROOT_ADDR)
LDI R31,(_FF_ROOT_ADDR) >> 8
LD R16,Z
LDD R17,Z+1
LDD R18,Z+2
LDD R19,Z+3
LDI R30,LOW(_FF_DIR_ADDR)
LDI R31,(_FF_DIR_ADDR) >> 8
LD R20,Z
LDD R21,Z+1
LDD R22,Z+2
LDD R23,Z+3
CP R16,R20
CPC R17,R21
CPC R18,R22
CPC R19,R23
BRNE $+2+2
RJMP ??read_directory_5
LDS R16,BPB_SecPerClus
LDI R17,0
CP R8,R16
CPC R9,R17
BREQ $+2+2
RJMP ??read_directory_5
LDI R18,2
MOVW R17 : R16,R15 : R14
RCALL next_cluster
MOVW R9 : R8,R17 : R16
LDI R16,255
CP R8,R16
LDI R16,255
CPC R9,R16
BREQ $+2+2
RJMP ??read_directory_6
??read_directory_7:
LDI R30,LOW(__CR)
LDI R31,HIGH(__CR)
LDI R19,(__CR) >> 16
OUT 0x3B,R19
ELPM R16,Z
LDI R17,0
RCALL putchar
LDI R30,LOW(__LF)
LDI R31,HIGH(__LF)
LDI R19,(__LF) >> 16
OUT 0x3B,R19
ELPM R16,Z
LDI R17,0
RCALL putchar
??read_directory_1:
ADIW R29 : R28,6
LDI R30,16
JMP ?EPILOGUE_B16_L09
RSEG FAR_F:CODE:NOROOT(0)
// char __farflash VolSerialStr[26]
VolSerialStr:
DB "\015\012 Volume Serial: [0x%lX]"
RSEG FAR_F:CODE:NOROOT(0)
// char __farflash VolLabelStr[24]
VolLabelStr:
DB "\015\012 Volume Label: [%s]\015\012"
RSEG CODE:CODE:NOROOT(1)
// __nearfunc void GetVolID()
GetVolID:
LDI R30,LOW(BS_VolSerial)
LDI R31,(BS_VolSerial) >> 8
LD R16,Z
LDD R17,Z+1
LDD R18,Z+2
LDD R19,Z+3
ST -Y,R19
ST -Y,R18
ST -Y,R17
ST -Y,R16
LDI R16,LOW(VolSerialStr)
LDI R17,HIGH(VolSerialStr)
LDI R18,(VolSerialStr) >> 16
CALL printf_P
ADIW R29 : R28,4
LDI R16,LOW(BS_VolLab)
LDI R17,(BS_VolLab) >> 8
ST -Y,R17
ST -Y,R16
LDI R16,LOW(VolLabelStr)
LDI R17,HIGH(VolLabelStr)
LDI R18,(VolLabelStr) >> 16
CALL printf_P
ADIW R29 : R28,2
RET
RSEG CODE:CODE:NOROOT(1)
// __nearfunc unsigned long clust_to_addr(unsigned int)
clust_to_addr:
CALL ?PROLOGUE4_L09
CPI R16,2
LDI R18,0
CPC R17,R18
BRCC ??clust_to_addr_0
LDI R16,0
LDI R17,0
LDI R18,0
LDI R19,0
RJMP ??clust_to_addr_1
??clust_to_addr_0:
SUBI R16,2
SBCI R17,0
LDS R18,BPB_SecPerClus
LDI R19,0
LDI R20,0
MUL R17,R19
MOVW R27 : R26,R1 : R0
MUL R16,R18
MOVW R25 : R24,R1 : R0
MUL R17,R18
ADD R25,R0
ADC R26,R1
ADC R27,R20
MUL R19,R16
ADD R25,R0
ADC R26,R1
ADC R27,R20
LDI R30,LOW(FirstDataSector)
LDI R31,(FirstDataSector) >> 8
LD R20,Z
LDD R21,Z+1
LDI R22,0
LDI R23,0
ADD R20,R24
ADC R21,R25
ADC R22,R26
ADC R23,R27
LDI R30,LOW(_FF_PART_ADDR)
LDI R31,(_FF_PART_ADDR) >> 8
LD R16,Z
LDD R17,Z+1
LDI R18,0
LDI R19,0
ADD R16,R20
ADC R17,R21
ADC R18,R22
ADC R19,R23
??clust_to_addr_1:
LDI R30,4
JMP ?EPILOGUE_B4_L09
RSEG CODE:CODE:NOROOT(1)
// __nearfunc unsigned int addr_to_clust(unsigned long)
addr_to_clust:
LDI R30,LOW(_FF_PART_ADDR)
LDI R31,(_FF_PART_ADDR) >> 8
LD R20,Z
LDD R21,Z+1
LDI R22,0
LDI R23,0
CP R20,R16
CPC R21,R17
CPC R22,R18
CPC R23,R19
BRCS ??addr_to_clust_0
LDI R16,0
LDI R17,0
RET
??addr_to_clust_0:
LDI R30,LOW(_FF_PART_ADDR)
LDI R31,(_FF_PART_ADDR) >> 8
LD R20,Z
LDD R21,Z+1
LDI R22,0
LDI R23,0
SUB R16,R20
SBC R17,R21
SBC R18,R22
SBC R19,R23
LDI R30,LOW(FirstDataSector)
LDI R31,(FirstDataSector) >> 8
LD R20,Z
LDD R21,Z+1
LDI R22,0
LDI R23,0
CP R16,R20
CPC R17,R21
CPC R18,R22
CPC R19,R23
BRCC ??addr_to_clust_1
LDI R16,0
LDI R17,0
RET
??addr_to_clust_1:
LDI R30,LOW(FirstDataSector)
LDI R31,(FirstDataSector) >> 8
LD R20,Z
LDD R21,Z+1
LDI R22,0
LDI R23,0
SUB R16,R20
SBC R17,R21
SBC R18,R22
SBC R19,R23
LDS R20,BPB_SecPerClus
LDI R21,0
LDI R22,0
LDI R23,0
CALL ?UL_DIVMOD_L03
SUBI R16,254
SBCI R17,255
SBCI R18,255
SBCI R19,255
CPI R16,0
LDI R20,0
CPC R17,R20
LDI R20,1
CPC R18,R20
LDI R20,0
CPC R19,R20
BRCS ??addr_to_clust_2
LDI R16,0
LDI R17,0
??addr_to_clust_2:
RET
RSEG CODE:CODE:NOROOT(1)
// __nearfunc unsigned int next_cluster(unsigned int, unsigned char)
next_cluster:
CALL ?PROLOGUE11_L09
REQUIRE ?Register_R4_is_cg_reg
REQUIRE ?Register_R5_is_cg_reg
REQUIRE ?Register_R6_is_cg_reg
REQUIRE ?Register_R7_is_cg_reg
REQUIRE ?Register_R8_is_cg_reg
REQUIRE ?Register_R9_is_cg_reg
REQUIRE ?Register_R10_is_cg_reg
SBIW R29 : R28,2
MOVW R25 : R24,R17 : R16
MOV R10,R18
CPI R24,2
LDI R16,0
CPC R25,R16
BRCC ??next_cluster_0
LDI R16,255
LDI R17,255
RJMP ??next_cluster_1
??next_cluster_0:
LDS R16,BPB_FATType
CPI R16,54
BREQ $+2+2
RJMP ??next_cluster_2
MOVW R17 : R16,R25 : R24
MOV R16,R17
LDI R17,0
LDI R30,LOW(BPB_RsvdSecCnt)
LDI R31,(BPB_RsvdSecCnt) >> 8
LD R6,Z
LDD R7,Z+1
ADD R6,R16
ADC R7,R17
CLR R5
CLR R4
DEC R4
AND R4,R24
AND R5,R25
LSL R4
ROL R5
LDI R30,LOW(_FF_PART_ADDR)
LDI R31,(_FF_PART_ADDR) >> 8
LD R24,Z
LDD R25,Z+1
ADD R24,R6
ADC R25,R7
LDI R26,0
LDI R27,0
LDI R16,2
CP R10,R16
BRNE ??next_cluster_3
LDI R20,LOW(_FF_buff)
LDI R21,(_FF_buff) >> 8
MOVW R17 : R16,R25 : R24
MOVW R19 : R18,R27 : R26
RCALL _FF_read
TST R16
BREQ $+2+2
RJMP ??next_cluster_4
LDI R16,255
LDI R17,255
RJMP ??next_cluster_1
??next_cluster_3:
LDI R16,1
CP R10,R16
BREQ $+2+2
RJMP ??next_cluster_4
LDI R30,LOW(_FF_buff_addr)
LDI R31,(_FF_buff_addr) >> 8
LD R16,Z
LDD R17,Z+1
LDD R18,Z+2
LDD R19,Z+3
CP R24,R16
CPC R25,R17
CPC R26,R18
CPC R27,R19
BRNE $+2+2
RJMP ??next_cluster_4
LDI R30,LOW(_FF_buff_addr)
LDI R31,(_FF_buff_addr) >> 8
LD R16,Z
LDD R17,Z+1
LDD R18,Z+2
LDD R19,Z+3
OR R16,R17
OR R16,R18
OR R16,R19
BREQ ??next_cluster_5
TST R10
BREQ ??next_cluster_5
LDI R30,LOW(_FF_buff_addr)
LDI R31,(_FF_buff_addr) >> 8
LD R16,Z
LDD R17,Z+1
LDD R18,Z+2
LDD R19,Z+3
LDI R30,LOW(_FF_FAT2_ADDR)
LDI R31,(_FF_FAT2_ADDR) >> 8
LD R20,Z
LDD R21,Z+1
LDD R22,Z+2
LDD R23,Z+3
CP R16,R20
CPC R17,R21
CPC R18,R22
CPC R19,R23
BRCC ??next_cluster_6
LDI R20,LOW(_FF_buff)
LDI R21,(_FF_buff) >> 8
LDI R30,LOW(_FF_buff_addr)
LDI R31,(_FF_buff_addr) >> 8
LD R0,Z
LDD R1,Z+1
LDD R2,Z+2
LDD R3,Z+3
LDI R30,LOW(BPB_FATSz16)
LDI R31,(BPB_FATSz16) >> 8
LD R16,Z
LDD R17,Z+1
LDI R18,0
LDI R19,0
ADD R16,R0
ADC R17,R1
ADC R18,R2
ADC R19,R3
RCALL _FF_write
TST R16
BRNE ??next_cluster_6
LDI R16,255
LDI R17,255
RJMP ??next_cluster_1
??next_cluster_6:
LDI R20,LOW(_FF_buff)
LDI R21,(_FF_buff) >> 8
LDI R30,LOW(_FF_buff_addr)
LDI R31,(_FF_buff_addr) >> 8
LD R16,Z
LDD R17,Z+1
LDD R18,Z+2
LDD R19,Z+3
RCALL _FF_write
TST R16
BRNE ??next_cluster_5
LDI R16,255
LDI R17,255
RJMP ??next_cluster_1
??next_cluster_5:
LDI R20,LOW(_FF_buff)
LDI R21,(_FF_buff) >> 8
MOVW R17 : R16,R25 : R24
MOVW R19 : R18,R27 : R26
RCALL _FF_read
TST R16
BRNE ??next_cluster_4
LDI R16,255
LDI R17,255
RJMP ??next_cluster_1
??next_cluster_4:
MOVW R25 : R24,R5 : R4
ADIW R25 : R24,1
MOVW R31 : R30,R25 : R24
SUBI R30,LOW((-(_FF_buff) & 0xFFFF))
SBCI R31,(-(_FF_buff) & 0xFFFF) >> 8
LD R16,Z
STD Y+1,R16
MOVW R31 : R30,R5 : R4
SUBI R30,LOW((-(_FF_buff) & 0xFFFF))
SBCI R31,(-(_FF_buff) & 0xFFFF) >> 8
LD R16,Z
ST Y,R16
??next_cluster_7:
LD R16,Y
LDD R17,Y+1
??next_cluster_1:
ADIW R29 : R28,2
LDI R30,11
JMP ?EPILOGUE_B11_L09
??next_cluster_2:
LDS R16,BPB_FATType
CPI R16,50
BREQ $+2+2
RJMP ??next_cluster_8
MOVW R21 : R20,R25 : R24
LDI R16,3
LDI R17,0
CALL ?S_EC_MUL_L02
MOVW R5 : R4,R17 : R16
LSR R5
ROR R4
MOV R8,R24
BST R8,0
CLR R8
CLR R9
BLD R8,0
MOVW R17 : R16,R5 : R4
MOV R16,R17
LDI R17,0
LSR R16
LDI R30,LOW(BPB_RsvdSecCnt)
LDI R31,(BPB_RsvdSecCnt) >> 8
LD R6,Z
LDD R7,Z+1
ADD R6,R16
ADC R7,R17
LDI R16,255
AND R4,R16
LDI R16,1
AND R5,R16
LDI R30,LOW(_FF_PART_ADDR)
LDI R31,(_FF_PART_ADDR) >> 8
LD R24,Z
LDD R25,Z+1
ADD R24,R6
ADC R25,R7
LDI R26,0
LDI R27,0
LDI R16,2
CP R10,R16
BRNE ??next_cluster_9
LDI R20,LOW(_FF_buff)
LDI R21,(_FF_buff) >> 8
MOVW R17 : R16,R25 : R24
MOVW R19 : R18,R27 : R26
RCALL _FF_read
TST R16
BREQ $+2+2
RJMP ??next_cluster_10
LDI R16,255
LDI R17,255
RJMP ??next_cluster_1
??next_cluster_9:
LDI R16,1
CP R10,R16
BREQ $+2+2
RJMP ??next_cluster_10
LDI R30,LOW(_FF_buff_addr)
LDI R31,(_FF_buff_addr) >> 8
LD R16,Z
LDD R17,Z+1
LDD R18,Z+2
LDD R19,Z+3
CP R24,R16
CPC R25,R17
CPC R26,R18
CPC R27,R19
BRNE $+2+2
RJMP ??next_cluster_10
LDI R30,LOW(_FF_buff_addr)
LDI R31,(_FF_buff_addr) >> 8
LD R16,Z
LDD R17,Z+1
LDD R18,Z+2
LDD R19,Z+3
OR R16,R17
OR R16,R18
OR R16,R19
BREQ ??next_cluster_11
TST R10
BREQ ??next_cluster_11
LDI R30,LOW(_FF_buff_addr)
LDI R31,(_FF_buff_addr) >> 8
LD R20,Z
LDD R21,Z+1
LDD R22,Z+2
LDD R23,Z+3
LDI R30,LOW(_FF_FAT2_ADDR)
LDI R31,(_FF_FAT2_ADDR) >> 8
LD R16,Z
LDD R17,Z+1
LDD R18,Z+2
LDD R19,Z+3
CP R20,R16
CPC R21,R17
CPC R22,R18
CPC R23,R19
BRCC ??next_cluster_12
LDI R20,LOW(_FF_buff)
LDI R21,(_FF_buff) >> 8
MOVW R1 : R0,R21 : R20
LDI R30,LOW(_FF_buff_addr)
LDI R31,(_FF_buff_addr) >> 8
LD R20,Z
LDD R21,Z+1
LDD R22,Z+2
LDD R23,Z+3
LDI R30,LOW(BPB_FATSz16)
LDI R31,(BPB_FATSz16) >> 8
LD R16,Z
LDD R17,Z+1
LDI R18,0
LDI R19,0
ADD R16,R20
ADC R17,R21
ADC R18,R22
ADC R19,R23
MOVW R21 : R20,R1 : R0
RCALL _FF_write
TST R16
BRNE ??next_cluster_12
LDI R16,255
LDI R17,255
RJMP ??next_cluster_1
??next_cluster_12:
LDI R20,LOW(_FF_buff)
LDI R21,(_FF_buff) >> 8
LDI R30,LOW(_FF_buff_addr)
LDI R31,(_FF_buff_addr) >> 8
LD R16,Z
LDD R17,Z+1
LDD R18,Z+2
LDD R19,Z+3
RCALL _FF_write
TST R16
BRNE ??next_cluster_11
LDI R16,255
LDI R17,255
RJMP ??next_cluster_1
??next_cluster_11:
LDI R20,LOW(_FF_buff)
LDI R21,(_FF_buff) >> 8
MOVW R17 : R16,R25 : R24
MOVW R19 : R18,R27 : R26
RCALL _FF_read
TST R16
BRNE ??next_cluster_10
LDI R16,255
LDI R17,255
RJMP ??next_cluster_1
??next_cluster_10:
MOVW R31 : R30,R5 : R4
SUBI R30,LOW((-(_FF_buff) & 0xFFFF))
SBCI R31,(-(_FF_buff) & 0xFFFF) >> 8
LD R16,Z
ST Y,R16
LDI R16,255
CP R4,R16
LDI R16,1
CPC R5,R16
BREQ $+2+2
RJMP ??next_cluster_13
LDI R30,LOW(_FF_PART_ADDR)
LDI R31,(_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -