资源描述:
《计算机等级考试(国家)-三级pc技术机试模拟52》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、三级PC技术机试模拟52上机题1>请编制程序PR0G1.ASM,功能是:内存屮连续存放着由20个无符号字节组成的一个序列,请将它们排成升序(从小到大)。程序中,COUNT为序列元素个数,OFFL为序列偏移量,BX为交换标志寄存器(BX=1,说明此趟排序扫描后未发生交换操作,表示序列中的元素己排好序)。例如:内存中有01H,04H,02H,...(假设后十七个字节均大于04H)结果为01H,02H,04H,•••(后跟十七个字节,按从小到大的顺序排列)部分程序已给出,其中原始数据由过程LOAD从文件
2、INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果耍求从RESULT开始存放,rfl过程SAVE保存到文件OUTPUT]・DAT中。请编写BEGTM到END之间代码。对程序必须进行汇编,并与IO.OBJ连接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分);部分源程序如下:EXTRNNLOAD:FARzSAVE:FAREQU20STACSEGMENTSTACKDB128DUP(?)STACENDSDATASEGMENTSOURCEDBNDUP(?)R
3、ESULTDBNDUP(0)NAME0DB'INPUT1.DAT*z0NAME]DB'OUTPUT1・DAT',0COUNTDWOFFLDW9DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACSTARTPROCFARPUSHDSXORAX,AXPUSHAXMOVAXzDATAMOVDS,AXLEADXZSOURCE;数据区起始地址LEAS「NAMEO;原始数据文件名MOVCX,N;字节数CALLLOAD;从*INPUT1.DAT''I1读取数据****
4、BEGIN*********END*****STARTCODEENDPENDSLEADX,RESULT;结果数据区首地址LEASI,NAME1;结果文件名MOVCX,N;结果字节数CALLSAVE;保存结果到文件RET相关知识:•无符号数比较大小。有符号数和无符号数比较大小采用的是不同的指令,本题目要求将无符号数进行排序,这里仅介绍无符号数的比较指令。(1)''高于〃或''不低于等于〃条件转移指令指令格式:JA/JNBE短标号地址(2)''高于等于〃或''不低于〃条件转移指令指令格式:JAE/JN
5、B短标号地址(3)''等于〃条件转移指令指令格式:JE短标号地址(4)、、不等于〃条件转移指令指令格式:JNE短标号地址(5)''低于等于〃或''不高丁〃条件转移指令指令格式:JBE/JNA短标号地址(6)''低于〃或''不高于等于〃条件转移指令指令格式:JB/JNAE短标号地址•数组的排序数组的排序的方法有很多种,町以采用''冒泡排序〃、''直接插入排序〃、''简单选择排序〃等算法复杂度为OgJ的简单排序算法,也可采用那些算法复朵度为0(nlog2ii)或0(d(n+rd))的算法,但简单排序算
6、法比较容易理解,编程比较方便。通过阅读我们发现岀题者的意愿就是采用冒泡排序方法,因为它要多次扫描数组,而且有一个标志指明一趟打描是否发生数据交换,这是典型冒泡排序方法。当然大家也可采用别的排序算法,作为题目的分析者我们就不采用别的方法了。•串的移动冒泡排序是在原地进行的排序方法,所以需要事先将数据移到结果地址中,或将排序后的结果移到结果地址屮。(丄)串的移动我们可以考虑使用字符串传送指令和无条件重复丽缀。(1)字符串传送指令指令格式:MOVSB或MOVSW需要设置源地址寄存器S工和口的地址寄存器D
7、D"的地址内容,还需要设置传送字符的个数到寄存器CX中,以及方向标志位D以决定地址变换方向,D=0吋,ST和DT内容加1,D"时,S工和D工内容减1。(ii)无条件重复前缀指令格式:REP字符串操作指令此条指令根据CXi11的内容决定重复操作的次数。(2)如果对于串的传送指令不熟悉的话,也可用循环的方式,用MOV命令,从源地址将数据传送到目的地址。编程思路:第一步:分析本程序要求完成的功能。木程序要求完成以下功能:(1)从数据文件INPUT1.DAT中读取20个8位无符号整数存放在SOURCE开始
8、的内存单元中。(2)将SOURCE开始的20个内存单元中的无符号整数进行排序后依次放在RESULT开始的内存单元中。(3)将排序结果存入到OUTPUTl.DATo第二步:用相应汇编程序来实现其功能。①数据的读取和存入题目中已经给出,只要完成20个冇符号整数的排序操作即可。②对于一个数组的排序操作可按厂血的方法进行。(i)依次将相邻的两个数比较,每次将较小的数调换到前而。那么经过一趟比较后,最大的数排在第n个位置;再将剩下的n-l个数两两进行比较,排在第n-l个位置上的为次大数;重复