




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机原理软件实验报告实验二 分支、循环程序设计一实验目的1.开始独立进行汇编语言程序设计。 2.掌握基本分支,循环程序设计。3.掌握最简单的 DOS 功能调用。二实验内容1.安排一个数据区,内存有若干个正数,负数和零。每类数的个数都不超过9。2.编写一个程序统计数据区中正数,负数和零的个数。3将统计结果在屏幕上显示。三流程图 10开始DS,SS,CX,BX初始化与0相比Z=Z+1BX=BX+2结束数送入AX NB=B+1结果小于0YA=A+1NCX=0Y显示数据四源代码DATA SEGMENTZDW0 ;数据中0的个数ADW0 ;数据中大于0的个数BDW0 ;数据中小于0的个数NUMDW9,8,0,-7,6,-5,-4,3,2,-1,0,-8,-1,9,0,0,1 ;设定的一组数据,其中4个0,7个正数,6个负数,符合题目要求NDW($-NUM)/2 ;该组数据的个数TYPE0 DB 0DH, 0AH, Number of zeros : $ TYPE1DB0DH, 0AH, Number of greater than 0 : $ TYPE2DB0DH, 0AH, Number of less than 0 : $ LOCATEDWTYPE0, TYPE1, TYPE2DATA ENDSSTACK SEGMENT STACKDW128 DUP(?)STACK ENDSCODE SEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTART: MOVAX,DATA MOVDS,AX MOVAX,STACK MOVSS,AX ;初始化DS、SS指向STA MOVBX,OFFSET NUM ;将NUM中第一个数字的地址送入BX MOVCX,N ;将N中数字个数送入CXLOOP1:MOVAX,BX;取出NUM中的第一个数字CMPAX,0 ;与零相比JZIFZ;判断结果为是0,跳转到IFZ处继续执行SALAX,1 JCIFL ;判断结果是小于0,跳转到IFLINCWORD PTR A;否则,A自加,然后继续执行程序JMPCONTINUEIFL:INCWORD PTR B ;B计数加1JMPCONTINUEIFZ:INCZ ;Z计数加1CONTINUE:ADDBX,2 ;指针+2,继续送入下一数字LOOPLOOP1;循环CX次判断MOVCX,3 ;共显示3个字符串XORBX,BXDISP:MOVDX,LOCATEBX MOVAH,09H ;DOS 09号功能调用,显示字符串INT21HMOVDX,ZBX ADDDX,0 ;转换为ASCII码MOVAH,02H ;DOS 02号功能调用,显示字符INT21H ADDBX,2 ;指针+2(DW)LOOPDISPMOVAX,4C00HINT21H ;返回DOS系统CODE ENDS END START五运行结果六预习题1.十进制数 0 - 9 所对应的 ASCII 码是什么? 如何将十进制数 0 - 9 在屏幕上显示出来?答:09的ASCII码值依次为:30H,31H,32H,33H,34H,35H,36H,37H,38H,39H。用待显示数加30H即可得到对应ASCII码,将待显示数的ASCII码值赋给DX,使用“INT 21H”02号DOS功能调用显示字符。2.如何检验一个数为正,为负或为零? 你能举出多少种不同的方法?答:方法1:用test指令检查该数最高位。若为0,则为正数。否则,检测其余位判断为负数或0。方法2:用cmp指令将该数与0相比,判断标志寄存器。SFOF=0,为正数或0。否则为负数。实验三 代码转换程序设计一实验目的 1.掌握几种最基本的代码转换方法。 2.运用子程序进行程序设计。二实验内容1.从键盘上输入若干两位十进制数,寻找其中的最小值,然后在屏幕上显示出来。2.两个十进制数之间的分隔符,输入结束标志自定,但要在报告中说明。3.对输入要有检错措施,以防止非法字符输入,并有适当的提示。4.将整个程序分解为若干模块,分别用子程序实现.在报告中要给出模块层次图。三模块层次图及流程图START排序,显示输入数据显示排序十进制转换存储并显示检错开始输入数据错检错N对Y回车B,BX,AL初始化AL中ASCII码值转换为对应十进制数此数赋值给B小于BX指向的数与B比较大于BX=BX+1N比较结束Y输出最小数结束四源代码DATA SEGMENT A DB 100 DUP (0) B DB 100,0,$ STRING DB 0DH,0AH,ERROR INPUT ,0DH,0AH, $ STRING1 DB 0DH,0AH,the min number is ,0DH,0AH, $ DATA ENDS STACK SEGMENT STACK DW 50 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK INPUT PROC ;子程序 PUSH AX ;保护寄存器内容 PUSH BX ;保护寄存器内容 PUSH CX ;保护寄存器内容 PUSH DX ;保护寄存器内容 STAR: MOV CX,0 ;开始,表示输入的数是否可以构成两位十进制数 MOV BX,OFFSET A AGAIN: MOV AH,01H ;输入 INT 21H CMP AL,30H ;比较是否合法 JB SHOW CMP AL,39H JA SHOW MOV BX,AL ;存储,判断是否一个字,不是继续输入,否则向下运行 INC BX INC CX AND CX,1 JNZ AGAIN ;CX若为0,输入了两个数,可以构成一个两位十进制数 MOV CX,0 ; 判断下一输入字符 MOV AH,01H ; 输入 INT 21H MOV BX,AL INC BX CMP AL,20H ;判断是否空格:是,继续输入;否,判断是否为回车 JZ AGAIN CMP AL,0DH ; 判断是否为回车 JNZ SHOW ; 都不是,就输入错误,重新输入 JMP OKEY ; 是回车,就输入结束。否则结束子程序调用 SHOW: MOV AH,09H ; 不合法显示错误 重新输入 MOV DX,OFFSET STRING INT 21H JMP STAR OKEY: MOV BX,AL ;输入结束 POP DX POP CX POP BX POP AX RET INPUT ENDP CHANGE PROC PUSH AX PUSH BX PUSH DX MOV BX,OFFSET A ONCE: MOV AL,BX ; 读数 SUB AL,30H ; 转化为16进制数 INC BX MOV DL,10 ; 转化为16进制数 MUL DL MOV DH,BX SUB DH,30H INC BX ADD AL,DH ; 结果 CMP AL,B ; 比较哪个最小 JB YES CMP BYTE PTR BX,0DH ;判断是否是回车 JZ LAST JMP ONCE YES: MOV B,AL ; 最小数存于B CMP BYTE PTR BX,0DH JZ LAST INC BX JMP ONCE LAST: NOP MOV AL,B ;将数的个位和十位分别存储 AH存个位 AL存十位 MOV AH,0 MOV DL,10 DIV DL ADD AH,30H ;转换为ASCII码 ADD AL,30H MOV B,AL ;存到内存中 MOV B+1,AH POP DX ;pop出原保存的寄存器数据 POP BX POP AX RET CHANGE ENDP START PROC FAR ;主程序 MOV AX,DATA MOV DS,AX CALL INPUT ;调用输入子程序 MOV AH,09H MOV DX,OFFSET STRING1 ;显示提示性语句 INT 21H CALL CHANGE ;调用比较子程序 MOV AH,09H MOV DX,OFFSET B ;显示最小数 INT 21H MOV AX,4C00H INT 21H START ENDP CODE ENDS END START五运行结果六预习题 1.如何将输入的两个字符(0 - 9)变为十进制或二进制数?答:将数的ASCII码值减去30H,即可得到对应的十进制数。 2.如何将选出的最小值(二进制或十进制)变为ASCII 码再进行显示?答:用定义一个字节型数据存放十进制数(高四位表示十位,低四位表示个位)。使用cmp指令,先比较高四位,若小于,则和已存的数交换;若等于,则继续比较低四位,小于则交换。若等于,数不变。 3.你觉得采用二进制运算还是十进制运算更适合于这个实验?答:十进制更合适。实验四 子程序设计一实验目的 1.进一步掌握子程序设计方法。 2.进一步掌握基本的 DOS 功能调用。二实验内容1.从键盘上输入某班学生的某科目成绩.输入按学生的学号由小到大的顺序输入2.统计检查每个学生的名次。3.将统计结果在屏幕上显示。4.为便于观察,输入学生数目不宜太多,以不超过一屏为宜.输出应便于阅读.尽可能考虑美观。5.输入要有检错手段。三流程图检错开始初始化界面输入成绩falsetrue调用排序子程序显示结果结束四源代码DATA SEGMENT BUFFER DB 100 DB ? DB 10 DUP (?) STR1 DB please input the score of the students:,0DH,0AH,$ STR2 DB error,please input the score again:,0DH,0AH,$ STR3 DB num rank scor ,0DH,0AH,$ ;提示语句的字符串 VAR1 DW ? VAR2 DW ? CK DB ? TAB DB 100 DUP(?) DATA ENDS STACK SEGMENT STACK stack DB 100 DUP (s) STACK ENDS CODE SEGMENT PARA code ASSUME CS:CODE,DS:DATA,SS:STACK START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX ;初始化DS LEA DX,STR1 MOV AH,09H ;调用DOS 09号功能显示字符串STR1 INT 21H INPUT: LEA DX,BUFFER MOV AH,0AH ;调用DOS 0A号功能,从键盘输入字符串并存储 INT 21H LEA DI,TAB XOR CX,CX MOV AH,30H MOV DH,31H LEA BX,BUFFER+2 CALL CHECK ;调用检错子程序 CMP CK,1 JZ INPUT CALL COM ;调用排序子程序 MOV DL,0DH MOV AH,02H ;调用DOS 02号功能,显示DL字符 INT 21H MOV DL,0AH MOV AH,02H INT 21H LEA DX,STR3 ;调用DOS 09号功能,显示字符串STR3 MOV AH,09H INT 21H CALL DISPY ;调用送显程序 RET START ENDP CHECK PROC ;检验子程序 NEXT1: MOV CK,0 MOV DI,AH INC DI MOV DI,DH INC DI CMP DH,39H JZ L1 INC DH JMP L2 L1: MOV DH,30H INC AH L2: MOV AL,BX CMP AL,30H JB ERROR CMP AL,39H JA ERROR MOV DI,AL INC DI INC BX MOV AL,BX CMP AL,30H JB ERROR CMP AL,39H JA ERROR MOV DI,AL INC DI INC BX INC CX MOV AL,BX CMP AL,0DH JZ FINISH1 INC BX JMP NEXT1 ERROR: LEA DX,STR2 ;调用DOS 09号功能,显示字符串STR2 MOV AH,9 INT 21H MOV CK,1 FINISH1: RET CHECK ENDP COM PROC ;调用排序子程序 COMP1: PUSH CX MOV VAR1,CX SHL CX,1 SHL CX,1 SUB CX,4 MOV VAR2,CX POP CX DEC DI DEC DI JMP COTI COMP2: ADD DI,VAR2 COTI: MOV BL,0 MOV CX,VAR1 DEC CX AGAN: MOV AL,DI CMP AL,DI-4 JA GOON1 JB GOON3 INC DI MOV AL,DI CMP AL,DI-4 PUSHF DEC DI POPF JA GOON1 JBE GOON3 GOON1: MOV BL,-1 PUSH CX MOV CX,4 DEC DI DEC DI GOON2: MOV AL,DI XCHG AL,DI-4 MOV DI,AL INC DI LOOP GOON2 POP CX DEC DI DEC DI GOON3: 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 ;调用DOS 02号功能,显示DL字符(学号) INT 21H MOV DL,BL MOV AH,02H INT 21H MOV DL, ;调用DOS 02号功能,显示DL字符(空格) MOV AH,02H INT 21H INT 21H INT 21H MOV DL,DI MOV AH,02H ;调用DOS 02号功能,显示DL字符(排名) INT 21H INC DI MOV DL,DI MOV AH,02H INT 21H INC DI MOV DL, MOV AH,02H ;调用DOS 02号功能,显示DL字符(空格) INT 21H INT 21H INT 21H MOV DL,DI MOV AH,02H INT 21H INC DI MOV DL,DI MOV AH,02H ;调用DOS 02号功能,显示DL字符(成绩) INT 21H INC DI MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H INT 21H CMP BL,39H JZ L3 INC BL JMP NEXT2 L3: MOV BL,30H INC BH NEXT2: LOOP DISPY1 ;循环显示 RET DISPY ENDP CODE ENDS END START五运行结果六预习题1.如何确定一个学生在这门科目中的名次?答:将学生成绩按照学号依次存放在一个数据区内,设BX为指针指向首地址,使用数据结构中的排序算法进行比较(比如冒泡排序法)。2.你觉得输入结束后,采用什么方法进行比较以得到学生的名次最为简单?答:使用排序算法,通过指针排序好成绩后,其对应的学号也相应排好。3.准备好模块层次图.StartINPUT输入CHECK检错DISPY显示COM排序4.给出输出显示的形式.Num,rank,scor分别表示学生的学号,排名和分数。实验五 子程序设计一 实验目的 1.初步掌握中断程序的设计方法。2.初步掌握修改 DOS 系统中断,以适应实际使用的方法。二 实验内容1.编写一个 32 位二进制数除以 16 位二进制数的除法程序.观察当除数为 0,或超过相应寄存器范围时,程序执行的结果。2.修改零号中断服务程序,使它具有以下功能: (1)判断除数是否为 0,当除数为 0 时,显示相应的结果。 (2)当除数不为 0 时,采用适当的方法完成商超过 16 位的二进制数的除法运算。3.注意必须保护原有中断服务程序的入口地址,并在程序完毕前加以恢复。三.流程图检错开始初始化界面输入除数,被除数修改0号中断向量表falsetrue除法Y溢出N除数为0NY32位扩展输出结果恢复0号中断向量表结束四.源代码DATA SEGMENTmessage db 0AH,0DH,divisor equals 0.,0dh,0ah,$message1 DB 0AH,0DH, input error,0DH,0AH,$message2 DB PLEASE INPUT THE DIVIDEND (32),0AH,0DH,$message3 DB 0AH,0DH,PLEASE INPUT THE DIVISOR (16),0AH,0DH,$message4 DB 0AH,0DH,THE QUOTIENT IS:,$message5 DB 0AH,0DH,THE REMAINDER IS:,$ DATA ENDSSTACK SEGMENT STACK STACK STACK ENDSCODE SEGMENT;代码段ASSUME CS:CODE, SS:STACK ,DS:DATAstartproc farpush dsmov ax,0push axmov ax,datamov ds,axsti;TF中断标志置1mov al,0;保存原中断向量mov ah,35hint 21hpush espush bxpush dx;写中断向量mov ax,seg int00mov ds,axmov dx,offset int00mov al,0mov ah,25hint 21hpop ds mov ah,09hmov dx,seg message2;提示输入32位二进制0或1mov ds,dxmov dx,offset message2int 21hmov cx,10hmov ax,0000hpush axa1:mov ah,01hint 21hcmp al,0;输入数字与0比较jz a2cmp al,1;输入数字与1比较jnz error1;输入有误则跳错误显示程序stc;为1则将CF置1rcl dx,1;dx左移,移进一个1loop a1jmp a3a2:clc;为0则将CF置0rcl dx,1;dx左移,移进一个0loop a1a3: mov cx,10ha4:mov ah,01hint 21hcmp al,0jz a5cmp al,1jnz error2stcpop axrcl ax,1push axloop a4jmp a6a5:pop axclcrcl ax,1push axloop a4a6:mov ah,09hmov dx,seg message3;提示输入16位0或1除数mov ds,dxmov dx,offset message3int 21hmov cx,10ha7:mov ah,01hint 21hcmp al,0jz a8cmp al,1jnz error2stcrcl bx,1loop a7jmp a9a8:clcrcl bx,1loop a7jmp a9error1: mov ah,09h;输入错误提示mov dx,seg message1mov ds,dxmov dx,offset message1int 21hjmp a1error2: mov ah,09hmov dx,seg message1mov ds,dxmov dx,offset message1int 21hjmp a6a9:mov cx,0000hpop axdiv bxcmp bx,20hjz a14push dxpush axmov ah,09hmov dx,seg message4mov ds,dxmov dx,offset message4int 21hmov bx,08h c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人承接业务合同范本
- 理疗馆加盟合同范本
- 个人收购塑料合同范本
- 深圳设备出租合同范本
- 模特协会合同范本
- 工厂文员用工合同范本
- 足球培训协议合同范本
- 外墙真石漆甲方合同范本
- 碧桂园设计合同范本
- 保安 劳动合同范本
- 2024-2025学年高三上学期《为什么要上一个好大学?》主题班会课件
- 管道cctv检测方案
- 职业技术学校物联网应用技术专业调研报告
- GB/T 43934-2024煤矿土地复垦与生态修复技术规范
- 2023年某技术有限公司技术规范
- 秋季传染病预防课件幼儿园
- 江苏农牧科技职业学院单招《英语》考试参考题库(含答案)
- 心得报告模板
- 义务教育数学新课程标准2022年版变化与解读解读课件
- 工程结构损伤机理及桅
- 私密艾灸培训课件
评论
0/150
提交评论