好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

重要的子程序分析及其程序框图.doc

23页
  • 卖家[上传人]:ss****gk
  • 文档编号:209316696
  • 上传时间:2021-11-09
  • 文档格式:DOC
  • 文档大小:1.02MB
  • / 23 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 重要的子程序分析及其程序框图1.执行监控命令的子程序在本小节介绍几个执行监控命令的子程序,包括D E U A G T P R共计8个, 简单说明之后,给出这几个子程序的执行流程框图实现D和E命令的子程序有某些类似之 处,同样,实现U和A命令的子程序有某些类似之处,实现G、T和P命令的子程序有某些 类似Z处,R命令与上述命令的处理方法有一些差别,因此,把8个命令分成4组来说明是 合适的第1组 D命令和E命令D命令:显示一片内存区的内容D命令后若跟内存地址参数,则该值己在R15中,否则把D命令默认用的内存地址值从 DADR单元读到R15o D命令的基本功能是显示以R15为首地址的128个内存单元的内容 D命令的执行流程如图1 (a)所示实现的具体格式,第一列是4位的十六进制的内存地址, 接下来的是用十六进制表示的8个内存字的内容,最右部分是每个字高、低位字节内容的字 符编码表示,当一个字节中的编码不是可显示字符时,将其显示为一个圆点字符在 显示过程中,可以用ESC键立即结束显示,或用其他键暂停显示,再按非ESC键将继续显 Zj\ cE命令:修改一片内存区的内容E命令后若跟内存地址参数,则该值己在R15中,否则把E命令默认用的内存地址值从 EADR单元读到R15o E命令的基本功能是依次显示以R15为首地址的每一个内存单元的内 容并等待输入,可以用输入一个新的数值修改相应内存单元中的内容,若用空格符结束数值 输入,意味着接着显示并修改下一个内存单元的内容,若用回车符结束数值输入,则在完成 修改后就结束E命令的执行过程。

      E命令的执行流程如图1 (b)所示在等待输入数值时, 直接打空格键或冋车键,相应内存单元的内容将保持不变 进人命令带参数?达到否从DADR单元►取默认地址到R15驱冋巧D命令的使用地 址到DADR单元进人图1⑹D命令执行流程图1(b) E命令执行流程第2组 U命令和A命令U命令:反汇编15条机器指令U命令若跟地址参数,则该地址己在R15中,否则将U命令用的默认地址从UADR单 元读入R15U命令的功能是反汇编15条机器指令,即把一条机器指令代码翻译成对应的汇 编语句的格式,结果显示在计算机终端(或PC及仿真终端)的屏幕上,其执行流程如图2 所示实现U命令处理功能的子程序虽然较长,但实现原理并不难理解例如,遇到的指令是 二进制的0000000000101001,按照指令格式和编码的具体规定,指令的最高8位是操作码, 查指令汇总表,00000000是加法指令,汇编语句名为ADD,加法指令的最低8位是两个寄 存器的编码,其中高4位是目的寄存器DR的编号,0010为R2,低4位是源寄存器SR的编 号,1001是R9按指令格式规定,两个寄存器之间要有一个逗号,因此,对0000000000101001 指令反汇编的结果是ADD R2, R9o这一结果在显示器屏幕上更具体的格式为:指令地址指令字1指令个2 汇编语句其中的指令地址,指令字1,指令字2(可以没有),都用4位16进制数值表示,反汇编 语句要满足对汇编语句的格式要求。

      4项内容之间例如用2个空格作为符号间距假如上述 指令被保存在内存的2000h (h代表前面的2000是十六进制)单元中,贝IJ反汇编的结果和格 式是:2000 0029 ADD R2, R9 (单字指令,无指令字2)如果把对上述特例的处理过程更加一般化来展开讨论,结论是:每条机器指令8位的操作码,直接对应一个汇编语句名称(最多4个字母),可以保存在 一张表格中,用于从指令操作码查出汇编语句名(反汇编过程使用),或从汇编语句名查出指 令操作码(汇编过程使用)每条机器指令第1个字的低8位和第2个指令字(如果有的话),是指令的操作数地址字 段,指令字1的低8位可以是1或者2个4位的寄存器编码,可能是一个8位的IO端口地 址,或相对转移指令的变址偏移量offset,第2个指令字可以是一个立即数,一个直接地址, 或者长转移指令的变址偏移量offset,它们的有无和到底代表的是什么,収决于指令的操作 码,换句话说,知道了指令的操作码,就清楚了怎样去看待与处理操作数地址字段的内容 这里有个寄存器编码和寄存器名称的对应问题,例如4位二进制0000代表R0,也需要建立 一张对应表,用于从4位编码查出寄存器名(反汇编过程使用),或转换寄存器名为4位编码 (汇编过程使用)。

      其他情况下的操作数地址字段内容,通常被理解为8位或者16位的整数 数值使用,不存在类型变换问题唯一例外的一点是,相対转移指令与对应的汇编语句之间, 有一个地址计算过程,例如,在2005 ( 16进制,下同)内存单元有一条编码值为 0100000111111100的指令,反汇编操作时,查得该指令是无条件相对转移,汇编语句名为JR, 低8位的11111100是offset,是补码形式的负4,按计算公式(当前指令地址+l+offset是转 移的目标地址),则转移地址为2002,最终的反汇编结果是JR 2002注意,8位的补码与 16位的正的数值(同补码表示)相加时,8位补码的符号位要扩展到高8位上的每一位上去 A命令:单条指令汇编A命令若跟地址参数,则该地址己在R15中,否则将A命令用的默认地址从AADR单 元读入R15o A命令的执行流程如图3所示A命令把用户从键盘输入到教学计算机中的一个汇编语句翻译成对应的机器指令编码,这里说的单条指令汇编,是指对每一个汇编语句可以直接完成汇编操作,与其他汇编语句不存在彼此Z间的制约或者协调关系,因此,在这种方式下的汇编不能支持汇编伪指令和语句 标号,是屈于实用的汇编程序的一个最基本功能的子集,实现的只是在汇编语句与机器指令 之间的翻译功能。

      实现单条指令汇编的原理简介如下:如果对ADD R2, R9语句执行汇编,得到的第1个符号(标示符)是ADD,查汇编语 句名和指令操作码的表格,ADD对应的指令操作码为十六进制的00,接下来跳过空格后得 到的第2个符号(标示符)为R2,是目的操作寄存器名称,查寄存器名称和寄存器编码的表 格,R2的编码是十六进制的2,在跳过逗号后得到的第3个符号(标示符)为R9,是源操 作寄存器名称,得到的寄存器编码为十六进制的9,最后遇到的是冋车符,表明対该语句的 汇编翻译工作已经结束,故得到的最终机器指令码为十六进制的0029,即二进制的 0000000000101001,接着还要把该机器指令写到一个内存单元中去,对一个汇编语句的汇编 操作全部完成同理,如果遇到的是汇编语句JR 2002,并需要把汇编结果(机器指令) 保存到内存的2005单元,则查得指令的操作码为16进制41,指令中的offset是通过转移目 标地址(2002)减本指令地址(2005)再减1得到,是负4,即8位的补码FC,故汇编的最 终结果(指令码)为16进制41FCo在教学计算机系统中,交叉汇编程序支持某些伪指令的功能,也支持使用语句标号给出 一条指令的地址,这对设计较长的程序是非常必要的功能,此时需要通过两遍扫描整个用户 汇编源程序的方式來完成汇编操作的全过程,产生由机器指令码组成的忖标程序,还可以按 照用户的要求,产生汇编清单文件和汇编符号表。

      第3组 G命令、T命令和G命令G命令:启动执行一个用户程序G命令若跟地址参数,则将该地址值写入内存映射区中对应PC的存储单元中G命令 的功能是启动并运行一个用户程序,其执行流程如图4 (a)所示理解这个子程序执行过程,需要清楚如下的概念涉及到监控程序和用户程序两个运行环境的切换和衔接,正如在前面说到过的,教学计 算机分为监控程序运行方式和用户程序运行方式,都要求有口己的现场信息,包括16个累加 器的内容(含PC和SP),程序状态字的内容,需要保持独立,彼此不应该受到另外一个运 行方式(程序)的干扰请注意,监控程序是一个不断读入监控命令,再调用对应的子程序 实现监控命令处理功能的重复过程,程序处在一个封闭运行的环境Z中怎样才能让用户程 序投入运行过程,用户程序运行结束后,又如何再次正确地恢复监控程序的运行过程,需要 在对应G命令的子程序中加以解决,就存在一个在运行监控程序和运行用户程序之间正确的 切换和相互配合的问题简单地说,就是切换到用八程序时,必须首先保存监控程序的堆栈 指针和监控程序的断点,再把用户程序的现场信息从内存中指定的区域(由图2 A (就描令汇编)命令的执疔流程 进人图4@) G命令执行流程SCHREG进人H4 (b) SCHREG 和 SEAACII 子程序执行竈程 它们用于通过揃$北称豊 找出摘令的操柞码.或迪址寄 存料名称代找出為#略的编号MAPREG给出的17个存储字单元)恢复出来,才能进入用户程序的运行过程。

      在用户程序 结束后,必须返回监控程序的断点,恢复系统堆栈指针,还要把用户程序的现场信息保存到 内存中指定的区域(由MAPREG给出的17个存储字单元),以便在下一轮恢复运行该用户 程序时,可以从内存的这一指定的区域恢复程序的现场信息与此相联系的还有,各自要使 用自己的堆栈,就要有自己的堆栈指针,运行监控程序使用系统堆栈(初值27FEh),运行用 户程序使用用户堆栈(初值2780h)o例如,用户程序结束后,就需要恢复系统堆栈指针在G命令中的具体实现办法是:在做好全部(哪一些?)准备后,通过这个子程序中的一条LDRR R5, [R14]指令(该 指令在内存的021Ah单元),把用户程序的起始地址写入程序计数器PC中(请注意,用户不 能在自己的程序中用类似的办法修改PC的内容),则下面将直接进入用户程序的运行过程, 监控程序自然就停止了自己的运行,事实上,已经完成了 2个程序的切换可以认为,监控 程序是在要执行021 Bh单元中的指令时被打断的,则021Bh就是监控程序的断点为了确保用户程序结束后,可以回到监控程序的断点以恢复监控程序的运行过程,在让 用户程序进入运行过程之前所作的准备工作中,就包扌舌把021Bh这个断点地址(语句标号为 RETMON)写进用户的堆栈中;如果再强行规定用户程序的最后一个汇编语句只能是RET(子 程序返回指令),则执行该RET指令吋,将把已经保存在堆栈中的监控程序的断点地址恢复 到PC中,接下来运行的将是监控程序的后续指令了,在保存好用户程序的现场信息后,实 现G命令的这个子程序结束自己的运行过程。

      T命令、P命令:以单条指令方式运行用户程序T命令、P命令若跟地址参数,则将该地址写入映射区对应PC的存储单元两个命令的 功能都是执行用户程序的一条指令,区别在于,T命令总是执行单条指令,P命令把CALA 指令和它调用的子程序作为一条指令來执行T命令执行流程如图5所示显而易见,执行T命令比起执行G命令处理起來要复杂执行G命令时,用户程序作 为一个整体,仅一次与监控程序进行切换,执行T命令时,则每运行用户程序的一条指令, 就需要与监控程序进行一次切换过程,运行用户的一个程序要通过连续很多次地执行T命令 才能完成这就带来了 2个需要解决的问题首先,正确保护用户程序的现场信息至关重要只有保护好用户程序的现场信息,用户 程序的指令才能正确衔接,并用正确的数据完成运算功能其次,执行用户程序的一条指令 后,下一条指令的地址肯定送入了 PC (硬件本身的功能),但是如何返回到监命令带参数?从映射区i类出PC的值.读指令码到R0和R13.保留操作码到R&形成下条指令地址(请注意指令字长}到R15,堆栈指怦的值到R2带参数写摩数債到映射区对应PC的总元橫令?返回地址到R15否是是JR指令?否A 使SP为2780hJft找折针M 越界値越界否?% JKPA指令?1ADR8。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.