2019-03-10 22:41:16 +08:00

106 lines
4.6 KiB
ArmAsm
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# sprintf %c %s %u %d
# a0 a1 a24
# Author: WangXuan
#
# 10x400 ByteRAM
# 2DataRamInstrRam
# 3a0DataRamSoC DataRam0x00010000 lui a0, 0x00010
#
.org 0x0
.global _start
_start:
main: # mainDataRam
lui a0, 0x00020 # DataRam0x00020000RAM
lui a2, 0x00010
addi sp, a2 , 0x400 # = 0x00010400
auipc a1, 0x00000 # PC.string
jal zero, AfterString1 # .string stringRAM
.string "(a2):%s (a2+4):%c\0" # RAMstringstringsprintfsprintf使Csprintf\0
.align 4 # 4
AfterString1:
addi a1, a1, 0x08 # a1+8,.string
auipc a3, 0x00000 # PC.string
jal zero, AfterString2 # .string stringRAM
.string "hello!\0" # RAMstring
.align 4 # 4
AfterString2:
addi a3, a3 , 0x08 # a3+8,.string
sw a3, (a2)
ori a3, zero, 'a'
sw a3, 4(a2)
jal ra, SimpleSprintf
infinity_loop:
jal zero, infinity_loop #
SimpleSprintf:
# a0 a1 a24
# a0a1(cdecl) push
or t0, zero, zero # t0
SimpleSprintfLoopStart:
or t1, t0, zero # t0t1
lbu t0, (a1)
sb t0, (a0)
addi a1, a1, 1
addi a0, a0, 1
bne t0, zero, DontReturn # \0
jalr zero, ra, 0 # \0
DontReturn:
ori t2, zero, '%'
bne t1, t2, SimpleSprintfLoopStart # t1!='%'
addi a0, a0, -1 # 退%
ori t2, zero, 'c'
bne t0, t2, NotC
lw t2, (a2) # a2
addi a2, a2, 4
sb t2, -1(a0) #
jal zero, SimpleSprintfLoopStart
NotC:
ori t2, zero, 's'
bne t0, t2, NotS
lw t2, (a2) # a2
addi a2, a2, 4
StringCopystart:
lbu t3, (t2)
beq t3, zero, SimpleSprintfLoopStart
addi t2, t2, 1
sb t3, -1(a0)
addi a0, a0, 1
jal zero, StringCopystart
NotS:
ori t2, zero, 'd'
bne t0, t2, NotD
lw t2, (a2) # a2
addi a2, a2, 4
jal zero, SimpleSprintfLoopStart
NotD:
ori t2, zero, 'u'
bne t0, t2, NotU
lw t2, (a2) # a2
addi a2, a2, 4
jal zero, SimpleSprintfLoopStart
NotU:
ori t2, zero, 'x'
bne t0, t2, SimpleSprintfLoopStart
lw t2, (a2) # a2
addi a2, a2, 4
jal zero, SimpleSprintfLoopStart