So, I have no idea how assembly works or what I'm doing. I thought I did, but of course I was wrong. So here's my question - I don't even know how to let a user enter an integer so I can store it in memory. I also don't know if my variables are aligned because I don't even understand what "alignment" really is. Below is my assembly code, along with comments demonstrating what I'd LIKE for the code to be doing. Please help
.data
# variables here
intPrompt: .asciiz "\nPlease enter an integer.\n"
stringPrompt: .asciiz "\nPlease enter a string that is less than 36 (35 or less) characters long.\n"
charPrompt: .asciiz "\nPlease enter a single character.\n"
int: .space 4
string: .space 36
char: .byte 1
.text
.globl main
main:
# print the first prompt
li $v0, 4
la $a0, intPrompt
syscall
# allow user to enter an integer
li $v0, 5
syscall
# store the input in `int`
# don't really know what to do right here, I want to save the user inputed integer into 'int' variable
sw $v0, int
syscall
You should change type of "int" variable from .space to .word
finally it should look like this:
.data
# variables here
intPrompt: .asciiz "\nPlease enter an integer.\n"
stringPrompt: .asciiz "\nPlease enter a string that is less than 36 (35 or less) characters long.\n"
charPrompt: .asciiz "\nPlease enter a single character.\n"
int: .word
string: .space 36
char: .byte 1
main:
li $v0, 4 #you say to program, that you're going to output string which will be in the $a0 register
la $a0, intPrompt #here you load your string from intPromt var. to $a0
syscall #this command just executes everything that you have written before >> it prints string, which is in $a0
li $v0, 5 #this command says: "Hey, read an integer from console and put it in $v0!"
syscall #this command executes all previous commands ( li $v0, 5 )
sw $v0, int #sw -> store word, here you move value from $v0 to "int" variable
syscall #executes (sw $v0, int), here you have your input number in "int" variable