Matricola | LC3 | BASH | System Call | Totale |
VR381228 | 4 | 11 | 8 | 23 |
VR382705 | 4 | 11 | 11 | 26 |
VR377916 | 10 | 11 | 11 | 32 |
Soluzione parte LC3:
.ORIG X3000
;Viene chiesto di inserire una stringa
;Trasforma tutti i caratteri maiuscoli in minuscolo
LEA R0, STRINGA ; PREDISPONGO LA DOMANDA
PUTS
LEA R3, STRING
LD R2, LF ; Load 10
AGAIN:
GETC ; Request keyboard
OUT ; Stampo il carattere a video
ADD R1,R2,R0 ; Test for terminating
BRz EXIT ; character
STR R0, R3, #0
ADD R3, R3, #1
BRnzp AGAIN ; ... Continuo all'infinito
EXIT: LD R0, ZERO
STR R0, R3, #0 ; Termino la stringa letta
LEA R0, STRING ; Metto indirizzo in R1
JSR TOLOWER
LEA R0,STRING
PUTS
HALT
TOLOWER: ;R0 <- Indirizzo Stringa
LD R3, ANEG
LD R4, ZNEG
LD R5, UPLOW
inizioW:
LDR R1, R0, #0 ; R1 <- STRING[i]
BRnz fineW ; E' finita la stringa
ADD R2, R1, R3
BRn increment ; Se il carattere viene prima della A
ADD R2, R1, R4
BRp increment ; Se il carattere viene DOPO della Z
ADD R1, R1, R5
STR R1, R0, #0 ; Salvo il carattere modificato
increment:
ADD R0, R0, #1 ; INCREMENTO IL PUNTATORE
BRnzp inizioW
fineW: RET
; Definizione di variabili
STRINGA .STRINGZ "Digita una frase (Invio per terminare): " ; Stringa già terminata con \0
STRING .BLKW 20
CARATTERE .STRINGZ "Digita il caratere da cercare: "
LF .FILL xFFF6
ASCII .FILL 48
ZERO .FILL 0
UPLOW .FILL 32
ANEG .FILL xFFBF ; -65 -A
ZNEG .FILL xFFA6 ; -90 -Z
.END