汇编语言实验讲义(5)

2018-11-17 20:38

显示该位置序号 查找结束? 有找到标记? 显示‘no match’ 结束

题2参加流程图

年号能被100整除? 是闰年,显示‘LEAP YEAR ’ 不是闰年,显示‘NONLEAP YEA R’ 结束 题3参加流程图

实验六 循环与分支程序设计(2)

[实验目的]

1,学习使用循环指令编程,熟悉不同的循环条件和方式。 2,学习多重循环(循环嵌套)的设计程序。 3,学习串操作指令的应用。 [实验内容]

1,编写一程序,要求从键盘输入一字符串以‘$’为结束标记。统计26个英文字母在字符串中出现的次数(不分大小写)。并显示统计结果。

2,已知一个由英文单词组成的字符串已按词典顺序排好,每个单词以空格符结束。该串的头两个字节为二进制数,说明串的长度。编写一程序,从键盘输入一个新单词(以空格符结束),将其按顺序插入该串的适当位置,并修改串的长度。 3,编写用选择法将有符号字数组中的数据排序的程序。 [提示]

题1:本题可编写二重循环,外层控制26个字母从小到大(ASCII码)的循环;内层控制搜索字符串的循环。为了存放统计数,可在数据区设置一个含26个单元(字节或字)的数组。在多重循环中,要注意各层循环数的保存和启用。 题2:

1,这里要使用串操作指令,如:串比较,串搜索,串传送等。

2,原始串长度的确定方法:如果用DOS功能10H输入,则缓冲区的第二个字节为实际

输入后的串长度;如果在定义数据段时,单词组STR就已装入,则串长SLEN DB $-STR定义紧跟在STR的后面。

3,这里操作可以在两个不同的方向。一是从前向后,一个个单词进行比较,直至找到第一个比新单词大的原单词;然后从这个原单词开始的字符串向后移动一个新单词的长度,但是移动的串操作方向应从后向前。新单词填入空出的位置。二是从后向前进行比较。每次比较后,比新单词大的原单词向后移动一个新词的长度;直至第一个比新词小的原单词不动,新词填入空出的位置。

思考:如果源单词组很到,要插入一个新词按上述方式效率显然太低,你能设计出什么好的方案?

题3:假设数组中有x1,x2,x3,??xn共N项。选择法排序(以从大到小为例)的具体

做法是:首先在x1至xn的N项中找出最大数,把它与x1交换位置,最大数已到位;然后,在x2至xn的N-1项中找出最大数,把它与x2交换位置;??这样依次下去。外循环控制内循环的次数;内循环就是找若干项中的最大数,结束时最大数与这些项的头一项交换位置。

开 始 开 始 输入任意一个字符串

输入新单词 保存字符串的长度

外层循环初始化, 初始化指针 SI指向 循环次数26 串首,DI指向新词首

内层循环初始化,循环次数为串长,取26个字母之一作查找目标 搜索单词前的空格, SI指向其后的位置,

保存在X

Y

是否相同? 已到串尾? 依次取串的一个字符

与目标比较 进行串比较 N Y 与目标小写比较 新词大于原词? Y N 剩余串长—源串长—X是否相同? 把SI指向串尾,DI指向 Y SI+新词长度的位置

对应计数器加1 剩余串向后移新词长 N 整个串查找完? 调整指针SI,DI Y N 26个字母结束? Y 显示26个字母的统计结果(循环) 结束 把新词写入空出单元 新串长=原串长+新词长

结束

题1。参考流程图 题2。参考流程图

实验七(过程)子程序设计

[实验目的]

1. 掌握不同类型子程序的基本结构和编写方法。 2. 掌握子程序的调用与返回的不同方式。

3. 掌握调用程序和子程序之间参数传递的三种方式。 4. 熟悉近过程与远过程的区别。 [实验内容]

1. 编写求一数组的N个数中最大数及其位置的子程序。显示结果部分也作为一子程序。

调用方式:

数组偏移首地址和数据个数N进栈 CALL MAX

BX?最大数,DX?位置序号

2. 编写一子程序,实现四位BCD码转换成ASCII码并在CRT上输出。

调用方式:

AX?四位BCD码 CALL TRAS

3. 编制求自然数M、N(M、N为字整数)最大公因数的子程序,要求显示结果。

调用方式:

M、N进栈 CALL GCDMN BX?最大公约数

[提示]

题1:找出数组中的最大数,参考实验五的题1。为了记住最大数的位置,应设一变量初始值为0,在比较两个数时,若发生交换,大者的序号存入该变量。 题2:这里是指压缩型BCD码,例如:2359的二进制存放方式是:

0010 0011 0101 1001,可用‘AND’运算每次截取四位后移位,再转换成ASCII码;也可 以用直接移位的方式每次四位,尔后转换成ASCII码。

题三:求两个自然数M、N的最大公因数的算法为辗转除法,具体作法是重复如下步骤:第一步,若N=0,M即为所求。第二步,若N≠0,则求R=M MOD N,将N取代M,R取代N,其中R为中间变量。

实验八 系统功能调用(1)

[试验目的]

1 了解汇编语言与系统的两个接口. 2 了解IBM PC系统的中断向量. 3 较全面地了解 ROM BIOS 和 DOS中断服务程序的调用. 4.掌握系统功能调用中的输入和输出功能的调用. [试验内容]

1 游戏程序常常用随机数来控制某图形在屏幕上移动;请编写一程序,用随机数来控制笑脸符(ASCII码02)显示的位置.要求笑脸符每次显示的列号总是递增1,而行的位置可能上一行,下一行或同一行,这根据随机数是0,1或2来决定;当行号为0,24或列号为79时,显示结束.笑脸符在每个位置上显示1/4秒.

2 编制一程序,要求测出任意程序的运行时间,并把结果显示或打印出来. [提示]

题1: 1 随机数的产生可利用AH=2,INT 1AH来读取时钟(BCD码)的低位数作为随机数的基数(也可调用DOS系统功能2CH读取时间16进制)两者返回参数都是 CH :CL=时:分,DH:DL=秒:1/100秒.

2 一个字符在屏幕上的显示可调用DOS 的 INT 21H 的功能2号,或BIOS或INT 1OH中的0 AH 功能.

3 在上两个显示字符的方式之前,要确定光标位置;可调用 BIOS 的INT 1OH 中的2号功能.

4 控制显示的时间可用中断号 1 CH 的定时功能.每隔约1/18 秒中断一次;因此要重新写该中断程序并修改中断入口地址.这里先后要用到35H和25H 的 DOS 系统功能调用,以下是这类程序的一般形式:

在数据区定义: VECTOR DD? MAIN PROC FAR

??

MOV AH,35H

MOV AL,VEC;设置要取的中断向量号,

INT 21H ;这里VEC=1CH;取该中断向量到ES:BX

MOV WORD PTR VECTOR[2],ES;保存该中断向量到 MOV WORD PTR VECTOR,BX;VECTOR 双字变量 PUSH DS PUSH CS

POP DS ;设置要装入的新中断向量的段地址

LEA DX,TIMER;设置要装入的新中断向量的偏移地址 MOV AH,25H MOV AL,VEC

INT 21H;装入新的中断向量 POP DS

??,程序其他功能 ??

PUSH DS

LDS DX,VECTOR ;DS :DX?保存的元中断向量 MOV AH,25H MOV AL ,VEC

INT 21H;恢复中断VEC 的中断向量 POP DS ?? RET

MAIN E NDP

TIMER PROC FAR;中断号为VEC 的新的中断子程序 ??;定时1/4 秒的计数程序 IRET;中断返回 ??

END MAIN

题2:遥测出任意程序的运行时间可以有两种计时方法: 1 利用重新编写中断类型1CH 的服务子程序进行计时

2 在计时程序中调用DOS 系统功能2CH ,也可调用BIOS 的INT 1AH中的1或2号功能。在被测试程序执行前后读趋势中,在进行简单的运算。被 测程序可作为一个模块被调用。


汇编语言实验讲义(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:歌舞娱乐放映游艺场所的安全疏散

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: