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

📄 com.s79

📁 ARM入门的好帮手.包含了从简单到相对较复杂的程序.
💻 S79
字号:
        NAME com

        RTMODEL "__code_model", "small"
        RTMODEL "__cpu_mode", "arm"
        RTMODEL "__data_model", "absolute"
        RTMODEL "__endian", "little"
        RTMODEL "__rt_version", "2"
        RTMODEL "__thumb_aware", "enabled"

        RSEG CSTACK:DATA:NOROOT(2)

        EXTERN at91_usart_open
        FUNCTION at91_usart_open,0202H
        EXTERN at91_usart_close
        FUNCTION at91_usart_close,0202H
        EXTERN at91_usart_get_status
        FUNCTION at91_usart_get_status,0202H
        EXTERN at91_usart_write
        FUNCTION at91_usart_write,0202H
        EXTERN at91_usart_read
        FUNCTION at91_usart_read,0202H

        PUBLIC at91_close_com
        FUNCTION at91_close_com,0203H
        LOCFRAME CSTACK, 8, STACK
        PUBLIC at91_getch
        FUNCTION at91_getch,0203H
        LOCFRAME CSTACK, 16, STACK
        PUBLIC at91_open_com
        FUNCTION at91_open_com,0203H
        LOCFRAME CSTACK, 8, STACK
        PUBLIC at91_print
        FUNCTION at91_print,0203H
        LOCFRAME CSTACK, 20, STACK
        PUBLIC at91_print_crlf
        FUNCTION at91_print_crlf,0203H
        LOCFRAME CSTACK, 20, STACK
        PUBLIC at91_print_frame
        FUNCTION at91_print_frame,0203H
        LOCFRAME CSTACK, 16, STACK
        PUBLIC at91_send_byte
        FUNCTION at91_send_byte,0203H
        LOCFRAME CSTACK, 12, STACK

        RSEG NEARFUNC_A:CODE:REORDER:NOROOT(2)
        
        CFI Names cfiNames0
        CFI StackFrame CFA SP HUGEDATA
        CFI Resource R0:32, R1:32, R2:32, R3:32, R4:32, R5:32, R6:32, R7:32
        CFI Resource R8:32, R9:32, R10:32, R11:32, R12:32, SP:32, LR:32
        CFI VirtualResource RET:32
        CFI EndNames cfiNames0
        
        CFI Common cfiCommon0 Using cfiNames0
        CFI CodeAlign 4
        CFI DataAlign 4
        CFI ReturnAddress RET CODE
        CFI CFA SP+0
        CFI R0 Undefined
        CFI R1 Undefined
        CFI R2 Undefined
        CFI R3 Undefined
        CFI R4 SameValue
        CFI R5 SameValue
        CFI R6 SameValue
        CFI R7 SameValue
        CFI R8 SameValue
        CFI R9 SameValue
        CFI R10 SameValue
        CFI R11 SameValue
        CFI R12 Undefined
        CFI LR Undefined
        CFI RET LR
        CFI EndCommon cfiCommon0
        
        CFI Block cfiBlock0 Using cfiCommon0
        CFI Function at91_open_com
   CODE32   
at91_open_com:
   STMDB    SP!,{R4,LR}        ;; Push
        CFI RET Frame(CFA, -4)
        CFI R4 Frame(CFA, -8)
        CFI CFA SP+8
   MOV      R4,R0
   MOV      R3,#+0x0
   MOV      R2,R2, LSL #+16
   MOV      R2,R2, LSR #+16
   LDR      R0,[R4, #+0]
   BL       at91_usart_open
   MVN      R0,#+0x0
   LDR      R1,[R4, #+0]
   LDR      R2,[R1, #+0]
   STR      R0,[R2, #+12]
   MOV      R0,#+0x1
   STR      R0,[R4, #+4]
   LDMIA    SP!,{R4,PC}        ;; return
        CFI EndBlock cfiBlock0

        RSEG NEARFUNC_A:CODE:REORDER:NOROOT(2)
        CFI Block cfiBlock1 Using cfiCommon0
        CFI Function at91_close_com
   CODE32   
at91_close_com:
   STMDB    SP!,{R4,LR}        ;; Push
        CFI RET Frame(CFA, -4)
        CFI R4 Frame(CFA, -8)
        CFI CFA SP+8
   MOV      R4,R0
   LDR      R0,[R4, #+0]
   BL       at91_usart_close
   MOV      R0,#+0x1
   STR      R0,[R4, #+4]
   LDMIA    SP!,{R4,PC}        ;; return
        CFI EndBlock cfiBlock1

        RSEG NEARFUNC_A:CODE:NOROOT(2)
        CFI Block cfiBlock2 Using cfiCommon0
        CFI Function at91_print_frame
   CODE32   
at91_print_frame:
   STMDB    SP!,{R4-R6,LR}     ;; Push
        CFI RET Frame(CFA, -4)
        CFI R6 Frame(CFA, -8)
        CFI R5 Frame(CFA, -12)
        CFI R4 Frame(CFA, -16)
        CFI CFA SP+16
   MOV      R4,R0
   MOV      R5,R1
   MOV      R6,R2
??at91_print_frame_0:
   LDR      R0,[R4, #+0]
   LDR      R1,[R0, #+0]
   LDR      R0,[R1, #+60]
   CMP      R0,#+0x0
   BNE      ??at91_print_frame_0
??at91_print_frame_1:
   LDR      R0,[R4, #+0]
   BL       at91_usart_get_status
   AND      R0,R0,#+0xFF       ;; Zero extend
   TST      R0,#+0x2
   BEQ      ??at91_print_frame_1
   LDR      R0,[R4, #+0]
   LDR      R1,[R0, #+0]
   STR      R5,[R1, #+56]
   MOV      R6,R6, LSL #+16
   MOV      R6,R6, LSR #+16
   LDR      R0,[R4, #+0]
   LDR      R1,[R0, #+0]
   STR      R6,[R1, #+60]
   LDMIA    SP!,{R4-R6,PC}     ;; return
        CFI EndBlock cfiBlock2

        RSEG NEARFUNC_A:CODE:NOROOT(2)
        CFI Block cfiBlock3 Using cfiCommon0
        CFI Function at91_print
   CODE32   
at91_print:
   STMDB    SP!,{R4-R7,LR}     ;; Push
        CFI RET Frame(CFA, -4)
        CFI R7 Frame(CFA, -8)
        CFI R6 Frame(CFA, -12)
        CFI R5 Frame(CFA, -16)
        CFI R4 Frame(CFA, -20)
        CFI CFA SP+20
   MOV      R4,R0
   MOV      R5,R1
   MOV      R6,#+0x0
   B        ??at91_print_0
??at91_print_1:
   LDR      R0,[R4, #+0]
   BL       at91_usart_get_status
   AND      R0,R0,#+0xFF       ;; Zero extend
   TST      R0,#+0x2
   BEQ      ??at91_print_1
   LDRB     R1,[R7, #+0]
   LDR      R0,[R4, #+0]
   BL       at91_usart_write
   ADD      R6,R6,#+0x1
??at91_print_0:
   ADD      R7,R6,R5
   LDRB     R0,[R7, #+0]
   CMP      R0,#+0x0
   BNE      ??at91_print_1
   LDMIA    SP!,{R4-R7,PC}     ;; return
        CFI EndBlock cfiBlock3

        RSEG NEARFUNC_A:CODE:NOROOT(2)
        CFI Block cfiBlock4 Using cfiCommon0
        CFI Function at91_send_byte
   CODE32   
at91_send_byte:
   STMDB    SP!,{R4,R5,LR}     ;; Push
        CFI RET Frame(CFA, -4)
        CFI R5 Frame(CFA, -8)
        CFI R4 Frame(CFA, -12)
        CFI CFA SP+12
   MOV      R4,R0
   MOV      R5,R1
??at91_send_byte_0:
   LDR      R0,[R4, #+0]
   LDR      R1,[R0, #+0]
   LDR      R0,[R1, #+60]
   CMP      R0,#+0x0
   BNE      ??at91_send_byte_0
??at91_send_byte_1:
   LDR      R0,[R4, #+0]
   BL       at91_usart_get_status
   AND      R0,R0,#+0xFF       ;; Zero extend
   TST      R0,#+0x2
   BEQ      ??at91_send_byte_1
   AND      R5,R5,#+0xFF       ;; Zero extend
   MOV      R1,R5
   LDR      R0,[R4, #+0]
   BL       at91_usart_write
   LDMIA    SP!,{R4,R5,PC}     ;; return
        CFI EndBlock cfiBlock4

        RSEG NEARFUNC_A:CODE:NOROOT(2)
        CFI Block cfiBlock5 Using cfiCommon0
        CFI Function at91_print_crlf
   CODE32   
at91_print_crlf:
   STMDB    SP!,{R4-R6,LR}     ;; Push
        CFI RET Frame(CFA, -4)
        CFI R6 Frame(CFA, -8)
        CFI R5 Frame(CFA, -12)
        CFI R4 Frame(CFA, -16)
        CFI CFA SP+16
   SUB      SP,SP,#+0x4
        CFI CFA SP+20
   MOV      R1,#+0xA
   STRB     R1,[SP, #+0]
   MOV      R1,#+0xD
   STRB     R1,[SP, #+1]
   MOV      R1,#+0x0
   STRB     R1,[SP, #+2]
   MOV      R4,R0
   MOV      R5,#+0x0
   B        ??at91_print_crlf_0
??at91_print_crlf_1:
   LDR      R0,[R4, #+0]
   BL       at91_usart_get_status
   AND      R0,R0,#+0xFF       ;; Zero extend
   TST      R0,#+0x2
   BEQ      ??at91_print_crlf_1
   MOV      R1,R6
   LDR      R0,[R4, #+0]
   BL       at91_usart_write
   ADD      R5,R5,#+0x1
??at91_print_crlf_0:
   MOV      R0,SP
   LDRB     R6,[R5, +R0]
   CMP      R6,#+0x0
   BNE      ??at91_print_crlf_1
   ADD      SP,SP,#+0x4        ;; stack cleaning
        CFI CFA SP+16
   LDMIA    SP!,{R4-R6,PC}     ;; return
        CFI EndBlock cfiBlock5

        RSEG NEARFUNC_A:CODE:REORDER:NOROOT(2)
        CFI Block cfiBlock6 Using cfiCommon0
        CFI Function at91_getch
   CODE32   
at91_getch:
   STMDB    SP!,{R4-R6,LR}     ;; Push
        CFI RET Frame(CFA, -4)
        CFI R6 Frame(CFA, -8)
        CFI R5 Frame(CFA, -12)
        CFI R4 Frame(CFA, -16)
        CFI CFA SP+16
   MOV      R4,R0
   MOV      R5,R1
   LDR      R0,[R4, #+0]
   BL       at91_usart_get_status
   AND      R0,R0,#+0xFF       ;; Zero extend
   TST      R0,#+0x1
   MOVEQ    R0,#+0x1
   MOVNE    R0,#+0x0
   MOV      R6,R0
   CMP      R0,#+0x0
   MOVEQ    R1,R5
   LDREQ    R0,[R4, #+0]
   BLEQ     at91_usart_read
   MOV      R0,R6
   LDMIA    SP!,{R4-R6,PC}     ;; return
        CFI EndBlock cfiBlock6

        END
; 
; 492 bytes in segment NEARFUNC_A
; 
; 492 bytes of CODE memory
;
;Errors: none
;Warnings: 1

⌨️ 快捷键说明

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