Итак, я понятия не имею, как работает сборка или что я делаю. Я думал, что да, но, конечно же, я ошибался. Итак, вот мой вопрос: я даже не знаю, как разрешить пользователю вводить целое число, чтобы я мог сохранить его в памяти. Я также не знаю, выровнены ли мои переменные, потому что я даже не понимаю, что такое "выравнивание" на самом деле. Ниже приведен мой ассемблерный код вместе с комментариями, демонстрирующими, что мне ХОЧЕТСЯ, чтобы этот код делал. Пожалуйста помоги
.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
, вероятно, не выровнен, потому что он идет после строк переменной длины, общая длина которых вряд ли будет кратной 4. Вы должны поместить свойint
в начало раздела, тогда вы можете быть уверены, что он выровнен, или использовать выравнивание директивы.sw $v0, int
подойдет, хотя это псевдо-операция. - person Jester   schedule 04.03.2015syscall
возвращает целое число в$v0
. Все, что вам нужно сделать, это сохранить это вint
сsw $v0, int
. О, вот что ты сделал. (Однако нет необходимости в другом вызовеsyscall
). Я бы не стал использовать такие имена, какint
,string
и т. д. Здесь они, вероятно, подходят, но вы, вероятно, столкнетесь с зарезервированными словами в других языках. - person   schedule 04.03.2015la $t0, int; sw $v0, ($t0)
или аналогичный. Конечно,la
— еще одна псевдо-операция, но она наверняка понимает это :) - person Jester   schedule 04.03.2015li $v0, 1; la $a0, int; syscall;
, я получаю результат 268500992 - есть идеи, почему? - person Eric Diviney   schedule 04.03.2015li $v0, 1; la $a0, int; lw $a0, ($a0); syscall;
- person Jester   schedule 04.03.2015