版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 微机实验报告学 院 电子与信息学院 专 业 电子科学与技术(卓越班) 学生姓名 XXX 任课教师 XXX 提交日期 2014/06/23 实验二 数码转码编程及程序调试一 实验目的1掌握不同进程数及编码相互转换的程序设计方法,加深对数码转换的理解;2 进一步熟悉键盘使用方法;3. 进一步熟悉调试程序的方法。二. 实验设备装有汇编软件的IBMPC 机一台三 实验内容及步骤 计算机输入设备输入的信息一般ASCii码或BCD码表示的数据或字符,CPU处理信息一般均用二进制数进行计算或其它处理,处理结果输出的外设有必须一外设的要求变为ASCII码,BCD码或七段显示码等。因此,在应用软件中各累数制的
2、转换和代码的转换是必不可少的。计算机于外设间的数码转换关系如图21所示,数码对应关系如表21所示。1 将ASCII码表示的十进制数转换为二进制数 十进制数可表示为: 代表十进制1,2,3,···9,0;由式(2)可归纳十进制数转换为二进制数的方法:从十进制的最高位Dn开始作乘10加次位的操作,将结果再乘10再加下一个次位,如此重复,则可求出二进制的数结果来。程序流程图如图22。这里我们规定:被转换的ASCII码十进制数存放在3500h3504h单位中。而转换结果在35103511单位中.实验步骤(1) 输入程序并检查无误。(2) 在35003504h单元存入十进制
3、12的ASCII码,即e3500,并输入3030303132。(3) g2000,运行程序,并用CTR+C来中断程序返回监控态。(4) 用d3510查看结果,应为3510 0C 00(5) 反复试几组数,考查程序的正确性。 实验流程图如下:开始SI ß3500HDI ß3510HAXß0 AX*10N AX ßAX+SISIßSI+1SI+1转换完成 YDIßAX 结束程序 , 查询结果实现代码如下:STACK SEGMENT STACK 'STACK' DB 50 DUP(0) STACK ENDS CODE SEG
4、MENT ASSUME CS:CODE,SS:STACK START:MOV BX,0AH MOV SI,3500H MOV DI,3510H MOV CX,5 MOV AX,0 MOV DH,0 AGAIN:MUL BX MOV DL,BYTE PTRSI SUB DL,30H CLC ADD AX,DX INC SI LOOP AGAIN EXIT:MOV WORD PTRDI,AX MOV AX,4C00H INT 21H CODE ENDS END START实验结果如下:图2.1-1:输入3030303132,35103511是0C00(正确读数是000C)图2.1-2:输入3031
5、303233,35103511是FF03(正确读数是03FF)图2.1-3:输入3031303132,35103511是F403(正确读数是03F4)实验结论:程序执行结果正确2将从键盘输入的五位十进制数的ASCII码已存在3500起始的内存单元中。把它转换成BCD码后,再按位分别存入350A起始的内存单元内。若输入的不是十进制的ASCII码,则显示FF.实验步骤:(1) 输入程序并检查无误。(2) 在35003504H单元存入五位十进制数的ASCII码,即e3500并输入31,32,33,34,35。(3) G=2000,运行以上程序。(4) D350A,显示结果为:0000:350A 01
6、 02 03 04 CC(5) 反复试几组数,考查程序的正确性。 实验流程图如下:实验代码实现如下(实际代码实现与流程图顺序有小部分出入,整体框架一样,下同):STACK SEGMENT STACK 'STACK' DB 100 DUP(?) STACK ENDS ; CODE SEGMENT ASSUME CS:CODE,SS:STACK ORG 2000H START: MOV SI,3500H MOV DI,350AH MOV CX,05H MOV DL,0FFH AGAIN: MOV AL,BYTE PTRSI CMP AL,39H JA ERROR CMP AL,30
7、H JB ERROR SUB AL,30H MOV DI,AL JMP EXIT ERROR: MOV DI,DL EXIT: INC SI INC DI LOOP AGAIN MOV AX ,4C00H INT 21H CODE ENDS END START实验结果如下:图2.2-1:输入31 32 33 34 35,在350A开始看到:01 02 03 04 05图2.2-2:输入31 33 39 3A 34,在350A开始看到:01 03 09 FF 04 B4实验结论:程序执行结果正确3将十六位二进制数转换为ASCII码表示的十进制数。十六进制数的值域为065535,最大可转换为五位十
8、进制数。实验步骤(1) 输入程序并检查无误。(2) 在35003501H单元中存放0C00,运行程序并检查结果,应看到35103514H单元中的数依次为3030303132。实验流程图如下:代码实现如下:STACK SEGMENT STACK 'STACK' DB 100 DUP(?) STACK ENDSCODE SEGMENT ASSUME CS:CODE,SS:STACK ORG 2000H START: MOV SI,3500H MOV BX,0 MOV DI,3515H MOV AL,SI MOV AH,SI+1 MOV DX,0 MOV BX,0AH PROCG1:
9、 DEC DI DIV BX ADD DL,30H MOV DI,DL MOV DX,0 CMP AX,0 JNE PROCG1 PROCG2: CMP DI,3510H ;DI不等于3510H,即5位十进制数有相应高位是多余的,须置0 JE EXIT DEC DI MOV DL,30H MOV DI,DL JMP PROCG2 EXIT: MOV AX,4C00H INT 21H CODE ENDS END START实验结果如下:图2.3-1:输入0C00(正确读数是000C),在3510处开始看到:30 30 30 31 32图2.3-2:输入1CAE(正确读数是AE1C),在3510处
10、开始看到:34 34 35 37 32实验结论:程序执行结果正确4. 十六进制数转换为ASCII码设经过CPU处理后的十六进制存放在起始地址为3500H的内存中,把它们转换成ASCII码之后,再分别存入起始地址为3510的内存单元中。参考流程图如图25所示。实验步骤(1) 输入程序并检查无误。(2) 在35003501H单元中存入四位16进制数203B,即:e3500,并输入3B,20。(3) G2000,运行程序(4) D350A,显示结果为: 0000:350A 42 33 30 32 输入数与结果ASCII码对应顺序相反实验流程图如下:代码实现如下:STACK SEGMENT STACK
11、 'STACK' DB 100 DUP(?) STACK ENDS ;CODE SEGMENT ASSUME CS:CODE,SS:STACK ORG 2000HSTART: MOV SI,3500H MOV DI,3510H MOV CX,04H MOV AX,SIPROCG1: MOV DX,AX AND AX,0FH CMP AL,09H ;是数字,+30H JB NUMB JMP LECT ;是字母,+37H NUMB: ADD AL,30H JMP PROCG2LECT: ADD AL,37HPROCG2: MOV DI,AL PUSH CX MOV CL,04 SH
12、R DX,CL ;左移四位 POP CX MOV AX,DX INC DI LOOP PROCG1 EXIT: MOV AX,4C00H INT 21H CODE ENDS END START 实验结果如下:图2.4-1:输入3B20(实际读数是203B),在3510处开始:42 33 30 32 图2.4-2:输入A31B(实际读数是1BA3),在3510处开始:33 41 42 31实验结论:程序执行结果正确5. BCD码转换为二进制码设四个二位十进制的BCD码存放在起始地址为3500H的单元中,转换出的二进制数码存入起始为3510的内存单元中,程序流程图如图26。实验步骤:(1) 输入程
13、序并检查无误(2) 在35003501H单元中存入四个十进制数(12,34,56,78)的BCD码,即e3500,输入01.02.03.04.05.06.07.08。(3) G2000,运行程序(4) D3510,显示结果为3510 0C 00 22 00 38 00 4E 00实验流程图如下: 实验实现代码如下:STACK SEGMENT STACK 'STACK' DB 50 DUP(?) STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACKORG 2000HSTART:MOV SI,3500H MOV DI,3510H MOV CX
14、,8PROCG1:MOV AL,BYTE PTRSI MOV DL,0AH MUL DL MOV AH,AL INC SI MOV AL,BYTE PTRSI ADD AL,AH MOV AH,0 MOV DI,AX INC DI INC DI INC SI LOOP PROCG1EXIT:MOV AX,4C00H INT 21H CODE ENDS END START实验结果如下:图2.5-1:输入01 02 03 04 05 06 07 08,在3510处开始看到:0C 00 22 00 38 00 4有00 实验结论:程序执行结果正确微机实验三 分支和循环程序设计实验一、分支程序设计实验
15、1.实验目的1.掌握分支程序的结构。2掌握分支程序的设计、调试方法。2.实验设备微机一台3.内容设计一数据块间的搬移程序设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存贮区(称为目的数据块)。源数据块和目的数据块在存贮中可能有三种情况。对于两个数据块分离的情况,数据的传送从数据块的首址开始,或者从数据块的末址开始均可,但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏。可以得出以下结论:当源数据块首址目的块首址时,从数据块首址开始传送数据。当源数据块首址目的块首址时,从数据块末地址开始传送数据。 流程图: 代码实现如下:STACK SEGMENT STACK&
16、#39;STACK' DB 50 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK START: MOV CX,0AH MOV BX,3500H MOV SI,BX ;SIßBX MOV DI,BX+2 ;DIßBX+2 CMP SI,DI JA A1 ;SI>DI,首地址开始拷贝 MOV AX,SI ;SI<=DI,末地址开始拷贝 ADD AX,CX MOV SI,AX MOV AX,DI ADD AX,CX MOV DI,AX DEC SI DEC DI STD ;地址减量 REP MOVS
17、B JMP EXIT A1: CLD ;地址增量 REP MOVSBEXIT:MOV AX,4C00H INT 21H CODE ENDS END START实验结果如下:图 3.1-1:SI=3400,DI=3420时数据搬移图3.2-2:SI=3420,DI=3400时数据搬移图3.2-3:SI=3400,DI=3405,源数据与搬移地址重叠实验结论:无论SI<=DI,还是DI>SI或者源数据是否与搬移地址重叠数据均能正确搬移二、循环程序设计实验1.实验目的(1)加深对循环结构的理解。(2)掌握循环结构程序设计的方法。(3)熟练掌握调试循环程序的方法。2.实验设备TDS-MD微
18、机一台3.内容(1)编制程序使S=1+2*3+3*4+4*5+N(N+1),直到N(N+1)项大于200为止。流程图: NY开始1DX,2BLBLALBL+1AL*BLAXDX+AXDX结束AX>200 代码实现如下: STACK SEGMENT STACK 'STACK' DB 100 DUP(?) STACK ENDS DATA SEGMENT ORG 3500H RES DW 10 DUP(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK ORG 2000H START:MOV AX,DATA MOV
19、 DS,AX MOV DX,1 MOV BL,2 MOV AH,0 LEA SI,RESPROCG1:MOV AL,BL INC BL MUL BL ADD DX,AX CMP AX,200D JA EXIT JMP PROCG1EXIT: MOV WORD PTRSI,DX MOV AX,4C00H INT 21H CODE ENDS END START实验结果如下: 结果与分析:运行结果为045FH,与实际相符,程序正确。(2)求某个数据区内负数的个数设数据区的第一单元存放区内数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。为统计数据区内负数的个数,需要逐个判断区内的每一个
20、数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即得区内所包含负数的个数。 流程图: 代码实现如下: STACK SEGMENT STACK 'STACK' DB 50 DUP(?) STACK ENDS CODE SEGMENT ORG 2000H ASSUME CS:CODE,SS:STACK START:MOV DI,3510H MOV CL,BYTE PTR DI MOV CH,00H MOV BX,00H GETN: INC DI MOV AL,DI TEST AL,80H JNZ GETF LOOP GETN JMP PEND GETF: INC BL L
21、OOP GETN PEND:INC DI MOV DI,BL MOV AX,4C00H INT 21H CODE ENDS END START实验结果与分析:输入数据个数为6输入12、88、82、90、22、33得结果03结果与实际相符,程序正确。实验四子程序设计一. 实验目的、学习子程序的定义和调用方法。、掌握子程序、子程序嵌套的结构。31、掌握子程序的程序设计、编制及调试方法。二. 实验内容程序采用菜单式选择,可接收用户输入的命令(15),各命令如下:按1键完成字符串小写字母变大写字母用户输入一由英文大小写字母或数字09组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字
22、母变成大写字母,其它字符不变,并在屏幕上显示。用户按任一键,重做,按ESC键,返回主菜单。按2键完成找最大值、接收用户输入的可显示字符串(以回车结束),程序将其中ASCII码值最大的字符显示出来。按3键完成排序、接收用户输入的可显示字符串,以回车结束。程序按ASCII码值大小由大到小排序并输出显示。按4键显示时间首先提示用户对时,即用户输入时,分,秒(以空格或冒号分隔,以回车结束),然后,在屏幕上不断显示时间,格式为:××(时):××(分):××(秒),最好定点显示。用户按任一键,重新对时,按ESC键,返回主菜单。按5键,结束程序运行
23、,返回系统提示符。三 程序与流程图主程序的简略流程 子程序一的简略流程图 子程序2的流程图 子程序三的简略流程图 子程序4,显示时间流程图 代码实现如下:DATA SEGMENTTM DB 'PROGRAM FOR LAB 4:',0DH,0AH,'$'C0 DB 'PLEASE CHOOSE ONE OF THE SUBPROGRAMS(15) BY INPUTING THE PROMPT NUMBER',0DH,0AH,'$'C1 DB '1.INPUT A STRING,THEN CONVERT SMALL LETT
24、ERS TO CAPITAL LETTERS',0DH,0AH,'$'C2 DB '2.INPUT A STIRNG,THEN RETURN A CHARACTER WITH THE BIGGEST ASCII VALUE',0DH,0AH,'$'C3 DB '3.INPUT A SIRING,THEN SORT IT IN DECREASED ORDER',0DH,0AH,'$'C4 DB '4.DISPLAY THE TICKING TIME',0DH,0AH,'$'C5
25、 DB '5.EXIT',0DH,0AH,'$'E1 DB 0DH,0AH,'DO YOU WANNA CONTINUE?PRESS ANY KEY IF AGAIN,OR PRESS ESC TO RET',0DH,0AH,'$'E2 DB 0DH,0AH,'SORRY,YOU HAVE INPUT A WRONG NUMBER PLEASE TRY AGAIN',0DH,0AH,'$'E3 DB 0DH,0AH,'PLEASE INPUT A NEW TIME WITH FORM xx:
26、xx:xx',0DH,0AH,'$'E4 DB 0DH,0AH,'DO YOU WANNA TRY OTHER SUBPROGRAM (Y FOR YES ,OTHER FOR NO)',0DH,0AH,'$'E5 DB 0DH,0AH,'PLEASE INPUT THE STRING:',0DH,0AH,'$'E6 DB 'RESULT: $'E7 DB 'YOU HAVE INPUT A INCORRECT FORM,PLEASE TRY AGAIN!',0DH,0AH,
27、'$'E8 DB 0DH,0AH,'TO CONTINUE AGAIN,CHOOSE NUMBER 15: $'TS DB 'NOW THE SYSTEM TIME DISPLAY BEHIND,PRESS ANY KEY TO INTERPURT !',0DH,0AH,'$'CLF DB 0DH,0AH,'$'BUF DB 30LEN DB ?BUFF DB 30 DUP(?)T DB 5 DUP(?)DATA ENDSSTACK SEGMENT STACK 'STACK'STAPN DW 100
28、 DUP(?)TOP LABEL WORDSTACK ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE ,DS:DATA,SS:STACKSTART:MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV SP,OFFSET TOPMENU: LEA DX,CLF ;调用菜单 MOV AH,09H INT 21H LEA DX,TM MOV AH,09H INT 21H LEA DX,C0 INT 21H LEA DX,C1 INT 21H LEA DX,C2 INT 21H LEA DX,C3 INT 21H L
29、EA DX,C4 INT 21H LEA DX,C5 INT 21HP0: MOV AH,01H INT 21H SUB AL,30HP1: CMP AL,1 JNE P2 CALL PROCG1 ;调用子程序1 JMP AGAINP2: CMP AL,2 JNE P3 CALL PROCG2 ;调用子程序2 JMP AGAINP3: CMP AL,3 JNE P4 CALL PROCG3 ;调用子程序3 JMP AGAINP4: CMP AL,4 JNE P5 CALL PROCG4 ;调用子程序4 JMP AGAINP5: CMP AL,5 JNE ERROR ;输入有误,转错误提示 JM
30、P EXIT ;调用子程序5,即退出程序ERROR:LEA DX,E2 MOV AH,09H INT 21H JMP P0AGAIN:LEA DX,E4 MOV AH,09H INT 21H MOV AH,01H INT 21H CMP AL,'Y' JE ETR JMP EXIT ETR: LEA DX,E8 MOV AH,09H INT 21H JMP P0 EXIT:MOV AX,4C00H ;退出程序 INT 21HMAIN ENDPPROCG1 PROC NEAR ;子程序1,输入一段字符串,将小写字母转换成大写字母P1STEP1: LEA DX,E5 MOV AH,
31、09H INT 21H MOV AH,0AH LEA DX,BUF INT 21H LEA DX,CLF MOV AH,09H INT 21H LEA SI,BUFF DEC SIP1STEP2:INC SI MOV AL,SI CMP AL,0DH JE P1SHOW CMP AL,61H JB P1STEP2 CMP AL,7AH JA P1STEP2 SUB AL,20H MOV SI,AL JMP P1STEP2P1SHOW: MOV AL,0AH MOV SI+1,AL MOV AL,'$' MOV SI+2,AL LEA DX,E6 MOV AH,09H INT 2
32、1H LEA DX,BUFF MOV AH,09H INT 21H LEA DX,E1 INT 21H MOV AH,01H INT 21H CMP AL,1BH JNE P1STEP1 RET PROCG1 ENDPPROCG2 PROC NEAR ;子程序2,输入一段字符串,找出最大的字母P2SEP1:LEA DX,E5 MOV AH,09H INT 21H MOV AH,0AH LEA DX,BUF INT 21H MOV AH,09H LEA DX,CLF INT 21H LEA SI,BUFF MOV CL,LEN MOV CH,0P2STEP2: CLC DEC CX CMP CX
33、,0 JBE P2END LOOP1: MOV AL,SI CMP AL,SI+1 JBE NOCHA XCHG AL,SI+1 MOV SI,ALNOCHA: INC SI LOOP LOOP1P2END: LEA DX,E6 MOV AH,09H INT 21H MOV DL,SI MOV AH,02H INT 21H LEA DX,CLF MOV AH,09H INT 21H RETPROCG2 ENDPPROCG3 PROC NEAR ;子程序3,输入一段字符串,将字符串按从大到小排序P3STEP1:LEA DX,E5 MOV AH,09H INT 21H MOV AH,0AH LEA
34、 DX,BUF INT 21H MOV AH,09H LEA DX,CLF INT 21H MOV CL,LEN MOV CH,0P3STEP2:CLC DEC CX CMP CX,0 JBE P3END ;<=1个字符无须排序ROTA0:LEA SI,BUFF ;此处开始冒泡排序 MOV DX,CXROTA1:MOV AL,SI CMP AL,SI+1 JAE NO_CHANGE XCHG AL,SI+1 MOV SI,ALNO_CHANGE:INC SI LOOP ROTA1 MOV CX,DX LOOP ROTA0P3END: MOV CL,LEN MOV CH,0 LEA SI,
35、BUFFP3END1:INC SI LOOP P3END1P3END2:MOV AL,0AH ;字符串末尾设置换行 MOV SI+1,AL MOV AL,'$' MOV SI+2,AL LEA DX,E6 MOV AH,09H INT 21H MOV AH,09H LEA DX,BUFF INT 21H LEA DX,CLF INT 21H RETPROCG3 ENDPPROCG4 PROC NEAR ;子程序4, 设置时间,并显示跳动的时间SETT: LEA DX,E3 ;设置时间 MOV AH,09H INT 21H MOV AH,0AH LEA DX,BUF INT 21
36、H MOV AH,09H LEA DX,CLF INT 21H LEA DX,TS INT 21H LEA SI,BUFF LEA DI,T MOV BL,0AH HOUR:MOV AL,SI ;设置小时 SUB AL,30H MUL BL MOV AH,SI+1 SUB AH,30H ADD AL,AH CMP AL,0 JB ERROR4 ;输入的不是0-23h,转错误 CMP AL,17H JA ERROR4 MOV DI,AL MOV CX,02HMS: INC SI ;设置分钟和秒 INC SI INC SI INC DI MOV AL,SI SUB AL,30H MUL BL MO
37、V AH,SI+1 SUB AH,30H ADD AL,AH CMP AL,0 JB ERROR4 CMP AL,3BH ;输入的不是0-59min second,转错误 JA ERROR4 MOV DI,AL LOOP MS JMP DTIME ERROR4: LEA DX,E7 ;错误信息提示 MOV AH,09H INT 21H JMP SETT DTIME: LEA DI,T ;设置系统时间 MOV CH,DI MOV CL,DI+1 MOV DH,DI+2 MOV DL,0 MOV AH,2DH INT 21H JMP GTIME JMPB: JMP SETT ;由于本程序代码过长设置中间跳转,由下面的指令重新设置时间时执行 GTIME: MOV AH,2CH ;获取系统时间 INT 21H LEA DI,T MOV DI,CH MOV DI+1,CL MOV DI+2,DH LEA SI,BUF DEC SI MOV BL,0AH MOV CX,03H STIME: INC SI ;将要显示的时间转成字符串形式方便显示 INC SI INC SI MOV AL,DI MOV AH,0 DIV BL ;将十六进制时间转换成十进制时间,AH存十位,AL存低位 ADD AH,30H ADD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度新材料研发财产抵押合同3篇
- 2025年度碧桂园绿色建筑设计咨询与施工总承包服务协议3篇
- 2025年度智能交通信号系统安装合同示范文本3篇
- 2025年通脉颗粒项目可行性研究报告
- 2025年私立学校学生宿舍床上用品清洗与更换服务合同3篇
- 2025年度个人买卖房屋质量保证合同4篇
- 2025年浙江物芯数科技术有限公司招聘笔试参考题库含答案解析
- 二零二五版进出口贸易物流仓储合同2篇
- 2025年江苏南通天生置业有限公司招聘笔试参考题库含答案解析
- 2025年河南卫辉投资集团有限公司招聘笔试参考题库含答案解析
- GB/T 12723-2024单位产品能源消耗限额编制通则
- 2024年广东省深圳市中考英语试题含解析
- GB/T 16288-2024塑料制品的标志
- 麻风病防治知识课件
- 建筑工程施工图设计文件审查办法
- 干部职级晋升积分制管理办法
- 培训机构应急预案6篇
- 北师大版数学五年级上册口算专项练习
- 应急物资智能调配系统解决方案
- 2025年公务员考试时政专项测验100题及答案
- TSG ZF003-2011《爆破片装置安全技术监察规程》
评论
0/150
提交评论