微机原理实验4[教育相关].doc

上传人:rrsccc 文档编号:9705931 上传时间:2021-03-18 格式:DOC 页数:5 大小:58.50KB
返回 下载 相关 举报
微机原理实验4[教育相关].doc_第1页
第1页 / 共5页
微机原理实验4[教育相关].doc_第2页
第2页 / 共5页
微机原理实验4[教育相关].doc_第3页
第3页 / 共5页
亲,该文档总共5页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《微机原理实验4[教育相关].doc》由会员分享,可在线阅读,更多相关《微机原理实验4[教育相关].doc(5页珍藏版)》请在三一文库上搜索。

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单元开始中输入数据:09H(数据个数)12H、8

3、0H、78H、C8H、00H、00H、FEH、99H、34H,编写程序使其能分别求出数据区中的正数和负数以及零的个数,正数的个数放在3510H单元中,负数的个数放在3511H单元中,零的个数放在3512H单元中.(B) 有三个8位二进制数连续存放在03200H开始的内存单元中,设它们之中至少有两个数是相同的。编写程序找出与另外两数不同的数,把该数所在的地址(段内偏移地址)送到03204H单元,若三个数都相同则送0FFFFH到03204H单元。(C) 设数据段SCORE单元开始连续存放着20个学生成绩,编写程序统计其中90分数段的人数,并把统计结果存放到从TOT开始的数据块中。(数据为:64H,

4、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) 的值(字节数)分别由3000H、3001H、3002H单元的数决定,对应的结果分别存放在3005H、3006H、3007H单元中,完成下列方程: A (X0)Y= 0 (

5、X=0) B (X200)Y= 50H (X=100) 00H (X50)五软件流程图和程序清单A)DATAS SEGMENTORG 3500H BUFSIZE DB 9 ;单元数据个数 NUM DB 12H,80H,78H,0C8H,00H,00H,0FEH,99H,34H ORG 3510H RESULT DB 3 DUP(0,0,0)DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX MOV DI,OFFSET NUM ;送数据地址到DI LEA BP,RESULT MOV SI,00

6、H MOV CX,3500H ;循环次数AGAIN:TEST BYTE PTRDI,80H JZ COUNT ;ZF=1,此数据为非负数,转移 INC BYTE PTRBP+1 ;ZF=0,此数据为负数 JMP DONECOUNT:CMP BYTE PTRDI,01H JNC NEXT INC BYTE PTRBP+2 ;CF=1,此数据为0 JMP DONENEXT: INC BYTE PTRBP ;CF=0,此数据为正数DONE: INC DI LOOP AGAIN MOV AH,4CH INT 21HCODES ENDSEND START【调试说明】由图可见:正数个数为3,负数个数为4,

7、零的个数为2。与答案相符C)DATAS SEGMENT ORG 3700H SCORE DB 64H,61H,5DH,55H,52H,51H,44H,45H,47H,48H, 4DH,4FH,3CH,3FH,40H,41H,33H,56H,59H,30H ORG 3720H TOT DB 5 DUP(0,0,0,0,0) DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX MOV CX,20 ;循环次数 MOV SI,OFFSET SCORE ;分数首地址送SIBBB:MOV BP,OFFS

8、ET TOT MOV AL,BYTE PTRSI CLC CMP AL,60 JNB S70 ;CF=0,大于60跳转 JMP DONES70: INC BP CMP AL,70 JNB S80 ;CF=0,大于70跳转 JMP DONES80: INC BP CMP AL,80 JNB S90 ;CF=0,大于80跳转 JMP DONES90: INC BP CMP AL,90 JNB S100 ;CF=0,大于90跳转 JMP DONES100: INC BPDONE:INC BYTE PTRBP ;对应分数段人数加1 INC SI LOOP BBB MOV AH,4CH INT 21HC

9、ODES ENDSEND START【调试说明】由图可见:90分数段的人数分别为2个,6个,4个,5个,3个,与答案相符。D) DATAS SEGMENT ORG 3000H LEN 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,32H,76H,76H,0B7H,86H,21H,09H ORG 3030H MAX DB ? ADDRESS DW ?DATAS ENDSCODES SEGMENT ASSU

10、ME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX LEA SI,NUM MOV AL,00H MOV CX,LEN ;循环次数 MOV ADDRESS,3002H CLC BBB: CMP AL,BYTE PTRSI ;讲AL中数据与(SI)中数据比较 JNB NEXT CLC ;CF=1,CF清零,记录数据地址 MOV AL,BYTE PTRSI MOV ADDRESS,SINEXT:INC SI LOOP BBB MOV MAX,AL ;将AL中最大数存入指定地址 MOV AH,4CH INT 21HCODES ENDS END START【调试说明】由图可见:最大数为FCH,所在单元是300CH六实验心得这次是第四次实验,对于汇编语言学习开始有了一点感觉,但是写程序时候还是需要不断调试,程序也运用了循环分支结构,尽量优化了程序,但是还是相对冗长,要不断改进!实验课给我带来很多收获,以前自己都是只在课本上学习,通过实验,自己也会在宿舍里进行调试,加深了对汇编语言的了解,收获颇多!5教学d

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1