-
Notifications
You must be signed in to change notification settings - Fork 0
/
cadena 1.asm
66 lines (56 loc) · 1.08 KB
/
cadena 1.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
char str1[]= esto es una cadena;
char str2[100];
void proc(void){
int i;
for (int i =0; stri[i] != '\0'; i++){
char c = str1[i];
if ( c>='a' && c<= 'z'){
c = c ('a'-'A');
}
str2[i]=c;
}
str2[i]= '\0';
}
.data
str1: .asciiz "esto es una cadena"
#tambien se pude definir asi
str1: .byte 'E', 's', 't', ...., 0
str2: .space 100
.text
proc:
li $t0, 0 #i
for:
la $t1, str1
mul $t2, $t0, 1 #i*1
add $t3, $t1, $t2
lb $t4, 0($t3) # c = str1[i]
#hay varias formas de hacer el fin for
beq $t4, '\0', finfor
beq $t4, 0, finfor
beq $t4, $0, finfor
beqz $t4, finfor
#seguimos
#el $t4 es la c que nosotros queremos
blt $t4, 'a', finif
bgt $t4,'z', finif
addi $t4, $t4, -32 #c = c ('a'-'A')
finif:
#las mismas instrucciones de antes para calcular el str2 [i]
la $t5, str2
mul $t6, $t0, 1
add $t7, $t5, $t6
sb $t5, 0($t7)
addiu $t0, $t0, 1
j for
finfor:
la $t5, str2
mul $t6, $t0, 1
add $t7, $t5, $t6
sb $zero, 0($t7) # str2[i]= '\0'
jr $ra
.globl main
main:
jal proc
la $a0, str2
li $v0, 4
syscall