汇编MIPS - 如何将用户的整数存储到内存中?

时间:2015-03-04 00:53:11

标签: assembly mips mips32 spim

所以,我不知道装配是如何工作的,也不知道我在做什么。我以为我做了,但当然我错了。所以这就是我的问题 - 我甚至不知道如何让用户输入一个整数,这样我就可以将它存储在内存中。我也不知道我的变量是否一致,因为我甚至不理解"对齐"真的是。下面是我的汇编代码,以及说明我要为代码做什么的评论。请帮忙

.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

1 个答案:

答案 0 :(得分:2)

你应该改变" int"的类型。变量从.space到.word

最后看起来应该是这样的:

.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