实验1_ARM汇编指令基础.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验1_ARM汇编指令基础

实验一 ARM汇编指令基础 学号: 姓名: 一、实验目的 初步学会使用Embest IDE for ARM 开发环境及ARM软件模拟器; 通过实验掌握简单ARM汇编指令的使用方法。 二、实验原理 ARM处理器共有37个寄存器: 31个通用寄存器,包括程序计数器(PC)。这些寄存器都是32位。 6个状态寄存器。这些寄存器也是32位,但只使用了其中的12位。 ARM通用寄存器 通用寄存器(R0~R15)可分为3类。 不分组寄存器R0~R7 R0~R7是不分组寄存器。在所有处理器模式下,它们都能被访问。它们是真正的通用寄存器,没有体系结构所隐含的特殊用途。 分组寄存器R8~R14 R8~R14是分组寄存器。被访问的物理寄存器取决于当前的处理器模式。若要访问特定的物理寄存器而不依赖当前的处理器模式,则要使用规定的名字。 寄存器R8~R12各有两组物理寄存器:一组为FIQ模式,另一组为除了FIQ模式以外的所有模式。R8~R12没有任何指定的特殊用途。只是使用R8~R12来简单地处理中断。寄存器R13和寄存器R14各有6个分组的物理寄存器,1个用于用户模式和系统模式,其他5个分别用于5种异常模式。R13通常用作堆栈指针,称作SP。每种异常模式都有自己的R13。R14用作子程序链接寄存器,也称作LR。 程序计数器R15 寄存器R15用作程序计数器(PC)。 本实验中,ARM核工作在用户模式,R0~R15可用。 存储器格式 ARM体系结构可以用两种方法存储字数据,分别称为大端格式和小端格式。 大端格式 在这种格式中,字数据的高位字节存储在低地址中,而字数据的低位字节存 放在高地址中,如下所示: 高地址 31 23 22 16 15 8 7 0 字地址 8 9 10 11 8 4 5 6 7 4 0 1 2 3 0 低地址 小端格式 在这种格式中,字数据的高位字节存储在高地址中,而字数据的低位字节存 放在低地址中,如下所示: 高地址 31 23 22 16 15 8 7 0 字地址 11 10 9 8 8 7 6 5 4 4 3 2 1 0 0 低地址 3.GNU基础知识 Embest IDE集成了GNU汇编器as、编译器gcc和链接器ld。因此,编写程序要符合GNU的语法和规则。这里简单介绍几点基本知识: 程序默认入口点为“_start”,代码段默认起始地址为0x8000 常用伪操作符 .equ 为数字常量、基于寄存器的值和程序标号定义一个字符名称。 .global及.globl 声明一个符号可以被其他文件引用,相当于声明了一个全局变量。 .text 将操作符开始的代码编译到代码段或代码段子段(Subsection)。 .end 标记汇编文件的结束行。 三、实验内容 熟悉开发环境的使用并使用ldr/str,mov等指令访问寄存器或存储单元。 使用add/sub/lsl/lsr/and/orr等指令,完成基本数学/逻辑运算。 运行Embest IDE集成开发环境,将下面两段参考程序分别编辑输入,生成目标代码,设置调试模块,下载目标代码到软件仿真器。 四、实验步骤 打开memory窗口,观察地址0x8000~0x801f与地址0x1000的内容。 单步执行程序并观察和记录寄存器与memory的值变化。 结合实验内容和相关资料,观察程序运行,通过实验加深理解ARM指令的使用。 五、实验参考程序 1. 实验A参考程序: .equ x, 45 /* 定义变量x,并赋值为45*/ .equ y, 64 /* 定义变量y,并赋值为64*/ .equ stack_top, 0x1000 /* 定义栈顶0x1000*/ .global _start .text _start: /*程序代码开始标志*/ MOV sp, #stack_top MOV r0, #x /* x的值放入R0 */ STR r0, [sp] /* R0的值保存到堆栈*/ MOV r0, #y /* y的值放入R0*/ LDR r1, [sp] /* 取堆栈中的数到R1*/ ADD r0, r0, r1 STR r0,

文档评论(0)

qwd513620855 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档