有一个整数,并打印出MIPS中的十六进制
如果我有一个整数,则将整数打印到十六进制中的代码行是什么?我知道您将34用作命令,但我不确定其余部分 解决方案 您指的是" 34"是mars模拟器中的" hexadecimal in hexadecimal"的syscall编号. syscall参考为: 假设您的电话号码在寄存器中,例如$t5,序列将是: move $a0,$t5 # put number into correct reg for syscall li $v0,34 # syscall number for "print hex" syscall # issue the syscall
16 2024-03-17
编程技术问答社区
编译器生成的asm中的%lo和%hi是什么意思,为什么在MARS上不能工作?
有人可以向我解释这是怎么回事 %lo(foo)($1) %hi(foo) 在这种情况下特别是: lui $1, %hi(foo) sw $0, %lo(foo)($1) ($1)在%lo(foo)($1)中做什么? 为什么这样做不起作用? 解决方案 这是在使用高和低16位的Foo作为气体中的偏移量的间接解决方案. $ 0和$ 1是寄存器.请参阅此处: msg00262.html
8 2024-03-17
编程技术问答社区
如何比较存储的字符串和输入的字符串-MIPS
我正在编写一个程序,询问用户的温度,然后进行输入并转换并输出所有四个温度.我需要帮助用户的输入读数,以便它可以在我的分支BEQ中使用.我无法将其重述为等于存储版本的输入" f". .data temptype: .asciiz "Enter temperature type i.e. f, c, k, r: " tempdegree: .asciiz "\n Enter degrees: " space: .space 2 tempx: .asciiz "Your temperature in celsius is: " tempc: .asciiz "\nYour temperature in celsius is: " tempf: .asciiz "\nYour temperature in fahrenheit is: " tempk: .asciiz "\nYour temperature in kelvin is: " tempr: .asciiz
14 2024-03-17
编程技术问答社区
使用slt检查一个数字是否大于或小于,并使用mars进行分支。
所以这是我到目前为止我不确定要去哪里分支或只是打印答案的地方.我试图打印出消息,但无济于事.有没有办法同时使用SLT和分支? .data message1: .asciiz "The number is less than. :" message2: .asciiz "/nThe number is greater than. :" .text main: addi $t0, $zero, 20 addi $t1, $zero, 5 slt $s0, $t0, $t1 beq $s0, $zero, printmessage1 sge $s0, $t0, $t1 beq $s0, $zero, printmessage2 li $v0, 10 syscall printmessage1: li $v0 4 #print out message1 la $a0 message1 syscall printmessa
10 2024-03-17
编程技术问答社区
如何在MacOS上打开MARS中保存的.asm文件
我是使用MIP的新手,我找不到如何打开保存的文件.我在下载文件夹下保存了一个.ASM文件,但是当我尝试在火星中打开文件并导航到同一下载文件夹时,不会出现.ASM文件. 我正在使用Macos上的火星. 解决方案 如上所述,您需要在MacOS中的系统首选项中允许完整的磁盘访问. 在这里他们提到您需要搜索'Javalauncher.app'.这是由于MACOS随着安全管理的变化而导致的问题. 在MacOS上提供完整的磁盘访问JAR文件: 转到系统首选项. 单击安全性和隐私. 搜索"完整磁盘访问". 单击左下方的锁以进行更改. 单击FDA面板左下方的'+'图标,将显示一个查找器提示. 转到System/Library/Coreservices/Javalauncher.App 选择javalauncher.app,然后单击"打开" 就是这样.您应该能够通过Java应用程序访问文件.这有助于解决我的MARS MIPS无法在笔记本电脑上正确保存文件的问题.
10 2024-03-17
编程技术问答社区
如何从MIPS汇编中打印到屏幕上
.text emitchar: lui $t0,0xffff polling: lw $t1,8($t0) andi $t1,$t1,0x0001 beq $t1,$zero,polling sw $a0,0xc($t0) .data 我被告知这是如何做到的,但是当我运行带有显示器的模拟器和键盘添加时,我仍然不会在屏幕上输出.我在做什么错? 解决方案 启动代码后,您是否在键盘窗口中单击"连接到MIPS"?从帮助按钮: 重要注意:仅当您单击工具的"连接到MIPS"按钮(在独立版本中"组装并运行")或工具的重置按钮时,只有在单击工具的"连接到MIPS"按钮时,将发射器控制器准备就绪设置为1!如果您运行MIPS程序并将其重置在火星中,则控制器的即将位将清除为0!配置数据段窗口以显示MMIO地址范围,以便您可以直接观察上面给出的MMIO地址中存储的值.
4 2024-03-17
编程技术问答社区
如何使用用户输入的程序集创建一个文件
我正在尝试使用"汇编"中的用户输入记录. 我正在使用此代码,但是当创建文件时,输入未正确记录在文件上.有人可以帮助我吗?这是我的代码: .data file1: .asciiz "file1.txt" prompt: .asciiz "User entry\n" buffer: .space 45 .text la $a0,prompt li $v0,4 syscall li $v0, 8 li $a1, 454 syscall move $s1, $v0 j writeFile1 writeFile1: li $v0, 13 la $a0, file1 li $a1, 1 li $a2, 0 syscall move $s6, $v0
8 2024-03-17
编程技术问答社区
MUL和MULU之间的确切差异
我从一个来源发现RS和RT的内容被认为是Mul的签名整数. ,而对于mulu,RS和RT的内容被认为是无符号整数. 但是,每当我执行mul和mulu时,它们似乎都会给出相同的结果. li $t0 -2 li $t1 2 mul $s0, $t0, $t1 mulu $s1, $t0, $t1 $ s0和$ s1的两个商店-4. 我的问题是说RS和RT被认为是签名/未签名的整数以及MUL和MULU如何对待RT和RS的意思是什么? 我可以看到mul和mulu给出不同结果的具体情况是什么? 我正在使用火星模拟器. 谢谢.请问我是否有任何理解这个问题的困惑. 解决方案 MIPS具有一个提供确切答案的乘法单元:需要32位×32位→64位,这是乘法的工作方式,从数学上讲. 在火星上,mul是一个真正的指示.它在hi&lo中产生了64位结果,并且还将其捕获的低32位并将其存储到rd中. (该指令不是第一个MIP的一部分;稍后添加.)如果您执行此说明,则会看到hi和
24 2024-03-17
编程技术问答社区
MARS MIPS 超出范围错误
我是MIPS的新手,正在尝试一个程序以在伪随机数组中找到最大数字的值.但是,我在一条线上遇到了一个超出范围错误,我可以肯定会分配正确的内存等.给出了大多数骨架代码,评论等,我只是试图编写find_max函数.我在这条线上发表了评论. .data #data segment nl: .asciiz "\n" #ASCII for a new line separator: .asciiz ":" #string that seprates index from number msg1: .asciiz "The function returned " msg2: .asciiz "\nThe maximum value is " li $v0, $t5 #.asciiz msg3: .asciiz "\nThe address of the word is " #.asciiz li $v0,
20 2024-03-17
编程技术问答社区
如何计算mips汇编编程的时钟周期?
我到处都在搜索,我收集了管道或其他东西.我已经检查了其他程序,似乎有一个单周期和多环形:单周期和多循环mips的时钟循环 我如何区分哪个周期的区别. 例如,这是多少时钟周期: li $a0, 0 # $a0 = 0 li $t0, 10 # Initialize loop counter to 10 Loop: add $a0, $a0, $t0 addi $t0, $t0, -1 # Decrement loop counter bgt $t0, $zero, Loop # If ($t0 > 0) Branch to loop 我的教授给了我一个作业:"假设存储器中的加载和存储值成本为100个周期以及指令的成本 本身." 从我阅读的内容中,加载是5个周期,所以为什么我的教授说它的100个周期.我可以把它做出我想要的任何数字吗?我很困惑. 解决方案 这个问题没有意义. 在大多数教育MIPS实现中使用的标准多循环RISC管道从根本上讲,基
10 2024-03-17
编程技术问答社区
如何从/到地址加载和存储字,索引在一个寄存器中,MIPS
如何在寄存器中加载和存储该索引中的单词?在组装MIPS中 示例: lw $t0, $a0($t1) and sw $t0,$a0($t1) 这些构造只是为了我要做的事情(不正确) 谢谢 解决方案 尝试这样做,而不是唯一的lw语句: add $a0 $a0 $t1 lw $t0 0($a0) sub $a0 $a0 $t1 仅在要还原$a0回到原始值时才需要最后一个子. 您可以为sw部分做同样的事情. 其他解决方案 微芯片微控制器包含带有指令的DSP扩展: LBUX rd, index(base) # load byte LHX rd, index(base) # load half-word LWX rd, index(base) # load word 其中"索引"和"基础"是GPR寄存器. ,但我找不到相同的存储说明.
8 2024-03-17
编程技术问答社区
MIPS-自由动态分配的空间(堆)
我正在尝试动态分配的内存空间 我已经尝试运行此简单代码,但是我一直遇到相同的错误: "请求(-40)是负数(SYSCALL 9)" .text li $v0,9 li $a0,40 syscall li $v0,9 li $a0,-40 syscall 谁能帮助我理解为什么它不起作用? 有其他方式可用空间吗? 解决方案 火星不支持sbrk具有负面参数,您可以在源代码在这里. ,据我所知,在火星中运行代码时,没有办法明确免费分配内存. 其他解决方案 如果使用负面sbrk基本上将堆变成堆栈的负sbrk,则只能返回末端的内存,这并不是堆的真正目的.在堆中,我们希望能够释放任何任意对象,而不仅仅是终点. 所以,问题是: 为什么需要发布堆内存? 您真的可以像堆栈一样使用堆吗? 您可以实现malloc&free.尽管这些通常由于其通用性质和性能考虑而变得非常复杂,但简单,缓慢的写作非常容易写,尤其是当您了解应用程序及其有限的要求时.
22 2024-03-17
编程技术问答社区
在MIPS组装中验证用户整数输入
我有一个分配,要求我制作一个基本的计算器,该计算器可以在MIPS组装中进行整数上进行四个基本操作(添加,减,乘,分隔).分配的一部分需要用户输入验证,以确保用户输入整数以及正确的操作数.我已经完成了基本的计算器和操作数输入验证.我想知道什么是完成整数输入验证的最佳方法或一种好方法. 目前,我正在使用Syscall在整数中阅读.当用户输入整数以外的任何内容时,将零存储在$ v0寄存器(SYSCALL函数的返回寄存器)中.首先,如果等于零命令,我只是将分支用于分支到子例程,该子例程要求用户输入有效的整数并跳回读取和存储整数的子例程.唯一的问题是,用户无法输入0,这是一个有效的整数. 我可以做到的好方法是什么?我是否应该将输入读为字符串,而不是整数,然后解析字符串以确保每个char的ASCII值与整数ASCII值相对应?如果需要更多信息,请让我知道.我无法发布代码,因为这是我的课程中当前有效的分配. 解决方案 给定火星/Spim的是的,如果要验证输入,则需要阅读字符串并将其
28 2024-03-17
编程技术问答社区
MIPS的 "la "假指令
在MIPS中,la指令转化为lui和ori.但是,火星模拟器似乎根本没有这样做.当我转储以下机器代码时: .text la $a0, array la $a1, array_size lw $a1, 0($a1) .data array: .word 0:10 array_size: .word 10 message: .asciiz "The sum of numbers in array is: " 我得到: 00100000000001000010000000000000 00100000000001010010000000101000 10001100101001010000000000000000 显然是.它是将la作为一种指令倾倒.火星做什么?如何将其解释为la为lui和ori? 谢谢, 解决方案 这里发生的事情是您的汇编程序将这些la s编译为addi $, $0,
10 2024-03-17
编程技术问答社区
简单的MIPS汇编-返回斐波那契数
我正在尝试创建一个简单的汇编代码,该代码获取输入n并返回nth fibonacci编号(例如,如果输入2,则应输出1,如果输入3,则应输出2).我的代码不会丢下任何错误,但是输入一个数字后,它会返回一些怪异的东西. 如果输入1,它将返回2685009921. 如果输入2,则返回0.01. 如果输入3,则返回0.02. 如果输入4,它将在开始时输出文本要求一个正整数,然后键入3(正确的答案). 如果输入5,它将无需输出,并且当您再次按Enter时,它会产生运行时间异常(无效整数输入SYSCALL 5). 五个以上的任何东西都会出现奇怪的错误. 几乎好像在运行了一个用输入号作为代码的SYSCALL,这可以解释为什么前四个数字输出内容(前四个SYSCALLS输出数据). 您怎么看?这是代码: .data introText: .asciiz "Type a positive integer, please! \n" input: .word 123 .tex
6 2024-03-17
编程技术问答社区
MIPS帮助。递归函数
我正在尝试将此递归功能编码为MIP. 我的问题是我不确定如何做递归步骤. 我很确定其余的正确. int recur(int n) { if(n == 1 || n == 2) { return 2; } else { return (n-4)+n*recur(n-2); } } .data promptMessage: .asciiz "Enter a number that is greater than or equal to 0: " resultMessage: .asciiz "\nThe answer is: " input: .word 0 answer: .word 0 .text .globl main main: #Read the number from the user li $v0, 4 la $a0, promptMessage sysca
4 2024-03-17
编程技术问答社区
MIPS汇编,lui 0x1001
我有一个作业,我必须在其中解释有关以下MIPS组装代码的一些事情: .data x: .word 4711 y: .word 10 z: .word 0x0A91 e: .word 0 .text .globl main main: lw $2, x lw $3, y lw $4, z add $2, $2, $3 sub $3, $2, $4 sw $3, e li $2, 10 syscall 组装时,第一个指令lw $2, x分为两个说明.说明是lui $1, 0x00001001,其次是lw $2, 0x00000000($1).我知道Lui将十六进制值1001移至寄存器的上部,此时存储在1美元中的值为0x10010000,但我不明白1001的来源以及第二个指令的含义.我真的会在主题上对任何帮助.我正在使用火星组装和运行此程序. 解决方案 MIPS指令的说明是32位渴望,程序的用途也是如此. 这意味着要立即指定完整的32位地址. 简而言之,指令lw $t,
18 2024-03-17
编程技术问答社区
无效的程序计数器值:0
我目前正在使用MIPS处理器下的汇编语言.我现在在 使用火星模拟器,由于未知原因,我在每次运行后都会收到以下错误消息: GO:运行try.s 错误在:无效的程序计数器值:0 go:执行错误. 我从我使用的代码中获取此错误消息,只是想知道这是否是一个错误 在火星模拟器中,或者如果是我缺少的东西. 解决方案 您可能会使用jr $ra(返回呼叫者)完成程序.但是,火星执行的代码没有呼叫者 - 它是在启动时执行的,并且没有返回的功能,因此$ra的内容为零. 在火星上结束程序的正确方法是使用"退出" syscall: li $v0, 10 syscall 其他解决方案 我是MIP的新手,我遇到了这个问题. 这就是我所拥有的: .data .text swap: # do stuff jr $ra main: # do stuff jal swap li $v0,
14 2024-03-17
编程技术问答社区
在结束MIPS汇编语言程序时,是否需要 "jr $ra"?(MARS和QtSpim的行为是不同的!)
如果您将jr $ra放在火星中的MIPS汇编语言程序的末尾,则会收到一条错误消息: 无效的程序计数器值:0x00000000 以下示例1失败: .data theMsg: .asciiz "Hello World\n" .text .globl main main: li $v0, 4 la $a0, theMsg syscall jr $ra 示例2以下工作: .data theMsg: .asciiz "Hello World\n" .text .globl main main: li $v0, 4 la $a0, theMsg syscall 火星说"程序已经完成(底部下降)" 没有错误消息. 现在,如果您在qtspim中运行示例2,则
12 2024-03-17
编程技术问答社区