1、实验四:分支、循环程序设计一. 实验目的1 学习分支程序、循环结构程序的设计和调试方法;2 学习子程序的定义和调试方法;3 掌握分支、循环、子程序等程序的基本结构。二. 实验设备TDN 86/51 或 TDN 86/88 教学实验系统一台 三. 实验内容、步骤及要求1. 设计一数据块间的搬移程序 数据块搬移的基本原则为:对于两个分离的数据块,从首地址或从末地址开始传送均可。对于有部分重叠的情况则:当源数据块首地址目的数据块首地址时,从数据块首地址开始传送数据。当源数据块首地址目的数据块首地址时,从数据块末地址开始传送数据。2求某数据区内负数的个数设数据区的第一单元存放区内单元数据的个数,从第二
2、单元开始存放数据,在区内最后一个单元存放结果。为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将所有数据中凡是符号位为 1 的数据的个数累加起来,即得区内所包含负数的个数。3学生成绩名次表 将分数为 1100 之间的 10 个成绩存入首址为 3000H 的单元中,3000H+I 表示学号为 I 的学生成绩。编写程序能在 3100H 开始的区域排出名次表,3100H+I 为学号 I 的学生名次。 4. 求无符号字节序列中的最大值和最小值 设有一字节序列,其存储首地址为 3000H,字节数为 08H。利用子程序的方法编程求出该序列中的最大值和最小值。四. 编程练习(A) 在 3500H
3、 单元开始中输入数据:09H(数据个数)12H、80H、78H、C8H、00H、00H、FEH、99H 、34H ,编写程序使其能分别求出数据区中的正数和负数以及零的个数,正数的个数放在 3510H 单元中,负数的个数放在 3511H 单元中,零的个数放在 3512H 单元中. (B) 有三个 8 位二进制数连续存放在 03200H 开始的内存单元中,设它们之中至少有两个数是相同的。编写程序找出与另外两数不同的数,把该数所在的地址(段内偏移地址)送到 03204H 单元,若三个数都相同则送 0FFFFH 到 03204H 单元。 (C) 设数据段 SCORE 单元开始连续存放着 20 个学生成
4、绩,编写程序统计其中90 分数段的人数,并把统计结果存放到从 TOT 开始的数据块中。(数据为:64H,61H,5DH,55H,52H,51H,44H,45H ,47H , 48H,4DH ,4FH,3CH,3FH,40H,41H,33H,56H,59H, 30H).(D) 找出一个数据块中的最大数。数据块从偏移地址 3002H 开始存放,数据块的长度以 16位二进制形式存放在 3000H、 3001H 单元,把找出的最大数放到 3100H 单元中,并把存放最大值的偏移地址存入 3101H 和 3102H 的存储单元中。假设数据块中的数都是 8 位无符号数。(E) 的值(字节数)分别由 300
5、0H、3001H 、3002H 单元的数决定,对应的结果分别存放在 3005H、3006H、3007H 单元中,完成下列方程: A (X0)Y= 0 (X=0) B (X200) Y= 50H (X=100) 00H (X90 分数段的人数分别为 2 个,6 个,4个,5 个,3 个,与答案相符。D) DATAS SEGMENTORG 3000HLEN DW 0020HNUM DB 12H,34H,34H,54H,65H,65H,53H,55H,09H,69H,0FCH,65H,0AAH,0FBH,98H,88H, 0C3H,44H,12H,12H,45H,45H,76H,76H,32H,32
6、H,76H,76H,0B7H,86H,21H,09HORG 3030HMAX DB ?ADDRESS DW ?DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXLEA SI,NUMMOV AL,00HMOV CX,LEN ;循环次数MOV ADDRESS,3002HCLC BBB: CMP AL,BYTE PTRSI ;讲 AL 中数据与(SI)中数据比较JNB NEXT CLC ;CF=1,CF 清零,记录数据地址MOV AL,BYTE PTRSIMOV ADDRESS,SINEXT:INC SILOOP BBBMOV MAX,AL ;将 AL 中最大数存入指定地址MOV AH,4CHINT 21HCODES ENDSEND START【调试说明】由图可见:最大数为 FCH,所在单元是 300CH六实验心得这次是第四次实验,对于汇编语言学习开始有了一点感觉,但是写程序时候还是需要不断调试,程序也运用了循环分支结构,尽量优化了程序,但是还是相对冗长,要不断改进!实验课给我带来很多收获,以前自己都是只在课本上学习,通过实验,自己也会在宿舍里进行调试,加深了对汇编语言的了解,收获颇多!