标签: spim

Mips如何存储用户输入字符串

我以前认为我知道如何做到这一点.但后来我真的试着去做.这是我写的程序但是Mac的Berkeley S***模拟器说最后一行有语法错误.我做错了什么?

       .text
       .globl __start
    __start:
        la $a0,ask
        li $v0,4
        syscall

        li $v0,8
        syscall

        la $t0,buffer
        move $t0,$v0
        syscall

        la $a0,ret
        li $v0,4
        syscall

        move $a0,$t0
        li $v0,4
        syscall

        .data
      ask:  .asciiz "Enter string: "
      ret:  .asciiz "You wrote: "
      buffer:   .space 100
Run Code Online (Sandbox Code Playgroud)

string mips spim

8
推荐指数
2
解决办法
10万
查看次数

在MIPS中将整数读入局部变量

如何在MIPS中将整数读入局部变量?可能吗?问题要求我使用将整数变量指定为局部变量的概念.#我的教科书中的一个问题.顺便说一下,不是作业!

Thanx提前!:d

assembly mips sql-server-mars spim

7
推荐指数
1
解决办法
3万
查看次数

访问字符串中的一个字符

我正在使用类似SPIMS或MARS的系统调用函数.

我正在读一个字符串(它可以工作,因为我可以打印出来)如下:

li $v0, 8
la $a0, string
li $a1, 256
syscall
Run Code Online (Sandbox Code Playgroud)

但是,我在访问字符串的单个字符时遇到问题.因此,如果我想访问第一个字符并打印它,我正在尝试这样做:

la $t0, string
lb $a0, ($t0)
li $v0, 4
sys call
Run Code Online (Sandbox Code Playgroud)

如果我尝试这样的事情:

la $a0, string
li $v0, 4
syscall
Run Code Online (Sandbox Code Playgroud)

这会将整个字符串打印为字符串指向整个字符串.

如果我尝试类似的东西:

la $a0, string
lb $a0, ($t0)
li $v0, 4
syscall
Run Code Online (Sandbox Code Playgroud)

它给了我一个出界的错误.我不明白为什么 - 虽然不是一个字节长的字符,这只是将字符串中的第一个字节加载到$ a0?

谢谢

string assembly mips spim mars-simulator

7
推荐指数
1
解决办法
3万
查看次数

为什么QtSPIM告诉我"标签是第二次定义"?

我是学习MIPS汇编代码的新手,我们得到了第一个编码任务.我运行程序时遇到错误(这应该是我们必须编写的另一个函数的测试人员)

"spim :( parser)标签是第二次在文件/ home/jlr247/215_A2_work/jlr247-a2-As main的第13行定义:^"

我的代码是:

.data
.align 4
_arrA: .space 400
_arrB: .space 400

.text

main:
la $t0, _arrA       #load base address of array A
la $t1, _arrB       #load base address of array B

addi $t2, $zero, 0  #$t2 = i = 0

FILL_LOOP:  #initializes all A[] values to 5, all B[] values to 10
slti $t3, $t2, 100          #check i<100
beq $t3, $zero, LOOP_DONE   #end loop when i=100
sll $t3, $t3, 2             #multiply shift by 4
add …
Run Code Online (Sandbox Code Playgroud)

assembly mips spim

6
推荐指数
1
解决办法
1万
查看次数

MIPS:.asciiz 的大小?

在确定 .asciiz 字符串的大小时,我应该考虑终止字符吗?

例如:

.data
string: .asciiz "Hello"
Run Code Online (Sandbox Code Playgroud)

“字符串”的大小是 5 还是 6(字节)?

assembly mips spim mips32

6
推荐指数
1
解决办法
8748
查看次数

在MIPS汇编中反转字符串

我试图提示用户输入字符串的长度,为该字符串分配空间,然后反向打印出来.

对于我的生活,我无法弄清楚为什么这不起作用..

Sample Output:
(spim) run    
Please enter an integer:    
7    
string
(spim)
Run Code Online (Sandbox Code Playgroud)

现在"字符串"的长度应该是6对吧?+应该成为它的空终止字符7.任何人都可以找到我的方法出错的地方吗?

.data
    nl: .asciiz "\n"
    inputPrompt: .asciiz "Please enter an integer:\n"

    theString: .space 32
    theInteger: .word 1

.text
main: 
    la $a0, inputPrompt #load address a0 with prompt
    li $v0, 4       #load system call, print string into v0
    syscall 

    li $v0, 5       #load system call, read int into v0
    syscall
    sw $v0, theInteger  #store saved int into $t0

    li $v0, 8           #load system call, read string with mem …
Run Code Online (Sandbox Code Playgroud)

string assembly mips spim mips32

5
推荐指数
1
解决办法
2万
查看次数

调整mips-gcc输出以与MARS一起使用

mips-gcc生成的MIPS汇编代码几乎(但不是完全)运行在Mars MIPS模拟器上。例如:

  • 编译器生成“ j $ 31”而不是“ jr $ 31”
  • 编译器将.align指令放置在Mars不允许的文本段中。

此外,生成的程序集还没有完全设置好,因此无法正确启动和停止(即,末尾没有sycall 10)。

这些问题似乎都可以通过简单的脚本轻松解决。但是,在我重新发明轮子之前,我想知道:(1)是否有任何gcc标志将使其中的一些问题消失?(2)是否有人知道可以修复mips-gcc输出以使其在火星上运行的现有程序?

(FWIW,我在gcc 3.3.6和4.6.1上看到相同的行为。)

mips spim mars-simulator

5
推荐指数
1
解决办法
347
查看次数

从多 mips 中获取结果

我是汇编语言的新手,我对乘法感到非常困惑。

我正在阅读这里的快速教程(死链接,网络存档在这里

它说我使用后mult $t0, $t1结果存储在 Hi 和 Lo 中,我知道这些是特殊寄存器multdiv的特殊寄存器,但如何访问它们?

假设我在mult $t0, $t1where$t0$t1都是 2。我如何得到结果?(4)

mips spim mips32

5
推荐指数
1
解决办法
5875
查看次数

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

所以,我不知道装配是如何工作的,也不知道我在做什么.我以为我做了,但当然我错了.所以这是我的问题 - 我甚至不知道如何让用户输入一个整数,所以我可以将它存储在内存中.我也不知道我的变量是否对齐,因为我甚至不理解"对齐"究竟是什么.下面是我的汇编代码,以及显示我想要代码执行的内容的注释.请帮忙

.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 …
Run Code Online (Sandbox Code Playgroud)

assembly mips spim mips32

5
推荐指数
1
解决办法
1万
查看次数

在 MIPS 汇编 `addi` 指令中,如何解释十六进制立即数?

addi当使用十六进制立即数时,是否有关于如何在汇编中解释指令(和其他指令)的标准或建议?

例子:

addi $t0, $zero, 0xffff
Run Code Online (Sandbox Code Playgroud)

我期待这意味着相同的addi $t0, $zero, -1地方0xffff是符号扩展到0xffffffff,如由处理器完成的,而是由一个事实,即火星模拟器解释的十六进制数为32张无符号数和尝试的汇编做惊讶addi $t0, $zero, 0x0000ffff的伪指令(如果启用了伪指令)。

需要明确的是,MARS 的汇编器将该addi $t0, $zero, 0xffff伪指令组装为多条机器指令,这些指令在寄存器中创建该常量 (65535 = 0xffff),然后在启用伪指令的情况下添加它。MARS 的模拟器可以正确模拟0x2008ffff( addi $t0, $zero, -1)等指令。

SPIM 汇编器只是因错误而中止。

我想知道的是,汇编程序是否总是以这种方式解释,以及是否有写或解释的地方,因为我找不到任何东西。

assembly mips spim mars-simulator immediate-operand

5
推荐指数
0
解决办法
1万
查看次数