Chinaunix首页 | 论坛 | 博客
  • 博客访问: 146898
  • 博文数量: 38
  • 博客积分: 1718
  • 博客等级: 上尉
  • 技术积分: 350
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-13 14:47
文章分类

全部博文(38)

文章存档

2012年(1)

2011年(11)

2010年(8)

2009年(18)

我的朋友

分类:

2009-11-05 22:50:20

程序描述:程序的主要功能是找出数组X[1...n]中的最大值。
程序规划:
    1)定义数字常量X为数组的起始地址;
    2)索引寄存器保持当前的当前元素的位置;
    3)索引寄存器I1保存了数组的大小。
程序源代码:


1. X EQU 1000
2. ORIG 3000
3.MAXIMUM STJ EXIT
4.INIT ENT3 0,1
5. JMP CHANGEM
6.LOOP CMPA X,3
7. JGE * + 3
8.CHANGEM ENT2 0,3
9. LDA X,3
10 DEC3 1
11. J3P LOOP
12EXIT JMP *


源码分析:

第一行  的 X EQU  1000 定义一个数字常量X,其值为1000,
第二行  表示这段程序的开始地址为3000,第一行和第二行是伪指令,不占用实际的代码空间,
第三行  为程序的开始地址,主要功能是把调用这段代码的程序的程序的下一条指令的地址保存到寄存器J
       中,以便在这段程序执行完成后继续执行其他程序,
第四行   把数组的长度值保存到I3中,
第五行   无条件跳转指令
第六行   把数组元素x[rI3]的值与寄存器A中的值进行比较
第七行   如果第六行的结果表示寄存器A的值大于等于x[rI3]的值,则执行第十行的指令
第八行   把rI3的值保存到rI2中
第九行   把rI3的值加载到寄存器A中
第十行   把rI3的值减少1
第十一行 跳转到第6行
第十二行 程序返回,这里的EXIT在第三行被赋值

从上面的源代码知道程序用了两个局部变量 rI2 和 rI3, rI2保存了数组最大值的索引值。调用这段程序的客户端程序可以通过访问寄存器A得到最大值,通过访问 rI2 得到最大值的索引值。由此可以知道这段程序的输入参数和输出参数为:
输入参数:
     rI1 : 数组的长度值
返回值:
     rI2 : 最大值的索引位置
     rA  : 最大值
这段程序存在的问题:数组的起始地址通过常量方式给出,没有通用性,改进方法可以把数组的起始地址通过 rX或者其他索引寄存器进行传递
阅读(1301) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~