77范文网 - 专业文章范例文档资料分享平台

北邮微机原理软件实验报告(5)

来源:网络收集 时间:2019-03-28 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

XOR CX,CX ;CX清零 MOV AH,30H ;赋学号第一位的AscII码 \ MOV DH,31H ;赋学号第二位的AscII码 \ LEA BX,BUFFER+2 ;BX指向第一个成绩数据 CALL CHECK CMP FLA,1 ;输入错误则重新输入 JZ INPUT CALL COM MOV AH,02H ;输出回车及换行 MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H CALL DISPY MOV AX,4C00H INT 21H

CHECK PROC

NEXT: MOV FLA,0 MOV [DI],AH ;将学号第一位的AscII码存入指定内存区域 MOV [DI+1],DH ;将学号第二位的AscII码存入指定内存区域 INC DI INC DI ;指向下一个 CMP DH,39H ;十进制转换 JZ DECA INC DH ;学号+1 JMP NEXT1 DECA: MOV DH,30H ;满十进一 INC AH

NEXT1: MOV AL,[BX] ;检查分数的AscII码 CMP AL,30H ;若小于30h(“0”),则报错 JB ERROR CMP AL,39H ;若大于39h(“9”),则报错 JA ERROR MOV [DI],AL ;若正确,则存储 INC DI ;查下一个数 INC BX

MOV AL,[BX] CMP AL,30H ;检查第二位的AscII码 JB ERROR CMP AL,39H JA ERROR MOV [DI],AL ;若正确,则存储

INC DI INC BX INC CX ;已存个数+1 MOV AL,[BX] ;判断是否为回车符 CMP AL,0DH JZ FINISH1 ;是回车 则回主程序 转入冒泡排序 CMP AL,20H ;判断是否为空格 JNZ ERROR ;不是则报错 INC BX ;是 则BX+1后继续检查 JMP NEXT ERROR: MOV AH,09H ;报错 MOV DX,SEG STR2 MOV DS,DX MOV DX,OFFSET STR2 INT 21H MOV FLA,1 FINISH1:RET

CHECK ENDP

COM PROC

COMP1: PUSH CX ;保存现场 MOV VAR1,CX ;先通过运算得到两个需要的常量 VAR1为数据组数 SHL CX,1 SHL CX,1 ;乘以4为数据总字节数 SUB CX,4 MOV VAR2,CX POP CX ;恢复现场 DEC DI

DEC DI ;DI指向最后一个分数的十位的AscII码 JMP COTI

COMP2: ADD DI,VAR2 ;比较完一轮后,使DI指向最后一个分数的十位的AscII码

COTI: MOV BL,0 ;建立标志 MOV CX,VAR1 DEC CX ;比较次数 AGAN: MOV AL,[DI] CMP AL,[DI-4] JA CHAN1 ;大于,则交换 JB COTI2 MOV AL,[DI+1] ;十位相同 比较个位 CMP AL,[DI-3] JA CHAN1 JBE COTI2

CHAN1: MOV BL,1 ;若要交换,修改标志, PUSH CX MOV CX,4 DEC DI

DEC DI ;使DI指向该分数对应的学号的第一位的AscII码 CHAN2: MOV AL,[DI] ;交换 XCHG AL,[DI-4] MOV [DI],AL INC DI LOOP CHAN2 POP CX DEC DI DEC DI 码

COTI2: DEC DI DEC DI DEC DI

DEC DI 便进行下次比较 LOOP AGAN CMP BL,0 JNZ COMP2 DEC DI DEC DI MOV CX,VAR1 MOV BH,30H MOV BL,31H RET

COM ENDP

DISPY PROC

DISPY1: MOV DL,BH MOV AH,02H INT 21H MOV DL,BL

MOV AH,02H INT 21H

MOV DL,20H MOV AH,02H INT 21H

MOV DL,[DI] MOV AH,02H INT 21H INC DI

;修改DI,使DI指向高地址分数的十位的AscII ;修改DI,使DI指向高分数的十位的AscII码,以 ;若标志没被修改,则排序完成 ;修改DI,使DI指向最高分对应的学号 ;显示次数 ;名次 十位AscII码 ;名次 个位AscII码 ;先输出名次 ;输出空格 ;再输出学号 MOV DL,[DI] MOV AH,02H INT 21H INC DI

MOV DL,20H MOV AH,02H INT 21H MOV DL,[DI] ;输出空格

;输出分数

MOV AH,02H INT 21H INC DI MOV DL,[DI] MOV AH,02H INT 21H INC DI

MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H INT 21H CMP BL,39H JZ DECA2 INC BL JMP NEXT2

DECA2: MOV BL,30H INC BH NEXT2: LOOP DISPY1 RET DISPY ENDP CODE ENDS END START

四、程序流程图

;回车并换行,准备下一轮输出

检错 输出显示

五、程序运行结果

开始 初始化 显示提示 输入成绩 调用检错子程序 否 输入是否正确 是 调用比较子程序 比较 调用显示子程序 结束

六、预习题

1.如何确定一个学生在这门科目中的名次? 答:利用排序,看最后这个学生的位置

2.你觉得输入结束后,采用什么方法进行比较以得到学生的名次最为简单? 答:冒泡排序 七、心得体会

通过这次试验学会了子程序的使用,可以对子程序重复利用简便了程序的编译,使得编写简便了许多。在编写过程中发现PUSHF及POPF的用处显得尤为重要,对冒泡排序的正确性起了决定性作用。并且学会了如何使用指针。完成这次实验后我觉得学习过的各种编程,不管是C++还是数据结构或者汇编都是相互贯通的。

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库北邮微机原理软件实验报告(5)在线全文阅读。

北邮微机原理软件实验报告(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/548943.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: