ImageVerifierCode 换一换
格式:DOCX , 页数:40 ,大小:191.36KB ,
资源ID:18438778      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18438778.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微机原理软件实验报告文档格式.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

微机原理软件实验报告文档格式.docx

1、;用于打印字符串定义NEGTCHAR DB Negtive:ZEROCHAR DB Zero:EVENCHAR DB Even:ODDCHAR DB Odd:CR DB 0DH,0AH,$ 回车换行的ASCII码data ends-code segmentassume cs:code,ds:datastart:mov ax,data mov ds,ax mov si,offset array ;offset指令取array的偏移地址 dec si ;偏移地址先减1 mov cl,length ;数组长度赋予CL xor al,allop:cmp cl,0 ;余下数组长度不为0,则继续循环 je

2、 print;cl为0跳出循环 inc si;偏移地址加1,比较下一位数字 dec cl;余下数组长度减1 mov bl,si;采用寄存器间接寻址方式 cmp bl,0;和0比较 jg posi;正数跳转 jz zo;零跳转 jl neg;负数跳转posi:inc pnum;正数个数加1 test bx,01h;检测最后一位是否是0 jz pep;是0,即为偶数则跳转至pep inc podd;不是0,则正奇数个数加1 jmp loppep:inc peven;正偶数个数加1zo:inc zero;零的个数加1neg:inc nnum;负数个数加1检测最后一位是否是0 jz nep;是0,即为

3、偶数则跳转至nep inc nodd;不是0,则负奇数个数加1nep:inc neven;print:mov ah,09h ;打印正数个数 mov dx,offset POSICHAR int 21h;系统功能调用 mov ah,02h mov dl,pnum add dl,30h int 21h mov ah,09h mov dx,offset eventchar mov dl,peven mov dx,offset oddchar mov dl,podd mov dl,30h mov dx,offset cr mov ah,09h ;打印负数个数 mov dx,offset negtcha

4、r mov dl,nnum mov dl,neven mov dl,nodd mov dx,offset zerochar mov dl,zeroext:mov ax 4c00hcode ends end start实验分析数据区待统计的数据为:1,4,3,2,5,7,-1,-2,-6,0,0,0实验结果如下图所示:理论知识积累1.EQU:等价语句,一般使用格式为 符号名 EQU 表达式 ,作用是左边的符号名代表右边的表达式,当把一个常量或表达式定义成一个具有一定含义的符号名后,在程序中就可以用该符号名来代表该常量或表达式。等价语言不会给符号名分配存储空间,符号名不能与其他符号同名,也不能被重

5、新定义。2.test指令属于逻辑运算指令,功能是执行BIT与BIT之间的逻辑运算测试,tsst对两个参数(目标,源)执行AND逻辑操作,并根据结果设置标致寄存器,结果本身不会保存(两操作数与运算,仅修改标志位,不送会结果)。3.int 21H系统调用(由DOS提供的一组实现特殊功能的子程序供程序员在编写自己的程序时调用,以减轻编程的工作量);调用的实现步骤大概是系统功能送到寄存器AH中,入口参数送到指定寄存器中,用int 21H指令执行功能调用,根据出口参数分析功能调用执行情况。4.字符显示的实现问题,首先把数据转换成ASCII码,然后调用DOS功能将其显示。要特别注意每段待输出的字符串都要以

6、$结尾,不然无法识别串尾,输出乱码。实验C 代码转换程序设计1.掌握几种最基本的代码转换方法;2.运用子程序进行程序设计。1.从键盘上输入若干两位十进制数,寻找其中的最小值,然后在屏幕上显示出来。2.两个十进制数之间的分隔符,输入结束标志自定,但要在报告中说明。3.对输入要有检错措施,以防止非法字符输入,并有适当的提示。4.将整个程序分解为若干模块,分别用子程序实现。在报告中要给出模块层次图。1.如何将输入的两个字符(09)变为十进制或二进制数?答:输入的字符09是ASCII码表示的,对应于30H39H,通过减去30H,高位数乘以十加上低位数,即变为十进制数。2.如何将选出的最小值(二进制或十

7、进制)变为 ASCII 码再进行显示?可以直接读入并存储数字的ASCII码,容易比较其大小,然后输出时商和余数分别加上30H后显示在屏幕上。3.你觉得采用二进制运算还是十进制运算更适合于这个实验?采用二进制或者十进制都需要进行ASCII码到数字的转换和其反向转换。直接使用数字对应的ASCII比较,分别比较十位和个位,最后直接输出十进制字符即可。模块层次图DATA SEGMENTINPUT DB 100 DUP(?)MINTMP DB 9-30H,-30H ; 最小值初始99COUNT DB 0DIFERROR DB 0D ; 判断调用输入子程序是否有错WELCOME DB Please inp

8、ut numbers:,OUTTIP DB Minimum is : ; 回车换行 ERROR1 DB ERROR:Character is not valid! ;错误输入提示 ERROR2 DB Number must contains two digits! ERROR3 DB Number is empty! ERROR4 DB Need separate char!DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATAMAIN PROC FAR MOV AX,DATA MOV DS,AX MOV DX,OFFSET WELCOME CALL PRIN

9、T MOV DX,OFFSET CR ; CALL GETNUM ; 获取输入 CMP IFERROR,0 ; 判断输入过程是否有错 JNZ BACK ; 错误则直接返回DOS MOV DX,OFFSET CR ; CALL FINDMIN ; 查找最小数 MOV DX,OFFSET OUTTIP ; 输出提示 MOV AH,02H MOV DL,MINTMP ; 输出最小值的十位 ADD DL,30H INT 21H MOV DL,MINTMP1 ; 输出最小值的个位 ADD DL,30H INT 21H BACK: MOV AX,4C00H ; 返回DOSMAIN ENDPGETNUM P

10、ROC PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV DI,0 ; 数组偏移地址 MOV CX,0 ; 标识数字的位数GETLOOP: MOV AH,01H ; 从键盘读取一个字符 INT 21H CMP AL,0DH ; 和回车比较 JE EXIT1 ; 是回车则结束输入 CMP CX,0 ; 数字位数为空 JE CMPSPACE0 CMP CX,1 ; 数字位数为1 JE CMPSPACE1 CMP CX,2 ; 数字位数为2 JE CMPSPACE2CMPSPACE0: CMP AL,20H JE GETLOOP ; 位数为0,输入空格,忽略 J

11、MP ASCBIN ; 否则读取字符CMPSPACE1: JE ERR2 ; 位数为1,输入空格,出错CMPSPACE2: JNE ERR4 ; 位数为2后,不输入空格,错误 XOR CX,CX ; 输入空格,清零重计 JMP GETLOOP ASCBIN: SUB AL,30H ; 化为二进制 JL ERR1 ; 小于,无效字符 CMP AL,9 JG ERR1 ; 大于9是无效字符 MOV INPUTDI,AL ; 保存 INC COUNT ; 统计输入的数字个数 INC DI ; 向后移动数组 INC CX JMP GETLOOPERR1: MOV IFERROR,1 MOV DX,OF

12、FSET ERROR1 JMP RETURNERR2: MOV IFERROR, MOV DX,OFFSET ERROR2 CALL PRINT JMP RETURN ERR3: MOV DX,OFFSET ERROR3ERR4: MOV DX,OFFSET ERROR4EXIT1: MOV BL,COUNT ; 判断输入数的个数是否为零 CMP BL,0 JE ERR3 ;输入数目为0,输出错误,退出 AND BL,01H ; 判断数字是否为两位数 JNE ERR2 ;输入数字个数为奇数则出错RETURN: POP D POP DX POP CX POP BX POP AX RETGETNU

13、M ENDPPRINT PROC MOV AH,09HPRINT ENDPFINDMIN PROC PUSH DI PUSH CX MOV DI,-2 ; 数组下标 MOV CL,COUNT ; 把数组长度移入CX MOV AL,CL CBW MOV CX,AXLOP: ADD DI,2 CMP CX,DI ; 是否已经比较完毕 JE EXIT2 ; 比较完毕,退出 MOV AH,INPUTDI ;否则接着比较,移入十位数 MOV AL,INPUTDI+1 ; 移入个位数 CMP AH,MINTMP ; 比较十位数,MINTMP低地址为十位 JA LOP ;如果MINTMP小,则直接比较下一个

14、数 JE HIGHEQU ;如果十位数相等,比较个位数,再否则十位大就直接存储STOMIN: MOV MINTMP,AH MOV MINTMP1,AL JMP LOPHIGHEQU: CMP AL,MINTMP1; 比较个位数 JNB LOP ; 个位数比MINTMP大则跳到下一个数 JMP STOMIN ; 否则将当前数写入为MINTMPEXIT2: POP CX POP DIFINDMIN ENDPCODE ENDS END MAIN 实验中以空格为分隔符,空格的个数不限制,以回车为输入结束标志符。对输入的数字进行了位数和范围的严格限制,即必须是两位数字,如果数字小于10,需要补齐零。空格

15、分隔不同数字输入,回车结束。一位数后面空格为错误,回车后判断。1.iferror :如果公式的计算结果为错误,则返回指定的值;否则返回公式的结果。2.call指令(调用指令)功能主要有:将下一条指令的所在地址即程序计数器PC的内容入栈,并将子程序的起始地址送入PC,于是CPU的下一条指令就会转去执行子程序。实验D 子程序设计1.进一步掌握子程序设计方法;2.进一步掌握基本的 DOS 功能调用。1.从键盘上输入某班学生的某科目成绩。输入按学生的学号由小到大的顺序输入。2.统计检查每个学生的名次。4.为便于观察,输入学生数目不宜太多,以不超过一屏为宜。输出应便于阅读.尽可能考虑美观。5.输入要有检

16、错手段。1.如何确定一个学生在这门科目中的名次?1.可以抽取每个学生的成绩和其他所有学生的成绩进行比较,然后统计比其分数高的学生,得出该学生的名次。2.可以把学生成绩存入连续内存区域,即数组方式,取得每个学生的成绩偏移量,即成绩指针。然后比较指针所指的成绩的大小,根据比较结果移动指针完成排序。2.输入结束后,采用什么方法进行比较以得到学生的名次最为简单?采用移动指针完成排序的方法在汇编语言下实现,复杂度较高。由于人数比较少,冒泡法还是比较简洁的。冒泡法的时间和空间性能都还不错,可以接受。3.准备好模块层次图。 4.给出输出显示的形式。 答:根据输入的每个学生的ID,成绩,列出一个表,后面跟着排

17、名次数。 具体形式参见实验分析部分的输出截图。ID DB 400 DUP(?) ;存储学号 MARK DB 20 DUP(?) ; 存储分数 RANK DB 20 DUP(? 存储排名 RANKTMP DB 20 DUP(? 临时排序指针 MTMP DB ? ; 临时记录成绩 COUNTB DB ? 总的学生的个数 COUNTW DW ? ; 总的学生个数 CHEOK DB ? 输入检查标志位 ERROR DB ? 记录错误号 TMP DB 2 DUP(?判断、计数 CR DB 0DH,0AH, 回车 TAB DB 09H,09H,输出TAB键 ERR0 DB Input cannot be

18、empty! ERR2 DB Character is invalid! ERR4 DB Mark is invalid! ERR6 DB Input is invalid! ERRLIST DW ERR0,ERR2,ERR4,ERR6 TIP0 DB Please re-input: TIP1 DB Please input number of students: TIP2 DB Please input ID and MARK: PRTIP DB -RESULT- PRINFO DB ID,09H,09H,MARKRANK PRPRE1 DB ID : PRPRE2 DB MARK: BU

19、FF DB 16 ;最长的字符长度 PRES DB ? ; 存储实际输入字符数 CHAR DB 16 DUP(?) ; 实际可存储有效字符16个PRINTTIP MACRO PARA MOV DX,OFFSET PARA POP DXENDMPRINTCHAR MACRO ACHAR MOV DL,ACHARDATA,ES: MOV ES,AX CALL GETNUMBER ; 人数 CALL GETINFO ;分数 CALL SORT ; 排序 CALL PRINT ; 显示 MOV AX,4C00H;MAIN ENDP GETNUMBER PROC NEAR PUSH AX PUSH BX

20、HE: PRINTTIP TIP1GREP: CALL GETIN MOV CHEOK,0 CALL CHECK CMP CHEOK,0 JE GRETURN MOV ERROR,6 CALL PRINTERR PRINTTIP TIP0 PRINTTIP CR JMP GREPERRHERE: PRINTTIP CR PRINTTIP TIP0 JMP GREP GRETURN: CALL CHANGE MOV AL,MTMP CMP AL,0 JE ERRHERE MOV COUNTB,AL CBW MOV COUNTW,AX POP BX POP AX RETGETNUMBER ENDP

21、GETINFO PROC NEAR PUSH BX PUSH SI PRINTTIP TIP2 MOV TMP,0 ; 学号还是分数 XOR BX,BX ; ID的偏移量 XOR AX,AX ; 记录学生数目MORE: PRINTTIP CR CMP COUNTB,AL JNZ HERE1 JMP RETURN ; 计数器为0,返回父程序HERE1: CMP TMP,0 JE PR1 CMP TMP,1 JE PR2PR1: PRINTTIP PRPRE1 JMP HERE2PR2: PRINTTIP PRPRE2HERE2: CALL GETIN ; 否则接受输入 CALL CHECK ; 检查是否是数字且不为空 CMP CHEOK,0 JNE CHEFAIL JE ISID ; 输入学号 CMP TMP,1 ;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1