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
The ―store byte‖ instruction sb transfers the lowest byte of data from a register into main memory.
A word generally means the number of bits that can be transferred at one time on the data bus, and stored in a register. In the case of MIPS, a word is 32 bits, that is, 4 bytes. Words are always stored in consecutive bytes, starting with an address that is divisible by 4.
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
You can find more detailed information here
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With