我试图通过学习来学习MIPS程序集。在这本书中,我有这样的代码(是从书的第37页提取的):
.data
prompt: .asciiz "\n Please Input a Value: "
bye: .asciiz "\n Bye!"
.globl main
.text
main:
li $v0, 4
la $a0, prompt
syscall
li $v0, 5
syscall
beqz $v0, end
move $a0, $v0
li $v0, 1
syscall
b main
end
我才刚开始学mips。我试图写一个简单的程序,把3个数字相加在一起。程序应该提示一个数字3次,然后输出和。这是我写的
.data
instructions: .asciiz "Please enter a number : "
.text
main:
li $t0, 0x00 # i = false
li $t1, 0x00 #sum = 0
while: # while(i < 3 )
bgt $t0, 0x02, exit
b prompt
prompt:
li $v0, 0x04 # set IO
我目前正在学习一门计算机组织与汇编语言课程,主要使用MIPS指令集来教授汇编语言。
我注意到教授在网上发布的许多示例使用add或addi将值移动到$a0参数寄存器中,以调用打印服务,如下所示……
# store the first integer in $a0 and print
add $a0, $zero, $t0
li $v0, 1
syscall
或者..。
# store the first integer in $a0 and print
addi $a0, $t0, 0
li $v0, 1
syscall
我也注意到网上的一些例子,其他人只是使用移动指令来完成相同的事情,如下所示
我被困在一个练习中,不确定如何继续。这就是练习:
编写一个MIPS汇编语言过程Test,该过程接受2个整数作为参数,如果两个整数相等,则返回0;如果第一个整数小于第二个整数,则返回1;如果第一个整数大于第二个整数,则返回2。编写一个MIPS汇编语言程序,读入2个整数,调用过程Test,然后输出以下消息之一:这两个整数相等第一个整数小于第二个整数第一个整数大于第二个
有什么例子可以实现这一点呢?Mips让我非常困惑,因为我已经习惯了Java。谢谢。
编辑:这是我正在使用的程序作为基础,因为我不确定从哪里开始:
.data
str1: .asciiz "Please Enter Inte
我试图用MIPS编写一个程序,它不断提示输入两个整数,并打印和,直到和为0。诀窍是,如果和为13,我需要调用一个方法来更改组装的MIPS代码,以便
add $t2, $t0, $t1
变成了
and $t2, $t0, $t1
循环的所有后续运行都使用和指令。
我有一个求和循环,这样当13是和时,方法instMod就会被调用,我想修改这个指令。不幸的是,我不知道从哪里开始,在网上找不到任何例子。我假设我需要从集合的代码中获取加法的十六进制代码,并将其替换为and的十六进制代码,但我不知道如何做到这一点,或者这是否是正确的行动方针。
# Nick Gilbert
# MIPS Program t
我一直在尝试学习如何在火星上使用汇编MIPS32编程。我有一个问题,我想做一个返回整数的函数(我不知道它是怎么被调用的)。基本上,我想创建一个方法,要求用户插入一个数字,并将该数字与之前请求的另一个数字相加。这是我想出的方法,但我不知道如何将该值返回给$s2
New:
la $a0, prompt2 # Print string "Input: "
li $v0,4
syscall
li $v0,5 #Read int x
syscall
jr $ra
Add:
j New
add $s1,
在我写的当前示例中,我使用了80作为n,输出为n= 91,计数为42。这也被称为McCarthy 91。不过,我现在想在汇编语言(MIPS)中使用这段代码。有没有人对如何做到这一点有任何建议?我从未处理过在MIPS中构建递归类型程序的问题。下面我提供了我的工作python代码,以及我的程序集代码中的注释,这些注释都是在python代码下面编写的。任何提示/帮助肯定会受到汇编代码的赞赏。
Python代码:
def mcc91(n):
global count
count +=1
if n > 100:
retu
所以,我最近做了一个代码来计算C代码和MIPS代码中二进制1的数量。我在C中使用了一个余数值,并增加了一个count_one变量。在MIPS中,我做了同样的程序,但是我改变了数字的字节,直到它计算了所有的1。然而,我想尝试学习如何使用指针,但我似乎不能理解这个概念。我的MIPS代码如下:
.data
prompt: .asciiz "Enter a integer: "
.text
li $v0,4
la $a0, prompt
syscall
li $v0,5
syscall
move $s0,$v0
j count
count:
b
当我尝试在MIPS中处理无符号整数时,我所做的每个操作的结果都是有符号的(也就是说,整数都是2的补码),即使我执行的每个操作都是无符号的:addu、multu,以此类推……
当我打印[2^31, 2^32 - 1]范围内的数字时,我会得到它们的“溢出”负值,就像它们是有符号的一样(我猜它们是有符号的)。
然而,当我尝试这样的事情时:
li $v0, 1
li $a0, 2147483648 # or any bigger number
syscall
打印的数字始终为2147483647 (2^31 - 1)
我很困惑..。我遗漏了什么?
PS :我没有包含我的代
.text
main: la $a0, A #loads address of A into $a0
li $t0, 1 #loads 1 into $t0
sw $t0, ($a0) #stores word from $a0 into $t0
li $t0, 2 #loads 2 into $t0
sw $t0, 4($a0)
li $t0, 3
sw $t
我试图使用SPIM simulator.The代码编写一个简单的程序,在MIPS中添加两个浮点数,如下所示:
.data
prompt1: .asciiz "\nPlease Enter first no then hit <enter>:"
prompt2: .asciiz "\nPlease Enter second no then hit <enter>:"
result: .asciiz "\nSum is : "
.text
main:
li $v0 , 4
la $a0, prompt1
syscall
我目前正在写一个mips程序,做阶乘。我用java编写了阶乘示例,并且在java代码下面还有MIPS程序。我已经把大部分的MIPS都写出来了,但是我不明白为什么它没有正确的处理。任何提示都将不胜感激。
Java code for the iteratve factorial algorithm:
import java.util.Scanner;
public class FactorMachine {
public static void main(String[] args) {
int input;
Scanner in = new Sca
我正在学习如何做MIPS,但我对乘法感到困惑。假设我正在将下面的C代码转换为MIPS。
c = b + a*3
其中a、b、C分别存储在寄存器$s1、$s2、$s3中。我应该如何在MIPS中写一个*3?是否有用于乘法的addi类型指令,或者我是否将3存储在临时寄存器中并像这样使用mult运算符?
addi $t0, $zero, 3
mult $s1,$t0
如果是这样的话,我如何获得这个操作的最终值或乘积来完成我的C代码?
我正在尝试创建一个汇编语言程序( MIPS)来读取与换行符分隔的用户输入值。我希望读取一个包含整数的字符串(例如,"A4“),但是,MIPS将字符串读入"A”,将整数读入"4“。如何让MIPS用syscall将字符串读取为"A4“?下面是我到目前为止的一些代码,它应该在一行上读取一个字符串,在下一行上读取一个整数。
buffer: .space 2
.text
.globl main
main:
li $v0, 8
la $a0, buffer
li $a1, 2
syscall
move $s0, $a0
li $v0, 5
因此,赋值是在MIPS中编写一个函数,该函数接受一个数组,将数组的所有内容相加在一起,并返回和。主要的问题是,我对程序集不太熟悉,也不完全确定如何将数组传递给程序集中的函数,以下是我到目前为止所做的工作:
# Title: homework2.asm
# Author: Jacob Suarez
# Date: 9/28/14
# Purpose: Create a function that can find the sum of the elements in an array, and run two arrays through it
# Text Segment
.text
我很难理解指令jal是如何在MIPS处理器中工作的。我的两个问题是:
( a) R31中存储在“jal”之后的值是什么:PC+4或PC+8
b)如果真的是PC+8,那么PC+4的指令会发生什么变化?它是在跳转之前执行还是从未执行?
载于Patterson and Hennessy (第四版),第113页:
跳转和链接指令:跳到地址并同时将下列指令的地址保存在寄存器中的指令($ra in MIPS)
程序计数器(PC):包含正在执行的程序中指令的地址的寄存器
在阅读这两条语句后,可以得出保存在$ra中的值应该是(PC+4)。
然而,在本书附带的MIPS参考数据(绿卡)中,jal指令的算法定义如下