MIPS加载单词和地址说明

时间:2017-02-03 18:02:15

标签: assembly mips memory-address cpu-registers

我是Assembly的新手,负责与MIPS中加载单词和地址相关的作业。赋值是取两个单词,将它们加载到地址中,然后生成两个单词减去另一个地址的第三个单词。

随着我之前的编程类和语言的发展,我想尝试描绘幕后发生的事情,以便更好地理解调用的原因以及程序的执行方式。我希望这是有道理的,但是当我能够概念化这个主题时,我似乎总是更好地掌握这些概念。但是,当涉及到加载单词和地址时,我仍然会遇到关于为什么$lw reg, int(reg)(其中int为正或负)用于指定要放置单词的位置的断开连接?据我所知,负面在你指定的地址之前,而且肯定在之后。但由于某些原因,我无法完全理解这个话题。我在这里查看了其他帖子,例如:MIPS Programming Address Storing and LoadingMIPS Load Word [Address and Content Confusion]。这对我来说在某种程度上是有意义的,但我仍然没有完全理解何时使用它以及为什么。为什么当我加载一个字,字节,半字等时,我需要指定我希望将它放在与特定寄存器相关的位置,为什么这很重要? (我知道这让我非常无知,但我只是在学习,所以请耐心等待我)

以下是我发布的作业代码。现在这可行,但我不相信我正在有效或正确地使用lalw。所以对于我的第一个问题(实际上更多的是帮助),如果有人可以批评我的简短程序并向我解释我应该如何正确使用这些说明,我会很感激吗?

#Load address 'first' as a word containing decimal
#Load address 'second' as a word containing decimal
#subtract address second from address first and place it
#into address containing word 'result'

.data
    first: .word 27
    second: .word 8
    result: .word 0

.text
    #load address 'first' word
    la $t0, first
    lw $t1, 0($t0)  #'0' here is probably wrong I'm guessing

    #load address 'second' word
    la $t2, second
    lw $t3, 0($t2)  #'0' here is probably wrong I'm guessing as well

    #load address 'result' word
    la $t4, result

    #subtract contents of 'second' from 'first'
    sub $t4, $t1, $t3

    #move contents of 'result' and print
    move $a0, $t4
    li $v0, 1
    syscall

    #terminate program
    li $v0, 10
    syscall

现在由于某种原因,我可以理解何时需要打印地址的内容,使用la加载内容以打印输出我指定的地址。我明白了。我要说到目前为止我已经使用了98%的时间:la $a0, xxx。我明白了。但是当lw与它一起使用时,我需要指定一个整数来根据寄存器放置项目,我就完全迷失了。

我的第二个问题涉及这项任务的第二部分。现在虽然我没有要求确切的答案,但我正在寻找一些清晰度或这一部分意味着什么的例子。

我需要“在存储结果后,用结果的值覆盖第一个和第二个。在商店函数中使用常量偏移来执行此操作。”现在我知道常量偏移指的是一些因子(+/-)4(如果我错了,请纠正我)。但我不知道这甚至远程意味着什么,我希望这是我没有完全理解lwla相关性的直接结果。

0 个答案:

没有答案