实验4寻址方式和指令系统方案.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文档。上传文档
查看更多
. . 实验名称:寻址方式和指令系统 姓名: 学号: 实验班号: 机器号: 实验目的 了解MSP430FG2xxx汇编格式指令和常用寻址方式; 了解C语言函数调用过程; 通过反汇编C程序代码.掌握研究计算机底层问题的基本方法。 实验任务 汇编格式指令和寻址方式的学习 L4_instruction.c 源程序见程序清单.建立 C 项目.进入 DEBUG 状态.点击 view/disassembly.在反汇编窗口得到 L4_instruction.c 对应的汇编格式指令程序代码。阅读该程序的汇编格式代码.思考: 1) 在反汇编的 main( )函数中.分析代码里用到了哪些指令?哪几种寻址方式? 答:代码里使用了MOV.AND.BIS.XOR.CALL.JMP指令.使用了立即数寻址、寄存器寻址、绝对地址寻址、相对地址寻址这几种寻址方式。 2) 修改 L4_ instruction.C.将变量 j 定义为全局变量.运行程序.观察实验现象.与 j 是局部变量时有什么不同.分析为什么? 答:j的值由存储在寄存器R15中变为了存储在内存(RAM)中.寻址方式也由寄存器寻址变为绝对地址寻址。因为寄存器中存储的变量的生命周期较短.故寄存器适合存储像局部变量这样的短生命周期变量.而内存中存储的变量生命周期较长.故内存适合存储像全局变量这样的长生命周期的变量。 3) 修改 L4_ instruction.C.将变量 i 的类型从 unsigned int 类型.改为 unsigned long 类型.反 汇编看看 delay 函数的代码发生了什么变化? 答:函数的代码中i由仅由一个寄存器(R12)存储变为了由两个寄存器(R12.R13)存储.使i能取到更大的值.与其有关的运算也发生了变化.变得更加复杂了.j能取的值的范围不变.但却多占用了一个寄存器R14来使其能够与占用两个寄存器的i进行比较.其中R14用于存储j 的值.而R15的存储值一直为0。 改变前 改变后 4) 在 3)的基础上.将变量 j 的类型从 unsigned int 类型.改为 unsigned long 类型.反汇编看看delay 函数的代码又发生了什么变化? 答:函数的代码中R15的存储值不再一直为0.j由实际上仅由一个寄存器(R14)存储变为了由两个寄存器(R14.R15)存储.使j也能取到更大的值.与其有关的运算也发生了变化.变得更加复杂了。 改变后 5) (提高) 若将 L4_ instruction.C 中的 delay 函数改写为下面方式.请反汇编比较不同的实现。 (1) void delay( unsigned int i ) //延时函数 { unsigned int j; for (j=i; j0; j--); } (2) void delay( unsigned int i ) //延时函数 { while(i--); } 答: 中程序在执行循环体的时候先将寄存器R12中存储的值减一.再判断R12所存值的正负.若值为正.则程序回到将R12所存值减一处.进行下一次循环;若值不为正.循环结束。 中程序在执行循环体的时候先将寄存器R12中存储的值存入寄存器R15中.再将寄存器R15中存储的值存入寄存器R12中.随后再判断R15所存值的正负.若值为正.则程序回到将寄存器R12中存储的值存入寄存器R15中处.进行下一次循环;若值不为正.循环结束。 6) (提高) 点击图标 .复位程序。用单步执行命令 F11 从 main 函数入口重新执行程序.在 main 函数调用 delay 函数处.用 View/Register 和 View/Memory(或用 View/Stack) 查看并记录在跟踪调用 delay 函数时 call #delay 指令前后、以及从 delay 函数返回 main 函数( ret 指令) 前后堆栈指针寄存器 SP、堆栈存储区域的内容变化.同时关注这些内容与 PC 指针寄存器、 程序代码存放位置(地址)的关系。 答: 在call #delay 执行前: SP=0x03FE 堆栈:0x03FE 0x08 0x03FF 0xC0 在call #delay 执行后.ret执行前: SP=0x03FC 堆栈:0x03FC 0x38 0x03FD 0xC0 0x03FE 0x08 0x03FF 0xC0 在ret执行后: SP=0x03FE

文档评论(0)

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

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

1亿VIP精品文档

相关文档