什么是MIPS中的 "轮询",在内存映射I/O中究竟如何 "轮询"?
在这个主题上遇到困难,简单的互联网搜索只会显示中断处理,所以我假设它是一种中断吗?对不起,如果我密集. 解决方案 轮询的方法涉及繁忙的等待循环非常简单:请咨询内存位置(设备指示设备状态的设备拥有的MMIO位置),并在循环中重复此设备,如果该内存位置报告该设备尚未准备就绪.设备准备就绪后,将一个数据字节(例如字符)传输到设备. 投票具有简单的优势.用户程序一次将字符发送到控制台一个,在每个字符之间忙于等待(轮询).键盘输入相同,一次进行一键按下,每个键都忙于等待. 民意调查是不利的,因为它消耗了过多的CPU,几乎什么也没做.如果设备是键盘,则CPU将在繁忙等待中循环,直到用户击中键,该键可能是该循环的秒,小时或几天. 此外,如果在程序不小心寻找它们时发生多个键盘,则轮询可能会放松键盘字符. (有些系统会失去较新的角色,而其他系统则较早.) 繁忙的等循环像其他普通和重要的用户代码一样向系统展示:它没有专门将CPU传递到系统上的其他软件,也不允许系统进入较低的功
2 2023-05-23
编程技术问答社区
我如何使用MIPS汇编语言逐行读取一个文件
我正在为我的班级进行一个项目,该项目要求我按线路从文件中阅读.我们的最终目标是使用MIPS语言制作MIPS汇编器,但是与这篇文章有关的问题是,我无法从文件中排行书.我已经创建了一个机制,可以从文件中读取信息. .data file_loc: .asciiz "test.asm" #note: when launching from commandline, test.asm should be within the same folder as Mars.jar buffer: .space 1024 #buffer of 1024 new_line: .asciiz "\n" #where would I actually use this? #error strings readErrorMsg: .asciiz "\nError in reading file\n" openErrorMsg: .asciiz "\nError in opening file\n" .t
0 2023-05-23
编程技术问答社区
MIPS将浮点数转换成整数
我尝试查看几种不同的方式,其中之一是使用二进制方式向左/右移动,但我只是找不到组合以使其适用于每次以外的几个选定的数字.那么如何将浮子转换为整数? .data five: .float 10.0 .text main: la $a1 five l.s $f12 ($a1) #conversion here li $v0 2# print float, which will print 10.0 (should print integer) syscall li $v0 10 syscall 解决方案 免责声明:我不是 mips Arch. 的专家 如评论中所建议的,快速查找 mips fp参考给出了所需的指令: cvt.w.s . .data five: .float 5.0 .text #Convert five into an integer la $t1, five l.s $f1
0 2023-05-23
编程技术问答社区
与功能呼叫的sp增量相关的困境
如果在函数呼叫过程中推动推动,为什么堆栈指针移至 减去寄存器数量的4倍较小的值 推上堆栈? 我在阅读了解堆栈 解决方案 在同一页面中,清楚地提到了堆栈的内存布局: - 考虑堆栈的以下方面很有用. 堆栈底部堆栈的最大有效地址.初始化堆栈时,堆栈指针指向堆栈底部. 堆栈限制堆栈的最小有效地址.如果堆栈指针比这小,则有一个堆栈溢出(此 不应将数学操作的溢出混淆). 其他部分的内存部分用于程序和堆 (用于动态内存分配的内存部分). 并且,谈到推动操作,需要在需要在堆栈上推动的寄存器数量减去4倍,因为MIPS架构中的 ,顺序单词的地址通过4. ,并且寄存器是MIPS I指令集架构(ISA)和II ISA的32位(4个字节). 对于我们的4字节(完整单词)数据的堆栈,添加一个项目意味着从 $sp 中减去四个,并将项目存储在该地址中. 这就是代码中的外观.假设在寄存器 $t0 中,推动堆栈的价值是 # PUSH the item in $t0
0 2023-05-12
编程技术问答社区
我需要让我的电话号码以二进制的方式打印出来.这个数字是计算的总和.我的代码不起作用
.data prompt:.asciiz "\nEnter an integer: " add: .asciiz "\n The sum in decimal is: " bin: .asciiz "\n The sum in binary is: " sgt: .asciiz "\n The second integer is greater than the first. " fgt: .asciiz "\n The first integer is greater than the second." equal: .asciiz "\n The two entered values are equal: " .text main: li $v0, 4 #print string code la $a0, prompt #argument syscall #execute, service print stri li $v0, 5 # read integer sysca
0 2023-04-30
编程技术问答社区
如何删除MIPS中的换行符?
因此,我忙于编写一个MIPS程序,该程序将采用输入字符串,然后打印该字符串的所有唯一排列. (又称单词是循环,循环和循环相同的). 为了做到这一点,我知道我需要在输入字符串的末尾有一个newline字符,但是我不知道要确保不会添加它.这是我到目前为止所拥有的: .data newLine: .asciiz "\n" promptUser: .asciiz "Enter a 20 letter or less word:\n" word: .space 21 .text main: la $a0, promptUser li $v0, 4 # Ask User for Input syscall la $a0, word li $a1,21 # Max number of characters 20 li $v0,8 syscall # Promp
0 2023-04-22
编程技术问答社区
调整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输出以使其在火星上运行吗? 我不知道将其转换的任何自动化方法.您只能手动做.我实际上已经做到了. 大
0 2023-04-21
编程技术问答社区
汇编MIPS。嵌套循环
当我尝试编写一些代码时,它肯定会有些棘手 **** **** **** **** 所以我认为嵌套的循环可以节省一天. 男孩我错了. 所以我为星号制作了一个内部循环,并为下面的空间进行了外环: .text .globl main main: add $t0, $zero, $zero #i counter for the inner loop add $t2, $zero, $zero #j counter for the outer loop outerloop: innerloop: slti $t1, $t0, 4 #while (i
2 2023-04-21
编程技术问答社区
如何在MIPS平台上运行i386二进制文件?
我有一个i386二进制文件,我想用嵌入式Linux在STB上运行. 如何在MIPS Arch Platform上运行i386二进制(在Ubuntu/编译器上编译:I486-Linux-gnu-libusb)? 解决方案 您需要一个模拟器.最著名的仿真器是然而,仿真本质上很慢,因此仅用于没有可用源代码的非绩效关键应用程序.像设定盒中的解码器这样的实时软件绝对不适合在仿真下执行.您需要重建软件以mips target 另请参见 如何在X86平台上运行MIPS二进制? 如何在X86 Linux上执行MIPS组装程序?
34 2023-04-20
编程技术问答社区
结构中的位是否得到保证
我有一个与结构位字段有关的问题,请参见下文,因为我对哪些关键字有点毫无疑问来最好地描述我的问题: 上下文:我正在为MIPS R3000A组装说明编写一个拆卸器,该说明是在2000年初用于PlayStation程序的拆卸器. 问题:我想知道是否在此代码中: struct Instruction { u32 other:26; u32 op:6; }; //main: Instruction instruction = *(Instruction*)(data + pc); printf("%02x\n", instruction.op); 可以保证,所有使用少量端的编译器都将始终使用OP:6位字段来存储前6个MSB? (这有点直觉,您会假设最后6位存储在OP BIT字段中) 这是以下代码的替代方法: static uint32_t get_op_code(uint32_t data) { uint16_t mask = (1
0 2023-04-19
编程技术问答社区
为MIPS路由器从x86进行交叉编译
我的最终目标是为旧的ActionTec调制解调器/路由器编译无线工具,以便我可以将其配置为以太网桥的无线.目前,它的无线功能(看似)由管理大多数Web界面的相同二进制文件控制,但看来他们使用了库无线工具在内部至少用于某些功能. 我以前从未交叉过针对其他CPU体系结构进行编译,并且不确定如何完全识别我需要做的事情.我正在尝试使用UCLIBC,因为它似乎在系统的其余部分中使用,但是我不确定如何为调制解调器环境配置BuildRoot.我做了一个# cat /proc/version Linux version 2.4.17_mvl21-malta-mips_fp_le (root@localhost.localdomain) (gcc version 2.95.3 20010315 (release/MontaVista)) #1 Thu Apr 21 18:04:37 PDT 2005 # cat /proc/cpuinfo processor : 0 cpu model : MIPS
2 2023-04-19
编程技术问答社区
预置的MIPS交叉编译器与MS-Windows的工具链
我在Linux计算机上使用了MIPS交叉编译器,该编译器效果很好. 现在我需要在Windows上编译相同的应用程序. 我正在网络搜索一些预制的MIPS交叉编译器(带工具链)以获取MS-Windows,但没有成功. 由于我不确定该怎么做,我问是否有人知道这种预建工具链?或一些指南,如果可能的话,如何将我的Linux工具链转换为Windows? 谢谢. 解决方案 您应该使用其他解决方案 看来,导师从CodeSourcery分发中夺走了免费的MIPS工具链.也许其中之一可能仍然有效: https://www.linux-mips.org/wiki/工具链.
0 2023-04-12
编程技术问答社区
为什么MIPS使用一个延迟槽而不是两个?
在许多RISC架构中似乎都是这种情况.由于填充一个延迟插槽可节省我们50%的其他浪费周期,为什么不给程序员一个使用两个插槽的机会? 解决方案 在MIPS R2000上,ISA设计的经典MIPS I, 1个分支插槽 IS 足以隐藏分支潜伏期: . 能够以低延迟(一半的时钟周期)检查分支条件是为什么MIPS条件分支仅限于eq/ne和/或检查符号位的原因是x
8 2023-04-12
编程技术问答社区
寄存器和存储器的地址长度是否相同,以比特为单位?
我对计算机组织和系统非常陌生,因此如果我说错了,我会事先表示歉意. 我正在学习有关MIPS体系结构的知识,我对记忆和解决方案有很多问题: 到目前为止,我所知道的是,当我们拥有32位CPU时,这意味着我们以32位块处理数据. CPU由由32个寄存器组成的ALU和缓存内存组成.记忆存储32位长的说明.我可视化内存的方式是它是一个带有多行的矩形,每行都长32位. 现在,我的问题与我们如何解决寄存器和内存有关.当我们使用加载单词或存储单词命令时,我们调用某些内存位置以存储数据,或将存储在其中的数据中传输到缓存中存在的寄存器中.我遇到了诸如$ t0,$ s0等的术语,我认为这是某些寄存器的绰号. 我的问题是 - 位置多长时间?例如,如果我们要访问存储在内存第1行中的数据,则第1行的"地址"是多长时间?我在某个地方读到地址本身长32位,此32位地址依次是指32位的数据.这是否意味着有2^32个可能的地址或行,每个地址存储32位数据? 现在,如果以上是正确的,我认为寄存器也有32位的地址,但
10 2023-04-12
编程技术问答社区
2路联动缓存寻址需要多少位?
下面的问题使我感到困惑,因为它与我看到的其他示例并不相似. 对于128个字节内存和32个字节2-Way Set sec socdistiate sect-back,写入数据缓存,带有4个字节块和LRU(最不最近使用的)替换策略,显示块偏移的内存分解,设置索引和标签字段.每个字段需要多少位? 我总共提出了7位.在这7位中,块偏移需要2位,设置索引需要2位,标签需要3位.这是正确的吗? 解决方案 首先让我们做一些数学: 您需要7位来解决记忆的128个字节. 缓存具有32个字节,每个块都有4个字节.因此,您的缓存可以容纳32 bytes / 4 bytes_per_line线路产生8行.由于缓存是2向组合的关联,每个块可以使用每组的两行中的任何一个.因此,您有4套2行. 因此: 您需要2位来解决块中的给定偏移量 您需要2位来解决给定集 其余3位用于标签 每个地址的编码: tag(3 bits) | set(2 bits) | offs
24 2023-04-12
编程技术问答社区
内存的地址和寄存器的地址是如何连接的? (AddrConstant MIPS指令)
在我的计算机组织课程中,我遇到了这些基本的MIPS说明: lw $to, AddrConstant4($s1) //&t0 = constant 4 add $s3, $s3, St0 //$s3 = $s3 + $t0 ($t0 == 4) 我的老师说$s1是一个寄存器地址,常数4存储在内存中. 内存地址和寄存器地址似乎在我眼中断开了连接. 我想问计算机如何从$s1的寄存器头址到达内存地址 或如何连接存储器的地址? 解决方案 lw $t, offset($s)被编码为 1000 11ss ssst tttt iiii iiii iiii iiii 其中100011是opcode,sssss是基本地址寄存器的数量,ttttt是目标寄存器的数量,iiiiiiiiiiiiiiii是立即签名的偏移. 在lw $t0, 4($s1)的情况下是: 1000 1110 0010 1000 0000 0000 0000
16 2023-04-12
编程技术问答社区
MIPS中是否存在执行-存储数据的危险?
在带有管道和转发的MIPS架构上: add $s0, $t1, $t2 sw $s0, 0($sp) 添加指令将在步骤3(执行操作)中准备好结果,但是我认为SW指令需要在步骤2(指令解码和注册读取)的结果. 大卫·A·帕特森(David A. lw $t1, 0($t0) lw $t2, 4($t0) add $t3, $t1,$t2 sw $t3, 12($t0) lw $t4, 8($01) add $t5, $t1,$t4 sw $t5, 16($t0) 解决方案: lw $t1, 0($t0) lw $t2, 4($t1) lw $t4, 8($01) add $t3, $t1,$t2 sw $t3, 12($t0) add $t5, $t1,$t4 sw $t5, 16($t0) 在解决方案中,它正确识别了负载使用危险并相应地重新安排代码,但是是否存在执行店里危害? 解决方案 让我们考虑一个激活转发的MIP. 我认为在
4 2023-04-12
编程技术问答社区
在一个6级标量或超标量的MIPS中,有多少条指令需要在预测失误时被杀死?
我正在使用6个阶段的管道工作:F D I X0 X1 W.我被问及当分支机构失误发生时需要杀死多少个说明. 我提出了4.我认为这是因为分支机构在X1中发生,我们需要杀死分支后的所有指示.在管道图中,看起来需要杀死四个在流过管道过程中的指令.那是对的吗? ,如果管道是三个宽的超尺度,我还被问到需要杀死多少人.我不确定这个.我认为这是12个,因为您可以一次获取3个说明.这是正确的吗? 解决方案 杀死分支机构之后的所有说明 如果这是真正的mips,则不是. MIPS有一个这足以完全隐藏经典MIPS I(r2000)上的1个分支潜伏期,该分支潜伏期(R2000)使用标量如果您的管道已精心设计,则您希望它在X0之后解析分支,因为MIPS ISA已经限制以使ALU轻松制定低延迟分支的决策.但是显然,您的管道没有被优化,分支机构的决策直到X1结束时才准备好,击败了使其运行MIPS代码而不是RISC-V或其他RISC指令集的目的. 我已经提出了4.我认为这是因为分支机
0 2023-04-12
编程技术问答社区
如何在icarus verilog中包含文件?
我知道基本`include" filename.v"命令.但是,我试图在另一个文件夹中包含一个模块.现在,该模块还包括同一文件夹中存在的其他模块.但是,当我尝试在最高级别上运行模块时,我会遇到错误. C:\Users\Dell\Desktop\MIPS>iverilog mips.v ./IF/stage_if.v:2: Include file instruction_memory_if.v not found No top level modules, and no -s option. 在这里,我正在尝试制作一个MIPS处理器,该处理器包含在" mips.v"中.该文件的第一个语句是"`ixplus'ifly/stage_if.v'.在if文件夹中,我在stage_if.v中包含了许多文件,其中一个是" contermition_memory_if.v.v".下面.是目录级别图. -IF instruction_memory_if.v stage_if.v
6 2023-04-12
编程技术问答社区