收藏 分享(赏)

基于ARM体系的虚拟机的构架实现 ——ARM CPU 的模拟.doc

上传人:wo7103235 文档编号:6250493 上传时间:2019-04-03 格式:DOC 页数:38 大小:650KB
下载 相关 举报
基于ARM体系的虚拟机的构架实现 ——ARM CPU 的模拟.doc_第1页
第1页 / 共38页
基于ARM体系的虚拟机的构架实现 ——ARM CPU 的模拟.doc_第2页
第2页 / 共38页
基于ARM体系的虚拟机的构架实现 ——ARM CPU 的模拟.doc_第3页
第3页 / 共38页
基于ARM体系的虚拟机的构架实现 ——ARM CPU 的模拟.doc_第4页
第4页 / 共38页
基于ARM体系的虚拟机的构架实现 ——ARM CPU 的模拟.doc_第5页
第5页 / 共38页
点击查看更多>>
资源描述

1、本科毕业论文(科研训练、毕业设计)题 目:基于 ARM 体系的虚拟机的构架实现ARM CPU 的模拟姓 名:学 院:软件学院系:专 业:软件工程年 级:学 号:指导教师(校内): 职称: 年 月I【摘要】IBM 早在 1960 年就认识到虚拟化技术的重要性, 于是开发了型号为 Model 67 的 System/360 主机. Model 67 主机通过虚拟机监视器(VMM, Virtual Machine Monitor)虚拟所有的硬件接口. 在早期的计算中, 操作系统被称做Supervisor. 能够运行在其它操作系统之上的操作系统被称做 hypervisor(名称首次出现在 1970 年

2、).随着时代的发展,嵌入式开发应用已经深入各个领域,前景十分看好。目前,嵌入式开发方式都以实际硬件为主,由于代价较高,不利于学习和开发调试,使得嵌入式开发门槛较高,难以普及。虚拟机是一项应用广泛的技术,它也早已在嵌入式开发中得到大量的应用。在嵌入式开发中,很多时候,我们只需要在虚拟机中调试我们的程序,就可以让程序很好地移植到实际硬件平台上执行。ARM 系列 CPU 是目前最成功和最广泛地应用于嵌入式的 CPU 系列。众所周知的 GBA 就是 ARM 体系的产品实例。我们的目标是实现一个基础的 ARM 体系的虚拟机。关键字:ARM;指令;译码;流水线;寻址IIAbstractThe destin

3、ation of this article is to design a virtual machine based on ARM architecture. IBM corp. had recognized the importance of virtualization technology since 1960. So they developed the Model67 System/360 host machine. Model67 host machine simulates all hardware I/O ports via Virtual Machine Monitor(VM

4、M). In the early computations, operation system is called Supervisor. And the system which runs above other operation systems is called Hypervisor(First called since 1970). As time goes on, embedded system development and application had gone deep into every field. The foreground is quite bullish. N

5、owadays, most embedded developing style follows the real-hardware-developing pattern. Since the cost of such development is very high. And the pattern is not easy to debug and for beginner to learn. The embedded development requires high ability and is hard to gain ground. Virtual Machine is a widel

6、y applied technology. It had been widely used on many embedded development fields. Follow the VM-developing pattern, we can debug our programs on VMs and then let them run on real hardware. ARM series CPU is one of the most successful CPU standards. For example, the well known GBA products. Our dest

7、ination of us is to realize a simple ARM Virtual Machine.Keywords: ARM; instruction; decode; pipeline; addressingIII目 录第一章 引言 -1第二章 总体设计 -42.1 ARM CPU 寄存器组成 -42.2 ARM 指令与流水线简述 -42.3 软件模拟 ARM CPU 指令集 -52.4 指令解析模块设计模式 -6第三章 详细设计 -83.1 ARM CPU 的逻辑结构 -83.2 处理器模式 -83.3 ARM CPU 寄存器组织 -93.4 ARM CPU 指令 -123

8、.5 寻址方式 -15第四章 系统实现 -174.1 构造 CPU 状态 -174.2 映射译码函数 -184.3 寻址方式的实现 -184.4 构造指令状态 -244.5 整合流程 -254.6 运行测试 -27第五章 结束语 -30致 谢 -31参考文献 -32IVContentsChapter 1 Instruction-1Chapter 2 Overall design-42.1 ARM CPU registers-42.2 ARM instructions and pipeline-42.3 Software emulated ARM CPU instruction set-52.4

9、 Instruction parsing design pattern-6Chapter 3 Detailed design-83.1 The logical structure ARM CPU-83.2 CPU modes -83.3 ARM CPU registers-93.4 ARM CPU instruction set-123.5 Addressing-15Chapter 4 System realization-174.1 Construct the CPU status-174.2 Mapping the decode function-184.3 The realization

10、 of addressing -184.4 Construct the instruction status -244.5Compound all together-254.6 Run and test-27Chapter 5 Summary-30Acknowledgement-31References-321第一章 引言所谓虚拟机软件,是一种以原有的操作系统为基础,在宿主机上使用额外的硬盘空间通过软件级的模拟, (提供一组标准的 API 和可选的实时编译器,仿真一个标准的 CPU 及操作系统的 API 集,虚拟机从其自定义的 API 到操作系统 API 之间进行“翻译” )创建一个或多个的运

11、行有单独互不干扰的操作系统的虚拟计算机,并可将其连成一个网络的软件。“虚拟化”是一个软件层,能够将软件与硬件隔离,将所有可用的计算和存储资源以资源池的方式组成一个单一的整合视图,通过提供虚拟功能,将资源看作一个单一公共的平台,最终资源池就像我们日常生活中的水和电一样,成为企业信息系统中的“公用设施” (Utility Computing) 。其做为虚拟机的扩展技术。虚拟化并不是一个新技术,早在 60/70 年代,IBM 就已经在 360/67,370 等硬件体系实现上虚拟化。虚拟化通过 VMM(Virtual Machine Monitor)把一个硬件虚拟成多个硬件(VM,Virtual Ma

12、chine),各 VM 之间可以认为是完全隔离的。这个隔离不同于各进程之间的地址空间隔离。无论是内存,设备,还是处理器等对各 VM 来讲,都被认为是自已独一套的。在 VM 上可以运行“任何”的操作系统(称为 Guest OS)而不会对其它的 VM 产生影响。它首先出现在大型主机上,现在在 Unix 服务器上也已经普及,并正在向配置英特尔公司至强处理器的服务器上蔓延。微软和 VMware 采用基于软件的方法实现“虚拟化”和分区,但英特尔公司则计划通过硬件提供对虚拟化的支持。英特尔正酝酿把两种相关的虚拟功能纳入 Pentium 、Xeon 和 Itanium 处理器,赋予这些芯片支持多重操作系统的

13、能力。就桌面型芯片而言,此功能称为Vanderpool 技术(VT) ,就服务器而言称为 Silvervale 技术(ST) 。Silvervale 和 Vanderpool 会提供界面功能,让操作系统得知例如有网络信息传入等硬件中断的情况。这些功能会随下一代 Windows 操作系统(代号“Longhorn”)推出。能够被 EMC 公司的 VMWare、微软公司未来的 VirtualPC和 VirtualServer、以及 Linux 虚拟软件使用,CPU 层面实现仿真。AMD 也会在2未来推出名为 Pacifica 的类似于 Intel Vanderpool 和 Silvervale 的自

14、有技术。对于用户来说,虚拟计算资源将带来非常明显:首先,会提高资源利用率,避免复杂的系统集成和大规模的设备占用空间,降低投资成本;其次,可以简化管理的复杂性,能对整体系统运行环境进行统一监管和动态分配,从而能够降低计算管理和运行成本;第三,可以充分利用整体平台的优势,更好地发挥系统的效能;第四,从总体上可以提高全系统的可靠性。我们的目标就是实现一个基于 ARM 体系的虚拟机。到目前为止,ARM 微处理器及技术的应用几乎已经深入到各个领域:工业控制领域:作为 32 的 RISC 架构,基于 ARM 核的微控制器芯片不但占据了高端微控制器市场的大部分市场份额,同时也逐渐向低端微控制器应用领域扩展,

15、ARM 微控制器的低功耗、高性价比,向传统的 8 位/16 位微控制器提出了挑战。 无线通讯领域:目前已有超过 85%的无线通讯设备采用了 ARM 技术, ARM 以其高性能和低成本,在该领域的地位日益巩固。 网络应用:随着宽带技术的推广,采用 ARM 技术的 ADSL 芯片正逐步获得竞争优势。此外,ARM 在语音及视频处理上行了优化,并获得广泛支持,也对 DSP 的应用领域提出了挑战。 消费类电子产品:ARM 技术在目前流行的数字音频播放器、数字机顶盒和游戏机中得到广泛采用。 成像和安全产品:现在流行的数码相机和打印机中绝大部分采用 ARM 技术。手机中的 32 位 SIM 智能卡也采用了

16、ARM 技术。除此以外,ARM 微处理器及技术还应用到许多不同的领域,并会在将来取得更加广泛的应用。 ARM 体系结构的版本指的是 ARM 对应的各种指令集。目前一共定义了 6个版本 ARM 处理器系列则是由各个厂家实现的各种实际物理 MCU 或 CPU,目前主要有 ARM7:130MIPS(MAX),TDMI 版本不支持 MMU3 ARM9:5 级整数流水线,支持 MMU ARM9E:支持 DSP,5 级整数流水线,300MIPS(MAX), ARM10E:400MIPS(MAX),支持 DSP,6 级整数流水线, SecureCore:安全支持,软内核,防扫描探测。仿真处理器,也叫做 P-

17、code(or pseudo-code)机. P-code 是一种机器语言,运行在虚拟机上而不是实际的硬件。知名的 P-code 语言在 1970 年由加州大学圣地亚哥分校的 Pascal 系统项目组开发。它可以把 Pascal 程序编译成 P-code代码, 然后在具有 P-code 功能的虚拟机上运行。 P-code 程序具有高度可移植性, 能够运行在任何具有 P-code 功能的虚拟机上。1960 年的 BCPL 语言(基本组合程序设计语言, Basic Combined Programming Language)也使用了同样的概念, 它是 C 语言的前身。编译器首先把 BCPL 代码编

18、译成一个中间机器代码:O-code。然后,O-code 被编译成目标机器代码. P-code 模型已被广泛使用到各种编译器当中,从而为编译器移植到新的主机架构提供了复杂性.(通过一个中间语言分成前端和后端)。我们所采用的仿真器版本是 ARM7,实例软件以 GBA 模拟器为例。ARM7 系列微处理器为低功耗的 32 位 RISC 处理器,最适合用于对价位和功耗要求较高的消费类应用。 ARM7 微处理器系列具有如下特点: 具有嵌入式 ICE RT 逻辑,调试开发方便。 极低的功耗,适合对功耗要求较高的应用,如便携式产品。 能够提供 0.9MIPS/MHz 的三级流水线结构。 代码密度高并兼容 16

19、 位的 Thumb 指令集。对操作系统的支持广泛,包括 Windows CE、Linux、Palm OS 等。指令系统与 ARM9 系列、 ARM9E 系列和 ARM10E 系列兼容,便于用户的产品升级换代。主频最高可达 130MIPS ,高速的运算处理能力能胜任绝大多数的复杂应用。ARM7 系列微处理器的主要应用领域为:工业控制、Internet 设备、网络和调制解调器设备、移动电话等多种多媒体和嵌入式应用。ARM7 系列微处理器包括如下几种类型的核:ARM7TDMI、ARM7TDMI-S、ARM720T、 ARM7EJ。其中,ARM7TMDI 是目前使用最广泛的 32 位嵌入式 RISC

20、处理器,属低端 ARM 处理器核。本文主要介绍 ARM7 CPU 指令的模拟以及部分 CPU 结构剖析。4第二章 总体设计2.1 ARM CPU寄存器组成ARM CPU 有 37 个内部寄存器。分为 8 个全局通用寄存器,5 个用户(系统)寄存器,5 个快速中断寄存器(FIR),一个程序读数器,6 套堆栈指针、返回地址寄存器共 12 个寄存器,6 个程序状态字。模拟 ARM CPU 的执行相当于解释执行 ARM 指令集,并改变虚拟 CPU 的寄存器状态。2.2 ARM 指令与流水线简述ARM 体系 CPU 逻辑上分为取指单元、译码单元和执行单元。CPU 运行阶段为三级流水线并行模式。CPU 向

21、前预取两条指令,译码单元对前一条指令进行译码,执行单元执行当前指令。本系统也将 CPU 分成这三个逻辑阶段,取指阶段从内存前向预取第二条指令,这个阶段很简单,只是从内存读出一条指令放在指令队列。译码阶段从指令队列取出一条指令进行部分译码,这个阶段也不复杂。执行阶段须要对整条指令解析,选择执行微指令。ARMv7 包括如下类型指令: 跳转指令 数据处理指令 状态寄存器转移指令 存储指令 协处理器指令 异常产生指令 每一类指令各自共享一些只有微小差别的微指令集合,通过这些微指令组合成每条指令的功能。设计译码指令时,要特别注意每条指令的细节动作,这些动作反应在微指令的功能上。设计微指令时,既要使微指令

22、十分精确地完成它该做的事,又不能使微指令译码嵌套太多,以免影响解析执行的速度。需要5综合权衡各种译码方法,选出从代码量、可维护性与执行效率都可以接受的一种。本文叙述方法为按位段映射指令译码方式。ARM 系列的 CPU 是精简指令集 CPU,基本上,每条指令都由条件码、操作码、(移位)寄存器和(移位)立即数组成。存取内存由专用的指令完成。ARM 指令有 32 位指令和 16 位 Thumb 指令两种指令格式。指令地址分别为 32 位对齐和 Thumb 指令的 16 位对齐。由于 Thumb 指令并非本文设计的重点,本文只针对 32 位指令展开讨论。所以,下文如无特别说明,指令模式均指正常格式(3

23、2 位 ARM 指令模式)。图 2.2 部分 ARM 指令格式执行当前指令译码下一条指令预取前向第二条指令图 2.1 三级流水线处理模式62.3 软件模拟 ARM CPU指令集要在现有的软硬件平台上实现另一硬件平台的虚拟机,最理想的虚拟技术也须要几条以上的指令来模拟一条目标平台的指令。因此,效率对于虚拟机的来就显得格外重要。如何考虑虚拟机的执行效率以用可移植性、可维护性,是需要权衡折衷的问题。例如一条加法指令,要考虑计算结果的溢出、进位、是否为零以及符号等问题,如果用原平台无关的代码编写,则在保证可移植的同时会大大降低效率,若利用原平台的 CPU 来完成同样的加法运算,并把计算结果和标志复制到

24、目标平台的 CPU 状态字里,则移植性大大降低,但执行效率却提高了不少。一种折衷的方案是,把后一种方法的代码集中在一个平台相关的文件,以宏或内联函数的形式被调用。这样,在移植到另一平台时只须替换掉平台相关的代码即可。另外是指令处理函数的映射问题,可以把一条指令解析成几条微指令来执行,解析程序结构化越强,源程序结构就越简洁容易理解,但函数嵌套层次太多导致程序执行效率低。另一种是位段映射,可以大大减少映射层数,但会使代码不容易理解。虚拟机是一类有特殊要求的软件,如何确定这类软件的设计规范要经过深思熟虑。72.4 指令解析模块设计模式其中主程序循环从协处理器模块取出指令,把指令传送给指令处理过程,经

25、过映射、译码找出相应的指令处理过程,进而改变 CPU 状态集(包括通用寄存器与状态寄存器等),必要时访问协处理器模块,改变协处理器的内部寄存器状态。由于 ARM 体系采用内存 IO 映射方式,故无须处理特殊 IO 类指令。CPU 状态集(寄存器、状态字等)协处理器模块主程序循环映射、解析执行 ARM指令内存映射 I/O 设备图 2.3 译码执行流程8第三章 详细设计本章详细介绍 ARM CPU 结构的 CPU 软件模拟设计思想。3.1 ARM CPU的逻辑结构 ARM CPU 的逻辑结构由三部分组成,即取指令单元、指令译码单元和执行单元。取指令单元负责从内存取出指令,存放在指令缓冲队列,一般预

26、取两条指令。当执行到跳转指令时,指令队列被清空,预取的指令失效。 译码单元从指令队列中取出一条指令对其进行译码,分析须要执行哪些微指令,要用到哪些寄存器等。当执行到跳转指令时,当前已译码的指令失效。 执行单元负责执行已被译码的当前指令,这部分要做最多的工作,包括改变寄存器值、存取内存等。3.2 处理器模式ARMv7 CPU 有 7 种处理模式,分别为用户模式、快速中断模式、普通中断模式、监督模式、非法访问模式、未定义模式和系统模式。表 3.1 处理器工作模式处理模式 说明User usr 普通程序执行模式FIQ fiq 快速中断模式,支持高速数据传输通道IRQ irq 通常中断处理模式Supe

27、rvisor svc 操作系统保护模式Abort abt 用于(虚拟)内存保护Undefined und 软中断或协处理器触发中断9System sys 操作系统特权模式模式可以通过软件改变,也可以通过外部中断或异常改变。大多数应用程序执行于用户模式,在这种模式下,不能改变执行模式或访问某些被保护的系统资源,除非触发异常。除了用户模式之外,其它模式都是特权模式,特权模式下可以自由访问系统资源。除了用户模式和系统模式之处,其它五种模式亦称为异常模式。系统模式仅在 ARMv4 以后版本才支持,这种模式使用与用户模式一样的寄存器,以免与异常处理用的寄存器冲突。3.3 ARM CPU寄存器组织ARM

28、寄存器分为 31 个通用寄存器和 6 个程序状态字。共 37 个内部寄存器。通用寄存器包括 R0R15,可以分为三类: 未分组寄存器 R0R7 分组寄存器 R8R14 程序计数器 PC(R15)未分组寄存器 R0R7:在所有的运行模式下,未分组寄存器都指向同一个物理寄存器,他们未被系统用作特殊的用途, 因此,在中断或异常处理进行运行模式转换时,由于不同的处理器运行模式均使用相同的物理寄存器,可能会造成寄存器中数据的破坏,这一点在进行程序设计时应引起注意。分组寄存器 R8R14:对于分组寄存器,他们每一次所访问的物理寄存器与处理器当前的运行模式有关。对于 R8R12 来说,每个寄存器对应两个不同

29、的物理寄存器,当使用fiq 模式时,访问寄存器 R8_fiqR12_fiq;当使用除 fiq 模式以外的其他模式时,访问寄存器 R8_usrR12_usr。 对于 R13、R14 来说,每个寄存器对应 6个不同的物理寄存器,其中的一个是用户模式与系统模式共用,另外 5 个物理10寄存器对应于其他 5 种不同的运行模式。采用以下的记号来区分不同的物理寄存器: R13_ R14_其中,mode 为以下几种模式之一:usr、fiq、irq、svc、abt、und。寄存器 R13 在 ARM 指令中常用作堆栈指针,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。而在 Thumb 指令集中,

30、某些指令强制性的要求使用 R13 作为堆栈指针。由于处理器的每种运行模式均有自己独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种模式下的 R13,使其指向该运行模式的栈空间,这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入 R13 所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行。R14 也称作子程序连接寄存器(Subroutine Link Register)或连接寄存器 LR。当执行BL 子程序调用指令时,R14 中得到 R15(程序计数器 PC)的备份。其他情况下,R14 用作通用寄存器。与之类似

31、,当发生中断或异常时,对应的分组寄存器R14_svc、R14_irq、R14_fiq、R14_abt 和 R14_und 用来保存 R15 的返回值。举例来说,在 irq 模式下,可以用到的寄存器组为:R0 R1 R2 R3 R4 R5 R6 R7 R8_irq R9_irq R10_irqR11_irq R12_irq R13_irq R14_irq R15 CPSR SPSR_irq寄存器 R14 常用在如下的情况:在每一种运行模式下,都可用 R14 保存子程序的返回地址,当用 BL 或 BLX指令调用子程序时,将 PC 的当前值拷贝给 R14,执行完子程序后,又将 R14 的值拷贝回 P

32、C,即可完成子程序的调用返回:BL NEXT ;跳转到子程序 NEXT 处执行NEXT11MOV PC, LR ;从子程序返回寄存器 R15 用作程序计数器(PC)。在 ARM 状态下,位1:0为 0,位31:2用于保存 PC;在 Thumb 状态下,位0为 0,位31:1用于保存 PC;虽然可以用作通用寄存器,但是有一些指令在使用 R15 时有一些特殊限制,若不注意,执行的结果将是不可预料的。在 ARM 状态下,PC 的 0 和 1 位是 0,在 Thumb 状态下,PC 的 0 位是 0。R15 虽然也可用作通用寄存器,但一般不这么使用,因为对 R15 的使用有一些特殊的限制,当违反了这些

33、限制时,程序的执行结果是未知的。由于 ARM 体系结构采用了多级流水线技术,对于 ARM 指令集而言,PC 总是指向当前指令的下两条指令的地址,即 PC 的值为当前指令的地址值加 8 个字节。在 ARM 状态下,任一时刻可以访问以上所讨论的 16 个通用寄存器和一到两个状态寄存器。在非用户模式(特权模式)下,则可访问到特定模式分组寄存器。寄存器 R16 用作 CPSR(Current Program Status Register,当前程序状态寄存器 ),CPSR 可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。每一种运行模式下又都

34、有一个专用的物理状态寄存器,称为 SPSR(Saved Program Status Register,备份的程序状态寄存器),当异常发生时,SPSR 用于保存 CPSR 的当前值,从异常退出时则可由 SPSR 来恢复 CPSR。图 3.1 状态寄存器的标志位12由于用户模式和系统模式不属于异常模式,他们没有 SPSR,当在这两种模式下访问 SPSR,结果是未知的。3.4 ARM CPU指令3.4.1 指令分类与结构ARM 微处理器的指令集是加载/存储型的,也即指令集公能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来完成。ARM 微处理器

35、的指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令和异常产生指令六大类,具体的指令及功能如下表:图 3.2 ARM CPU 寄存器组织13表 3.2 指令集助记符 指令功能描述ADC 带进位加法ADD 加法指令AND 逻辑与指令B 跳转指令BIC 位清零指令BL 带返回的跳转指令BLX 带返回和状态切换的跳转指令BX 带状态切换的跳转指令CDP 协处理器数据操作指令CMN 比较反指令CMP 比较指令EOR 异或指令LDC 存储器到协处理器的数据传输指令LDM 加载多个寄存器指令LDR 存储器到寄存器的数据传输指令MCR 从 ARM 寄存器到协

36、处理器寄存器的数据传输指令MLA 乘加运算指令MOV 数据传送指令MRC 从协处理器寄存器到 ARM 寄存器的数据传输指令MRS 传送 CPSR 或 SPSR 的内容到通用寄存器指令MSR 传送通用寄存器到 CPSR 或 SPSR 的指令MUL 32 位乘法指令MLA 32 位乘加指令MVN 数据取反传送指令ORR 逻辑或指令14RSB 逆向减法指令RSC 带借位的逆向减法指令SBC 带借位减法指令STC 协处理器寄存器写入存储器指令STM 批量内存字写入指令STR 寄存器到存储器的数据传输指令SUB 减法指令SWI 软件中断指令SWP 交换指令TEQ 相等测试指令TST 位测试指令3.4.2

37、 指令的条件域当指令工作在 ARM 状态时,几乎所有的指令均根据 CPSR 中条件码的状态和指令的条件域有条件的执行。当指令的执行条件满足时,指令被执行,否则指令被忽略。每一条 ARM 指令包括 4 位的条件码,位于指令的最高 4 位31:28。条件码共有 16 种,每种条件码可用两个字符表示,这两个字符可以添加在指令助记符的后面和指令同时使用。在 16 种条件标志码中,只有 15 种可以使用,第 16 种(1111)为系统保留,暂时不能使用。表 3.3 条件码条件码 助记符后缀 标志 含义0000 EQ Z 置位 相等0001 NE Z 清零 不相等0010 CS C 置位 无符号数大于或等

38、于0011 CC C 清零 无符号数小于0100 MI N 置位 负数0101 PL N 清零 非负数150110 VS V 置位 溢出0111 VC V 清零 未溢出1000 HI C 置位 Z 清零 无符号数大于1001 LS C 清零 Z 置位 无符号数小于或等于1010 GE N 等于 V 带符号数大于或等于1011 LT N 不等于 V 带符号数小于1100 GT Z 清零且 N 等于 V 带符号数大于1101 LE Z 置位或 N 不等于V带符号数小于或等于0110 AL 忽略 无条件执行3.5 寻址方式所谓寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式。目前 AR

39、M 指令系统支持如下几种常见的寻址方式。 立即寻址 操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数。 寄存器寻址 利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。 寄存器间接寻址 以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。 基址变指寻址 将寄存器的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址附近的地址单元。 多寄存器寻址 一条指令可以完成多个寄存器值的传送。这种寻址方式可以用一条指令完成传送最多 16 个通用寄存器的值。 相对寻址 以程

40、序计数器 PC 的当前值作为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。16 堆栈寻址 堆栈是一种数据结构,按先进后出的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。对指令进行程序译码时,主要考虑指令本身的逻辑一致性和寻址多样性。译码程序首先调用各种寻址方式的微指令程序,分析出操作数,再根据操作数执行指令操作。17第四章 系统实现我的任务是模拟 ARM CPU 指令译码与执行,由于 ARM 指令是 32 位的,所以译码起来相对容易。ARM CPU 指令并不多,但寻址方式比较复杂。在译码时,要注意把寻址部分与指行部分尽量分开。4.

41、1 构造 CPU状态CPU 状态用一个拥有 37 个成员的组结构体表示,每个成员表示一个寄存器。寄存器分多个组态,由寄存器组指针指定。表 4.1 寄存器组织R0R1R2R3R4R5R6R7R8_usr R8_fiqR9_usr R9_fiqR10_usr R10_fiqR11_usr R11_fiqR12_usr R12_fiqR13_usr R13_fiq R13_irq R13_svc R13_abt R13_undR14_usr R14_fiq R13_irq R14_svc R14_abt R14_und18R15CSPR SPSR_fiq SPSR_irq SPSR_svc SPSR

42、_abt SPSR_und比如,工作于用户态或系统态的 CPU,所用的寄存器组为:R0 R1 R2 R3 R4 R5 R6 R7R8_usr R9_usr R10_usr R11_usr R12_usr R13_usr R14_usr R15 CPSR而工作于快速中断态的 CPU,所用的寄存器组为:R0 R1 R2 R3 R4 R5 R6 R7 R8_fiq R9_fiq R10_fiqR11_fiq R12_fiq R13_fiq R14_fiq R15 CPSR SPSR_fiq注意,在用户模式和系统模式下的 CPU,SPSR 是无效的,使用它会产生不可预测的结果。4.2 映射译码函数取指令码的一个位段作为映射索引,利用所映射的函数执行指令。映射位段取27:20共 8

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报