- 36
- 0
- 约1.99万字
- 约 17页
- 2017-05-21 发布于浙江
- 举报
微机原理第四次上机实验报告_pb
微机原理第四次上机实验报告
学号:P 姓名:**潇 上机时间:每周五晚上
【一、实验目的和要求】:
1,熟练掌握分支程序的两种结构形式:即相当于高级语言中的IF_THEN_ELSE语句和CASE语
句。
2,熟练掌握使用条件转移指令实现分支程序设计的基本方法。
3,熟练掌握使用跳转表方法实现CASE结构的分支程序的设计。
【二、实验内容和过程】
程序1:编写一个程序将一个数组中正数和负数分成两个数组并分别屏幕显示正
数和负数的个数。
(一)程序的算法:
1,首先是待处理数组的创建:我们通过21H 号中断调用的0A 号功能调用输入数字串,存
于BUFF 字符串区(设定为0A 号调用的键入缓冲区),这里只负责将键入的以回车符(0DH )
结尾的字符串读入数据段,不检查输入是否合法。但是,我们通过输出提示告知用户键
入的数字之间应该使用空格符(20H )来分隔。实际上,我们在处理数字的时候就是以空
格符(当然,还包括尾后输入的回车符)作为一个数字的字符串形式结束的标志 (回车
符还标识所有数字处理完毕)。另一方面,我们计划给每个数字分配一个字的储存空间,
故我们支持的数字范围为-32768~32767,这同样有键入提示字符串提示。
2,数字处理阶段:
预备处理阶段:初始化用来作为指针和数据暂存的寄存器(DI 指向保存正数的数组
NUM1,SI 指向保存负数对应补码的数组NUM2,BX 指向键入缓存区BUFF,数据暂存的
CX 清0 ,将要用来读数和处理的AX 清0 ),计数器清零(L1,L2 清 0 ,他们分别记录存
入 NUM1 和存入NUM2 的元素的个数)。
正式处理阶段:
(a) 开始:我们通过BX 指向BUFF,通过MOV AL ,[BI]j 将一个字节读入AL 。
(b) 判断,是否为回车符(0DH ):TURE ,所有数字处理完毕,跳转到输出阶段;FALSE,
继续执行接下来的指令。
(c) 判断,是否为回车 (20H ):TURE ,尚未开始下一个数字的输入,回跳 (a )重新
读入下一个字节的内容;FALSE,继续执行接下来的指令。
(d) 判断,是否为’-‘ (2DH ):TURE ,接下来可能是一个负数的绝对值部分,跳转到
负数处理区 (f );FALSE,接下来可能是一个正数,继续处理接下来的指令。
(e) 这里是正数处理区:
1)将AL 中的内容去ASCII 化(SUB AL,30H )。这样可以得到一位数字的值(对
应ASCII 码为30H~39H ),若果得到的AL 在0~9 (包含0~9 )说明是一个
数字,否则,即小于(L)0 或者大于(G )9 ,则表示输入的不是数字 (注
意:这是由于我们暂时仅支持十进制输入,不支持十六进制和八进制输
入;另一方满,,目前我们仅支持整数,不支持小数)。如果我们在读取数
字的过程中遇到了非数字部分(并且知道与它不是回车符抑或空格符),
则我们将跳转到轮空阶段(g )。下面是实现算法:
2 )判断,AL 小于0 :TURE ,跳转到轮空阶段(g );FASLE,则
嵌套判断,AL 大于9 :TURE ,跳转到轮空阶段(g );FALSE,继续执行接下
来的指令。
3 )交换AX ,CX 内容;再执行乘法MUL DX,其中DX 初始化 10D,积的高位
保存在 DX,低位保存在AX (实际上只有低字节有效,高字节是0 );再
次交换AX ,CX;做加法ADD CX,AX 这四次的操作将实现CX-CX*10+AX
的操作。
4 )BX 自增1,读入BUFF 下一个字节内容到AL 。
5 )判断,AL 是否为回车:
原创力文档

文档评论(0)