首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
[程序] START PRUGBC LD GR0,DATA LEA GR1,0 LEA GR3,48 LOOP1
[程序] START PRUGBC LD GR0,DATA LEA GR1,0 LEA GR3,48 LOOP1
admin
2005-03-15
73
问题
[程序]
START
PRUGBC LD GR0,DATA
LEA GR1,0
LEA GR3,48
LOOP1 CPL GR0,WDT,GR1
JP2 LOOP2
ST GR3,BTASC,GR1
LEA GR1,1,GR1
LEA GR2,-4,GR1
JN2 LOOP1
(1)
LOOP2 LEA GR2,48
LOOP3 CPL GR0,WDT,GR1
JMI NEXT
(2)
LEA GR2,1,GR2
JMP LOOP3
NEXT (3)
LEA GR1,1,GR1
LEA GR2,-4,GR1
JNZ LOOP2
LAST (4) ;处理个位数
(5)
EXIT
C48 DC 48
WDT DC 10000
DC 1000
DC 100
DC 10
BTASC DS 5
DATA DC #FA59H
END
选项
答案
(1)JMP LAST (2)SUB GR0,WDT,GR1 (3)ST GR2,BTASC,GR1 (4)ADD GR0,C48 (5)ST GR0,BTASC,GR1
解析
本程序是将16位无符号二进制数转换为5位十进制数。
程序的前3句是对寄存器赋初值,DATA数据(即要转换的数)被读取到GR0,GR1置为0,GR3置为48。第四句是一个逻辑比较语句(从这个语句可以看出,GR1用作 WDT的偏移地址),比较GR0和WDT中的数据的大小。
WDT开始的5个连续空间的数据分别为“10000,1000,100,10,5”。因为当前的 GR1为0,所以WDT对应的为“10000”,当GR0大于等于(WDT)时转LOOP2,小于 (WDT)则继续往下执行。其实在这种情况下,最好的分析方法就是把DATA中的数据自己手动转成十进制,然后把数据代到程序里,跟踪程序的执行,这样能最快的了解程序的执行流程和处理方法,同时也做了验证工作。
因为#FA59H转成十进制是64089。所以现在程序转到LOOP2执行。GR2置48,单从这里无法了解GR2是什么用途。比较GR0与(WDT+GR1)的大小,GR0比10000大,所以执行(2),再执行“LEAGR2,1,GR2”即把GR2自加1(结合题目提到的“转换结果用ASCH码表示”,可以了解到GR2的用途,因为48正好是ASCII码的“0”,自加就变成“1”了,所以GR2是统计GR0中(WDT+GR1)的个数并把它转化为ASCII码形式)。
然后再转向LOOP3执行,这样又回到了前面比较。在已知的语句中并没有对GR0, GR1进行变动,所以(2)中一定是对这2个寄存器值的改变,不然这段循环就成了死循环了。结合“LEAGR2,1,GR2”的功能,可知(2)应是对GR0自减一个(WDT+GR1),即 SUB GR0,WDT,GR1。
程序分析到这里,可以了解到NEXT标号后的语句是为下一步的统计做准备,即首先保存上一步已统计的“10000”的个数,再为统计“1000”的个数,为寄存器置初始值,程序已有“LEA GR1,1,GR1”,它能使WDT+GR”指向1000,所以(3)空要完成的功能是把“10000”的个数放到指定的位置,又因为题目中提到“转换结果用ASCII码表示,并从高位至低位依次存放在首地址为BTASC的连续5个内存单元中”,所以(3)空应填ST GR2,BTASC,GR1。
接下来执行“LEAGR2,-4,GR1”GR1中存的是偏移量。当统计万位时,GR1为0;当统计千位时,GRl为1,要(GR1)-4为0,即GR1为4,应是统计个位数字。所以(4)和 (5)空是统计个位数字,其实这点在程序注释部分也有提及。
那么如何利用已知数据,且用2步完成功能呢?这里注意到一个重要寄存器GR0。 GR0中现存的数就是个位数了,因为通过上面的几次循环,GR0中高位都被减掉了,所以现在只需把GR0加上一个48,然后再存入(BTASC+4)内存空间即可。其实把GR0加 48的方法很多,但是一定要注意一个问题,不能用LEA GR0,48,GR0,因为GR0寄存器是不能用变址寻址的。又因为程序中用到了C48,但一直没有语句用到过,所以用 ADD GR0,C48是最合适的。至此(5)空毫无疑问填ST GR0,BTASC,GR1。
最后就剩(1)了。当万位为0时,就可以执行“JPZ LOOP2”后面的一段程序了,“ST GR3,BTASC,GR1”是把“0”存入BTASC+GR1位置。接下来的3条语句都已经很明显了,与程序的倒数第3,4,5条语句完成同样的功能,即判断是否已经处理到个位了,如果是,则直接转到LAST进行个位处理,所以(1)空应填JMP LAST。
转载请注明原文地址:https://kaotiyun.com/show/NyDZ777K
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
阅读下列说明,回答问题1和问题2,将解答填入答题纸的对应栏内。【说明】某航空公司的会员卡分为普卡、银卡、金卡和白金卡4个级别,会员每次搭乘该航空公司航班均可能获得积分,积分规则如表2-1所示。此外,银卡及以上级别会员有额外积分奖励,奖励规则如表
阅读下列说明,回答问题,将解答填入答题纸的对应栏内。【说明】某飞行器供油阀控制软件通过控制左右两边的油箱BL、BR向左右发动机EL、ER供油,既要保证飞行器的安全飞行,又要保证飞行器的平衡,该软件主要完成的功能如下:(1)无故障情况下
阅读下列C程序,回答问题,将解答填入答题纸的对应栏内。【C程序】staticvoidpermute_args(intpanonopt_start,intpanonopt_end,intopt_end,intncycle){
操作数所处的位置,可以决定指令的寻址方式。操作数包含在指令中,寻址方式为(4);操作数在寄存器中,寻址方式为(5);操作数的地址在寄存器中,寻址方式为(6)。
关于软件测试对软件质量的意义,有以下观点:①度量与评估软件的质量;②保证软件质量:③改进软件开发过程;④发现软件错误。其中正确的是(41)。
在软件生命周期的不同阶段,需要实施不同类型的测试工作,单元测试是对程序设计进行验证,其中(39)不是单元测试的主要内容。在进行单元测试过程中,通常测试工程师都需要借助(40)来代替所测模块调用的子模块;在单元测试的基础上,需要将所有模块按照概要设计和详细设
多条件覆盖是一种逻辑覆盖,它的含义是设计足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次,满足多条件覆盖级别的测试用例也是满足(44)级别的;针对布尔表达式A&&(B‖C)执行逻辑覆盖测试,测试用例至少需要(45)种组合才能满足多条件覆盖的要
下列测试工具中,使用(68)执行自动化负载压力测试,使用(69)执行代码静态结构分析,使用(70)执行网络测试。
GB/T16260将软件的内部(外部)质量属性划分为六大质量特性,分别是(65)。
软件开发人员可以用(18)软件编写和修改程序。
随机试题
下列语句作为定义和划分是否正确?请说明理由。学生可划分为大学本科生、专科生、自考生、中学生、小学生以及外国留学生。
下列哪种细胞为非自律细胞()
无产阶级最可靠的同盟军是()
下列哪一项不符合心房颤动的心电图特点
根据《中华人民共和国固体废物污染环境防治法》,关于危险废物污染环境防治的特别规定,禁止无经营许可证或者不按经营许可证规定从事危险废物()。
下列检测方法中,属于动态检测弯沉值的是()。
学生边听讲边记笔记属于()。
下列叙述中正确的是
某模拟网站的主页地址是:HTTP://LOCALHOST:65531/ExamWeb/INDEX.HTM,打开此主页,浏览“天文小知识”页面,查找“水星”的页面内容,并将它以文本文件的格式保存到考生目录下,命名为“shuixing.txt”。
Whydoesthewomansaythe"dinner"questionistough?
最新回复
(
0
)