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
int
is probably not aligned because it comes after variable length strings that are unlikely to have total length that is a multiple of 4. You should place yourint
at the beginning of the section, then you can be sure it's aligned, or use alignment directives.sw $v0, int
is fine, although it is a pseudo-op. – Jestersyscall
returns the integer in$v0
. All you need to do is store that intoint
withsw $v0, int
. Oh - that's what you've done. (No need for another call tosyscall
, though). I wouldn't use names likeint
,string
, etc. They're probably OK here, but you're likely to run up against reserved words in other languages. – user1864610la $t0, int; sw $v0, ($t0)
or similar. Of cousela
is another pseudo-op but surely it understands that :) – Jesterli $v0, 1; la $a0, int; syscall;
the output I get is "268500992" - any idea why? – Eric Diviney