计算机组成原理课程设计指导书2015秋课件.docx

计算机组成原理课程设计指导书2015秋课件.docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机组成原理课程设计指导书2015秋课件

课程设计实验 实验目的 首先利用MINISYS中的MIPS指令编写一个小程序; 将简单模型机和小程序一起加载到N4主板上; 能够正确执行编译后的程序,并观察相关的程序。 实验设备 PC机一台,Digilent Nexys 4TM开发板,Xilinx Vivado开发套件,MINISYS汇编器。 实验原理 MINISYS原型结构 MINISYS采用32位MIPS指令中最常用的31条指令,其寄存器组,指令格式等均采用MIPS指令系统相同的格式。共有32个32位寄存器,32位定长格式指令,5种寻址方式。 MINISYS寄存器组 寄存器名寄存器号约定用途$zero0常数0,该寄存器永远只返回0。$at1用做汇编器的暂时变量。$v0~$v12~3用来存放一个子程序(函数)的非浮点运算的结果或返回值。$a0~$a34~7存放子程序(函数)调用时的非浮点参数。$t0~$t78~15暂时变量,子程序(函数)使用时不保存这些寄存器的值,因此调用后它们的值会被破坏。$s0~$s716~238个子程序用寄存器。子程序(函数)必须在返回之前恢复这些寄存器的值以保证其没有变化。$t8~$t924~25暂时变量,子程序(函数)使用时不保存这些寄存器的值,因此调用后它们的值会被破坏。$k0~$k126~27为中断/异常处理保留。由操作系统的异常或中断处理程序使用,不恢复原来的值。$gp28全局指针。某些运行时系统用来为Static或Extern变量提供简单的访问方式。$sp29堆栈指针,对它的调整必须显式的通过指令来实现,硬件不支持堆栈指针的调整。$s8/$fp30第9个子程序用寄存器变量,子程序用它做堆栈帧指针。$ra31存放调用子程序(函数)时的返回地址。 MINISYS指令的寻址方式 立即数寻址 指令中第3操作数可使用16位二进制立即数 寄存器寻址 操作数存放在寄存器中,指令里放的是寄存器号 变址寻址 操作数存放在数据存储器中,其有效地址由两部分组成,基地址放在一个寄存器中,偏移部分为一个16位的立即数 PC相对寻址 操作数是下一条指令的PC值(PC+4)加上一个16位偏移量地址左移两位的值 伪直接寻址 26位偏移地址+PC高4位?30位字地址(MINISYS中直接用26位偏移地址左移两位) MINISYS端口地址分配表 接口部件首地址数码管0FFFFFC00H4×4键盘(Pmod)0FFFFFC10H定时/计数器0FFFFFC20H脉冲宽度调制器0FFFFFC30H异步串行口0FFFFFC40H看门狗0FFFFFC50HLED0FFFFFC60H拨码开关0FFFFFC70HMINISYS汇编器使用方法 汇编器支持31条指令,采用.asm源文件输入,同时输出结果可以由Xilinx BlockRAM IP核直接加载; 支持4KB, 8KB, 16KB, 32KB, 64KB和128KB存储器。 编译器容许打开多个文档进行编辑,汇编器会选择当前激活的文档进行编译。 支持关键词、数字及注释等的语法高亮,并且可以访问中文路径及添加中文注释(Unicode编码)。 用户还可以进行相关的查找和替换等操作。 MINISYS单周期数据通路 MINISYS汇编程序设计 汇编语句格式 [标号:] 指令助记符 第1操作数 [, 第2操作数 [, 第3操作数]] [# 注释] [ ]中的内容为可选项 标号可以是以英文字母开头的字母-数字串,可以由字母、数字、下划线,“$”和“.”组成,长度不超过8个字符。注意不要和保留字重名。 标号和指令助记符都不区分字母的大小写 汇编代码是以行为单位的???不支持一行内有多条指令 “#”到行末的是注释部分,但要注意,“#”不要出现在一行的最左列,因为最左列的“#”表示要启用C预编译器 伪指令 数据段定义伪指令 .data [addr] 定义数据段,程序的变量需要在该伪指令下定义。汇编程序应分配和初始化变量的存储空间。如果定义了addr,则该数据段从这个addr地址开始。例: .data # 数据段开始 buf: .word 128,434,174559,7 .data 0arra: .word 20,70,-15,67 数据定义伪指令 [变量名:] 数据类型 初始值[,初始值[,初始值……]] 变量名是以字母开头的字母数字串,字母包括‘A’~‘Z’26个大写字母和‘a’~‘z’26个小写字母,数字包括‘0’~‘9’,字母大小写不作区分。 类型之后是数据定义的初始值列表,两个数据之间用西文逗号隔开。 数据可以是十六进制

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档