I doing a programming project on making matrices in MIPS I n
I doing a programming project on making matrices in MIPS. I need to take two numbers from user input, r, and c. print out an (r x c) matrix of capital letters starting from \'A\' and after \'Z\', wrap back from \'A\' in printing out. Here what I have so far:
. data
my_prompt1: .asciiz \"Enter integer r: \ \"
my_prompt2: .asciiz \"Enter integer c: \ \"
.text
li $v0, 4
la $a0, my_prompt1
syscall
li $v0, 5
syscall
li $v0, 4
la $a0, my_prompt2
syscall
li $v0, 5
syscall
This part prints out r and c. I need the program in MIPS assembly language
Solution
.LC0:
.string \"Enter integer r: \"
.LC1:
.string \"%d\"
.LC2:
.string \"Enter integer c: \"
main:
stp x29, x30, [sp, -208]!
add x29, sp, 0
stp x19, x20, [sp,16]
stp x21, x22, [sp,32]
stp x23, x24, [sp,48]
stp x25, x26, [sp,64]
stp x27, x28, [sp,80]
mov x0, sp
mov x28, x0
adrp x0, .LC0
add x0, x0, :lo12:.LC0
bl printf
adrp x0, .LC1
add x0, x0, :lo12:.LC1
add x1, x29, 164
bl scanf
adrp x0, .LC2
add x0, x0, :lo12:.LC2
bl printf
adrp x0, .LC1
add x0, x0, :lo12:.LC1
add x1, x29, 160
bl scanf
ldr w0, [x29,160]
sxtw x0, w0
sub x27, x0, #1
str x27, [x29,184]
mov x0, x27
add x0, x0, 1
mov x19, x0
mov x20, 0
lsr x0, x19, 61
lsl x26, x20, 3
orr x26, x0, x26
lsl x25, x19, 3
mov x0, x27
add x20, x0, 1
ldr w0, [x29,164]
sxtw x0, w0
sub x19, x0, #1
str x19, [x29,176]
mov x0, x27
add x0, x0, 1
str x0, [x29,144]
str xzr, [x29,152]
mov x0, x19
add x0, x0, 1
str x0, [x29,128]
str xzr, [x29,136]
ldp x0, x1, [x29,144]
ldp x2, x3, [x29,128]
bl __multi3
lsr x2, x0, 61
lsl x24, x1, 3
orr x24, x2, x24
lsl x23, x0, 3
mov x0, x27
add x0, x0, 1
str x0, [x29,112]
str xzr, [x29,120]
mov x0, x19
add x0, x0, 1
str x0, [x29,96]
str xzr, [x29,104]
ldp x0, x1, [x29,112]
ldp x2, x3, [x29,96]
bl __multi3
lsr x2, x0, 61
lsl x22, x1, 3
orr x22, x2, x22
lsl x21, x0, 3
mov x0, x27
add x1, x0, 1
mov x0, x19
add x0, x0, 1
mul x0, x1, x0
add x0, x0, 15
lsr x0, x0, 4
lsl x0, x0, 4
mov x1, sp
sub sp, x1, x0
mov x0, sp
add x0, x0, 0
str x0, [x29,168]
str wzr, [x29,204]
str wzr, [x29,200]
b .L2
.L6:
str wzr, [x29,196]
b .L3
.L4:
ldr w0, [x29,204]
add w1, w0, 1
str w1, [x29,204]
uxtb w0, w0
add w0, w0, 97
uxtb w1, w0
ldr x3, [x29,168]
ldrsw x2, [x29,196]
ldrsw x0, [x29,200]
mul x0, x0, x20
add x2, x3, x2
add x0, x2, x0
strb w1, [x0]
ldr w0, [x29,196]
add w0, w0, 1
str w0, [x29,196]
.L3:
ldr w0, [x29,160]
ldr w1, [x29,196]
cmp w1, w0
blt .L4
ldr w0, [x29,204]
cmp w0, 26
ble .L5
str wzr, [x29,204]
.L5:
ldr w0, [x29,200]
add w0, w0, 1
str w0, [x29,200]
.L2:
ldr w0, [x29,164]
ldr w1, [x29,200]
cmp w1, w0
blt .L6
str wzr, [x29,200]
b .L7
.L10:
str wzr, [x29,196]
b .L8
.L9:
ldr x2, [x29,168]
ldrsw x1, [x29,196]
ldrsw x0, [x29,200]
mul x0, x0, x20
add x1, x2, x1
add x0, x1, x0
ldrb w0, [x0]
bl putchar
ldr w0, [x29,196]
add w0, w0, 1
str w0, [x29,196]
.L8:
ldr w0, [x29,160]
ldr w1, [x29,196]
cmp w1, w0
blt .L9
mov w0, 10
bl putchar
ldr w0, [x29,200]
add w0, w0, 1
str w0, [x29,200]
.L7:
ldr w0, [x29,164]
ldr w1, [x29,200]
cmp w1, w0
blt .L10
mov sp, x28
mov w0, 0
b .L14
mov sp, x28
bl _Unwind_Resume
.L14:
add sp, x29, 0
ldp x19, x20, [sp,16]
ldp x21, x22, [sp,32]
ldp x23, x24, [sp,48]
ldp x25, x26, [sp,64]
ldp x27, x28, [sp,80]
ldp x29, x30, [sp], 208
ret



