Data update
This commit is contained in:
parent
4bb20c9b71
commit
cbaf4c4b64
12390 changed files with 318560 additions and 27248 deletions
|
|
@ -0,0 +1,277 @@
|
|||
# riscv assembly raspberry pico2 rp2350
|
||||
# program verifnumber.s
|
||||
# connexion putty com3
|
||||
/*********************************************/
|
||||
/* CONSTANTES */
|
||||
/********************************************/
|
||||
/* for this file see risc-v task include a file */
|
||||
.include "../../../constantesRiscv.inc"
|
||||
.equ BUFFSIZE, 200
|
||||
/****************************************************/
|
||||
/* MACROS */
|
||||
/****************************************************/
|
||||
#.include "../ficmacrosriscv.inc" # only for debugging
|
||||
/*******************************************/
|
||||
/* INITIALED DATAS */
|
||||
/*******************************************/
|
||||
.data
|
||||
szMessStart: .asciz "Program riscv start.\r\n"
|
||||
szMessEndOk: .asciz "Program riscv end OK.\r\n"
|
||||
szCariageReturn: .asciz "\r\n"
|
||||
szMessNum: .asciz "Enter number : \n"
|
||||
szMessError: .asciz "String is not a number !!!\n"
|
||||
szMessInteger: .asciz "String is a integer.\n"
|
||||
szMessFloat: .asciz "String is a float.\n"
|
||||
szMessFloatExp: .asciz "String is a float with exposant.\n"
|
||||
szMessErreurBuf: .asciz "Buffer size error."
|
||||
|
||||
.align 2
|
||||
/*******************************************/
|
||||
/* UNINITIALED DATA */
|
||||
/*******************************************/
|
||||
.bss
|
||||
sBuffer: .skip BUFFSIZE
|
||||
.align 2
|
||||
/**********************************************/
|
||||
/* SECTION CODE */
|
||||
/**********************************************/
|
||||
.text
|
||||
.global main
|
||||
|
||||
main:
|
||||
call stdio_init_all # général init
|
||||
1: # start loop connexion
|
||||
li a0,0 # raz argument register
|
||||
call tud_cdc_n_connected # waiting for USB connection
|
||||
beqz a0,1b # return code = zero ? yes -> loop
|
||||
|
||||
la a0,szMessStart # message address
|
||||
call writeString # display message
|
||||
|
||||
2: # loop begin
|
||||
la a0,szMessNum
|
||||
call writeString
|
||||
la a0,sBuffer
|
||||
li a1,BUFFSIZE
|
||||
call readString # entry string
|
||||
la t0,sBuffer
|
||||
add t1,t0,a0
|
||||
sb x0,(t1)
|
||||
la a0,sBuffer
|
||||
call controlNumber # control
|
||||
beqz a0,5f
|
||||
li t0,1
|
||||
bne a0,t0,3f
|
||||
la a0,szMessInteger
|
||||
call writeString
|
||||
j 6f
|
||||
3:
|
||||
li t0,2
|
||||
bne a0,t0,4f
|
||||
la a0,szMessFloat
|
||||
call writeString
|
||||
j 6f
|
||||
4:
|
||||
li t0,3
|
||||
bne a0,t0,5f
|
||||
la a0,szMessFloatExp
|
||||
call writeString
|
||||
j 6f
|
||||
5:
|
||||
la a0,szMessError
|
||||
call writeString
|
||||
6:
|
||||
j 2b # and loop
|
||||
|
||||
la a0,szMessEndOk # message address
|
||||
call writeString # display message
|
||||
call getchar
|
||||
100: # final loop
|
||||
j 100b
|
||||
/**************************************************/
|
||||
/* saisie des commandes */
|
||||
/**************************************************/
|
||||
/* a0 buffer address */
|
||||
/* a1 buffer size */
|
||||
readString: # INFO: readString
|
||||
addi sp, sp, -16
|
||||
sw ra, 0(sp)
|
||||
sw s0, 4(sp)
|
||||
sw s1, 8(sp)
|
||||
sw s2, 12(sp)
|
||||
mv s0,a0 # buffer address
|
||||
li s1,0
|
||||
mv s2,a1 # buffer size
|
||||
1:
|
||||
li a0,100
|
||||
call getchar # character read
|
||||
beq a0,x0,2f # zero ?
|
||||
li a1,0xD # return carriage
|
||||
beq a0,a1,2f
|
||||
add t1,s0,s1 # compute address buffer
|
||||
sb a0,(t1) # store character in buffer
|
||||
addi s1,s1,1 # increment indice
|
||||
bge s1,s2,99f
|
||||
call putchar # write charactere for display in host
|
||||
j 1b # and loop
|
||||
|
||||
2:
|
||||
add s1,s0,s1
|
||||
sb x0,(s1) # zero final
|
||||
|
||||
li a0,0xA
|
||||
call putchar
|
||||
li a0,0xD
|
||||
call putchar
|
||||
mv a0,s0
|
||||
j 100f
|
||||
99: # error
|
||||
la a0,szMessErreurBuf
|
||||
call writeString
|
||||
li a0,-1
|
||||
100:
|
||||
lw ra, 0(sp)
|
||||
lw s0, 4(sp)
|
||||
lw s1, 8(sp)
|
||||
lw s2, 12(sp)
|
||||
addi sp, sp, 16
|
||||
ret
|
||||
/******************************************************************/
|
||||
/* control if string is number */
|
||||
/******************************************************************/
|
||||
/* a0 contains the address of the string */
|
||||
/* a0 return 0 if not a number */
|
||||
/* a0 return 1 if integer eq 12345 or -12345 */
|
||||
/* a0 return 2 if float eq 123.45 or 123,45 or -123,45 */
|
||||
/* a0 return 3 if float with exposant eq 123.45E30 or -123,45E-30 or +123,45e+30 */
|
||||
controlNumber:
|
||||
addi sp, sp, -4
|
||||
sw ra, 0(sp)
|
||||
|
||||
li t1,0 # string indice
|
||||
li t3,0 # point or comma counter
|
||||
li t5,' '
|
||||
2:
|
||||
add t4,a0,t1
|
||||
lbu t2,(t4)
|
||||
beqz t2,9f # if end -> error
|
||||
bne t2,t5,3f
|
||||
addi t1,t1,1 # suppress spaces
|
||||
j 2b
|
||||
3:
|
||||
li t5,'-'
|
||||
bne t2,t5,4f
|
||||
addi t1,t1,1 # negative
|
||||
j 5f
|
||||
4:
|
||||
li t5,'+'
|
||||
bne t2,t5,5f
|
||||
addi t1,t1,1 # positive
|
||||
|
||||
5:
|
||||
add t4,a0,t1
|
||||
lbu t2,(t4)
|
||||
beqz t2,9f # end ?
|
||||
bne t2,t5,6f
|
||||
addi t1,t1,1 # suppress space
|
||||
j 5b
|
||||
|
||||
6:
|
||||
add t4,a0,t1
|
||||
lbu t2,(t4)
|
||||
beqz t2,19f # end ?
|
||||
li t5,'E' # exposant ?
|
||||
beq t2,t5,10f
|
||||
li t5,'e' # exposant ?
|
||||
beq t2,t5,10f
|
||||
li t5,'.' # point ?
|
||||
bne t2,t5,7f
|
||||
addi t3,t3,1 # yes increment counter
|
||||
addi t1,t1,1
|
||||
j 6b # and loop
|
||||
7:
|
||||
li t5,',' # comma ?
|
||||
bne t2,t5,8f
|
||||
addi t3,t3,1 # yes increment counter
|
||||
addi t1,t1,1
|
||||
j 6b # and loop
|
||||
8:
|
||||
li t5,'0' # control digit < 0
|
||||
blt t2,t5,9f
|
||||
li t5,'9' # control digit > 9
|
||||
bgt t2,t5,9f
|
||||
addi t1,t1,1 # no error
|
||||
j 6b # and loop
|
||||
|
||||
9: # error detected
|
||||
li a0,0
|
||||
j 100f
|
||||
10: # float with exposant
|
||||
addi t1,t1,1
|
||||
add t4,a0,t1
|
||||
lbu t2,(t4)
|
||||
bnez t2,11f
|
||||
li a0,0 # end -> error
|
||||
j 100f
|
||||
11:
|
||||
li t5,'-'
|
||||
bne t2,t5,12f
|
||||
addi t1,t1,1 # negative exposant
|
||||
j 13f
|
||||
12:
|
||||
li t5,'+'
|
||||
bne t2,t5,13f
|
||||
addi t1,t1,1 # positive exposant
|
||||
13:
|
||||
li t6,0 # digit counter
|
||||
|
||||
14:
|
||||
add t4,a0,t1
|
||||
lbu t2,(t4)
|
||||
beqz t2,16f # end
|
||||
li t5,'0' # control digit < 0
|
||||
blt t2,t5,15f
|
||||
li t5,'9' # control digit > 9
|
||||
bgt t2,t5,15f
|
||||
addi t1,t1,1
|
||||
addi t6,t6,1 # increment counter digit
|
||||
j 14b # and loop
|
||||
|
||||
15: # error
|
||||
li a0,0
|
||||
j 100f
|
||||
|
||||
16:
|
||||
bnez t6,17f
|
||||
li a0,0 # number digit exposant = 0 -> error
|
||||
j 100f
|
||||
17:
|
||||
li t5,2
|
||||
ble t6,t5,18f # number digit exposant > 2 -> error
|
||||
li a0,0
|
||||
j 100f
|
||||
18:
|
||||
li a0,3 # valid float with exposant
|
||||
j 100f
|
||||
19:
|
||||
bnez t3,20f
|
||||
li a0,1 # valid integer
|
||||
j 100f
|
||||
20:
|
||||
li t5,1
|
||||
bne t3,t5,21f # number of point or comma = 1 ?
|
||||
li a0,2 # valid float
|
||||
j 100f
|
||||
21:
|
||||
li a0,0 # error
|
||||
|
||||
100:
|
||||
lw ra, 0(sp)
|
||||
addi sp, sp, 4
|
||||
ret
|
||||
|
||||
/************************************/
|
||||
/* file include Fonctions */
|
||||
/***********************************/
|
||||
/* for this file see risc-v task include a file */
|
||||
.include "../../../includeFunctions.s"
|
||||
Loading…
Add table
Add a link
Reference in a new issue