使用系统调用生成随机数
我正在尝试从0-99(包含)生成一个随机整数,但是我很难找到使用42 syscall时将值存储的位置. 到目前为止,我有: li $a1, 100 li $v0, 42 syscall 我不确定生成的值存储在哪里,以便我可以使用它. 解决方案 来自帮助页:$a0是pseudorandom编号生成器ID,$a1是上限,返回的随机数也将包含在$a0中. .
10 2023-10-13
编程技术问答社区
在MIPS中使用随机数发生器?
所以我正在阅读此网站上的几个线程,我找到了一个关于如何制作的线程. 但是我真的找不到一个链接,该链接更多地解释了有关如何编码的链接. 我的课程教科书根本没有提供有关RNG的任何信息,因此没有任何帮助. 代码为 li $a1, 4 li $v0, 42 add $a0, $a0, 1 这对于要求1-3之间的范围是正确的吗? 我尝试输出是什么随机数,但它给了我相同的数字. #sw $a0, 0($s0) li $a1, 4 li $v0, 42 add $a0, $a0, 1 #syscall li $v0, 4 la $a0, Checking syscall li $v0, 1 move $t0, $a0 syscall 我看到了sw $a0, 0($s0),但是我不确定那是什么 - 输出需要吗? (我把它取出了 我不断获得268501267的输出,我不确定这意味着什么 编辑:现在开始给我268500992 任何人都可以帮助更多地解释这一点吗?
22 2023-07-24
编程技术问答社区
编译器生成的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
14 2023-06-21
编程技术问答社区
在MIPS中通过移位和加法进行乘法运算,不需要乘法。
我有以下代码,但是我不断收到算术溢出错误.我要解决的问题是将两个31位数字乘以将结果存储在$ t2 $ t3中,并打印出正确的结果.看来我已经编码了两个数字要乘以,最终结果是31位数字. 我很想在觉得自己出错的地方缩小范围,但老实说我看不到我需要改变的地方. # program to multiply two 31 bit binary numbers (A & B), # using the “shift and add” . .data # declare the variable lables of ASCII storage type. prompt1: .asciiz "Enter number 1: " prompt2: .asciiz "Enter number 2: " result: .asciiz "The multiplication of two 31 bit binary numbers is: " .text 主:
14 2023-06-21
编程技术问答社区
它是如何知道字符串结束时没有终止符的?(下面的代码)
我正在学习火星上的MIPS,根据以下代码,我感到困惑.因为当我将输入的字符串加载到保留空间中时,即使没有终结器,代码也会正常输出.为什么是这样? 我认为每个字符串都需要一个终结器,因此输入缓冲区知道何时停止. 有一个自动填充还是...?提前致谢. 代码是: # Filename: mips3.asm # Author: me # Program to read a string from a user, and # print that string back to the console. .data prompt: .asciiz "Please enter a string: " output: .asciiz "\nYou typed the string: " input: .space 81 # Reserve 81 bytes in Data segment inputSize: .word 80 # Store
14 2023-06-21
编程技术问答社区
如何在MacOS上打开MARS中保存的.asm文件
我是使用MIP的新手,我找不到如何打开保存的文件.我在下载文件夹下保存了一个.ASM文件,但是当我尝试在火星中打开文件并导航到同一下载文件夹时,不会出现.ASM文件. 我正在使用Macos上的火星. 解决方案 如上所述,您需要在MacOS中的系统首选项中允许完整的磁盘访问. 在这里他们提到您需要搜索'Javalauncher.app'.这是由于MACOS随着安全管理的变化而导致的问题. 在MacOS上提供完整的磁盘访问JAR文件: 转到系统首选项. 单击安全性和隐私. 搜索"完整磁盘访问". 单击左下方的锁以进行更改. 单击FDA面板左下方的'+'图标,将显示一个查找器提示. 转到System/Library/Coreservices/Javalauncher.App 选择javalauncher.app,然后单击"打开" 就是这样.您应该能够通过Java应用程序访问文件.这有助于解决我的MARS MIPS无法在笔记本电脑上正确保存文件的问题.
52 2023-06-20
编程技术问答社区
调整mips-gcc的输出,使之与MARS一起工作
MIPS-GCC生成的MIPS装配代码几乎几乎,但并不完全在MARS MIPS模拟器上运行.例如: 编译器生成" J $ 31"而不是" JR $ 31" 编译器将.Align指令放在文本段中,火星不允许. 此外,生成的组件不是完全设置的,以便它可以启动和停止(即,末尾没有Sycall 10). 这些问题似乎都可以通过简单的脚本很容易解决.但是,在我重新发明轮子之前,我想知道: (1)是否有任何GCC标志会导致其中一些问题消失? (2)有人知道现有程序可以修复MIPS-GCC输出以使其在火星上运行吗? (fwiw,我在GCC 3.3.6和4.6.1上看到相同的行为.) 解决方案 是否有任何GCC标志会导致其中一些问题消失? 简短的答案是否.火星使用自定义系统调用,在呼叫约定时有很大不同. 有人知道现有程序可以修复MIPS-GCC输出以使其在火星上运行吗? 我不知道将其转换的任何自动化方法.您只能手动做.我实际上已经做到了. 大
8 2023-04-21
编程技术问答社区
有一个整数,并打印出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 2023-03-28
编程技术问答社区
使用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
14 2023-03-28
编程技术问答社区
MIPS中的整数数组:将数组[索引]设置为迭代值i?
我正在努力将以下C ++代码转换为MIPS(这只是我坚持使用的程序的一小部分),我理解如何设置$t寄存器的要点给出的值,但我完全卡在 上 pos[count] = i; 我已经尝试过sw,lw,但是每次尝试这些,我都会获得地址以外的范围异常/等. 有人可以向我解释这里出了什么问题吗?当循环到达pos[count] = i时,对于每个循环迭代,我需要将pos[count]从0xffffffff更改为(i).错误是否来了,因为我需要对pos[]中的-1进行调整? 我完全迷失了,找不到任何与此问题相似的解释. (对格式表示歉意,因为MIPS具有许多标签线,因此在此处发布的格式非常古怪) .data x: .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0
6 2023-03-28
编程技术问答社区
如何比较存储的字符串和输入的字符串-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
8 2023-03-28
编程技术问答社区
如何使用用户输入的程序集创建一个文件
我正在尝试使用"汇编"中的用户输入记录. 我正在使用此代码,但是当创建文件时,输入未正确记录在文件上.有人可以帮助我吗?这是我的代码: .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 2023-03-28
编程技术问答社区
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,
46 2023-03-28
编程技术问答社区
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,
42 2023-03-28
编程技术问答社区
如何从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地址中存储的值.
10 2023-03-28
编程技术问答社区
设置输入变量
问题问: 编写一个以$ s0和$ s1为单位的MIPS代码,将其放入 $ t*注册以下内容: $t0 = $s0 $t1 = $s1 $t2 = $t0 + $t1 $t3 = $t1 + $t2 ... $t7 = $t5 + $t6 换句话说,对于从$ t2到$ t7的每个寄存器,它存储了前两个$ t*寄存器值的总和. $ S0和$ S1寄存器包含初始值.不要在代码中设置$ s0和$ s1的值.相反,学习如何用火星手动设置它.将您的代码保存到总和中. 好吧,这并不难: move $t0 $s0 move $t1, $s1 add $t2, $t0, $t1 add $t3, $t1, $t2 ...等等 但是最后一部分是什么意思? "不要在代码中设置$ s0和$ s1的值.相反,请学习如何用火星手动设置它.将代码保存到总和中." ? 解决方案 这意味着您不应包括: move $s0, 0xBAAD move $s1,
28 2023-03-28
编程技术问答社区
如何从/到地址加载和存储字,索引在一个寄存器中,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寄存器. ,但我找不到相同的存储说明.
12 2023-03-28
编程技术问答社区
如何计算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管道从根本上讲,基
20 2023-03-28
编程技术问答社区
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,
14 2023-03-28
编程技术问答社区