西电微机原理大作业
西电 机电微机原理实验报告

微机原理实验报告姓名:学号:实验一8259中断实验一、实验目的1.掌握PC机中断处理系统的基本原理。
2.掌握外部扩展中断源的设计方法。
3.学会编写中断服务程序。
二、实验原理PC机用户可使用的硬件中断只有可屏蔽中断,由8259中断控制器管理。
中断控制器用于接收外部的中断请求信号,经过优先级判别等处理后向CPU发出可屏蔽中断请求。
三、实验内容实验要求实现8259控制器的IR1、IR3两路中断都可以通过IRQ向PC机发起中断请求,用SP1、SP2单次脉冲模拟两个中断源。
IR1中断时,在它的中断服务程序中编程显示“IR1 OK AND EXIT!”;IR3中断时,在它的中断服务程序中编程显示“IR3 OK AND EXIT!”。
采用查询方式完成。
图1-1 扩展中断电路四、实验步骤1、连接线路SP1和SP2分别接到IR1和IR3,IR1和IR3与L0和L1指示灯相连,8259CS 接到Y0上,最后将/RD、/WR、INT分别与IOR、IOW、IRQ相连接,连接好后打开电源。
2、编写程序3、汇编、编译、连接及运行五、实验程序DATA SEGMENTIOPORT EQU 0FF00H-0280HMY8259_ICW1 EQU IOPORT +280H ;实验系统中8259的ICW1端口地址MY8259_ICW2 EQU IOPORT +281H ;实验系统中8259的ICW2端口地址MY8259_ICW3 EQU IOPORT +281H ;实验系统中8259的ICW3端口地址MY8259_ICW4 EQU IOPORT +281H ;实验系统中8259的ICW4端口地址MY8259_OCW1 EQU IOPORT +281H ;实验系统中8259的OCW1端口地址MY8259_OCW2 EQU IOPORT +280H ;实验系统中8259的OCW2端口地址MY8259_OCW3 EQU IOPORT +280H ;实验系统中8259的OCW3端口地址MSG1 DB 0DH,0AH,'DVCC PCI CARD INTERRUPT',0DH,0AH,'$'MSG2 DB 0DH,0AH,'PRESS ANY KEY TO EXIT!',0DH,0AH,'$'MSG3 DB 0DH,0AH,'IR1 OK AND EXIT!',0DH,0AH,'$'MSG4 DB 0DH,0AH,'IR3 OK AND EXIT!',0DH,0AH,'$'DATA ENDSSTACKS SEGMENTDB 100 DUP (?)STACKS ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKS,ES:DATASTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKSMOV SS,AXMOV AX,DATAMOV DS,AXMOV DX,OFFSET MSG1MOV AH,09HINT 21HMOV DX,OFFSET MSG2MOV AH,09HINT 21HSTART1: MOV DX,MY8259_ICW1 ;初始化实验系统中8259的ICW1 MOV AL,13H ;边沿触发、单片8259、需要ICW4OUT DX,ALMOV DX,MY8259_ICW2 ;初始化实验系统中8259的ICW2MOV AL,08HOUT DX,ALMOV DX,MY8259_ICW4 ;初始化实验系统中8259的ICW4MOV AL,01H ;非自动结束EOIOUT DX,ALMOV DX,MY8259_OCW1 ;初始化实验系统中8259的OCW1MOV AL,0F5H ;打开IR1和IR3的屏蔽位OUT DX,ALQUERY: MOV DX,MY8259_OCW3 ;向8259的OCW3发送查询命令MOV AL,0CHOUT DX,ALNOPNOPNOPMOV DX,MY8259_OCW3IN AL,DX ;读出查询字TEST AL,80H ;判断中断是否已响应JZ QUERY ;没有响应则继续查询AND AL,07HCMP AL,01HJE IR1ISR ;若为IR1请求,跳到IR1处理程序CMP AL,03HJE IR3ISR ;若为IR1请求,跳到IR1处理程序JMP EOIQUERY1: MOV DL,0FFHMOV AH,06HINT 21HJZ START1MOV AH,4CHINT 21HIR1ISR: MOV DX,OFFSET MSG3 ;IR1处理,显示字符串'IR1 OK AND EXIT'MOV AH,09HINT 21HJMP EOIIR3ISR: MOV DX,OFFSET MSG4 ;IR1处理,显示字符串'IR3 OK AND EXIT'MOV AH,09HINT 21HEOI: MOV DX,MY8259_OCW2 ;向实验系统中8259发送中断结束命令MOV AL,20HOUT DXMOV AL,20H ;SEND EOIOUT 0A0H,ALOUT 20H,ALPOP DSPOP DXPOP AXJMP START1CODE ENDSEND START六、实验结果接好电路,编好程序,打开电源后,两个LED指示L0和L1灯都熄灭;编译、链接、运行程序,8259控制器的IR1、IR3两路中断可通过IRQ向PC机发起中断请求,按下SP1,IR1中断,指示灯L0亮,电脑屏幕上显示“IR1 OK AND EXIT!”;按下SP2, IR3中断,指示灯L1亮,电脑屏幕上显示“IR3 OK AND EXIT!”七、实验中遇到的问题及解决方法最初认为要按照原理图把所有线都接上,后来知道了直接用排线连接就好,同时还能降低短路的可能性。
西电微机原理实验报告

微机系统实验报告班级: 031214 学号: 03121370 姓名:孔玲玲地点: E-II-312 时间:第二批实验一汇编语言编程实验一、实验目的(1)掌握汇编语言的编程方法(2)掌握DOS功能调用的使用方法(3)掌握汇编语言程序的调试运行过程二、实验设备PC机一台。
三、实验内容(1)将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能调用完成必要提示信息的显示。
(2) 在屏幕上显示自己的学号姓名信息。
(3)循环从键盘读入字符并回显在屏幕上,然后显示出对应字符的ASCII码,直到输入“Q”或“q”时结束。
(4)自主设计输入显示信息,完成编程与调试,演示实验结果。
考核方式:完成实验内容(1)(2)(3)通过,完成实验内容(4)优秀。
实验中使用的DOS功能调用: INT 21H表3-1-1 显示实验中可使用DOS功能调用AH 值功能调用参数结果1 键盘输入并回显AL=输出字符2 显示单个字符(带Ctrl+Break检查) DL=输出字符光标在字符后面6 显示单个字符(无Ctrl+Break检查) DL=输出字符光标在字符后面8 从键盘上读一个字符AL=字符的ASCII码9 显示字符串DS:DX=串地址,‘$’为结束字符光标跟在串后面4CH 返回DOS系统AL=返回码四、实验步骤(1)运行QTHPCI软件,根据实验内容编写程序,参考程序流程如图3-1-1所示。
(2)使用“项目”菜单中的“编译”或“编译连接”命令对实验程序进行编译、连接。
(3)“调试”菜单中的“进行调试”命令进入Debug调试,观察调试过程中数据传输指令执行后各寄存器及数据区的内容。
按F9连续运行。
(4)更改数据区的数据,考察程序的正确性。
五、实验程序DATA SEGMENTBUFFER DB '03121370konglingling:',0AH,0DH,'$'BUFFER2 DB 'aAbBcC','$'BUFFER3 DB 0AH,0DH,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXmov ah,09hmov DX,OFFSET BUFFERint 21hMOV SI,OFFSET BUFFER2lab1:cmp BYTE PTR [SI],'$'je lab2MOV AL,DS:[SI]AND AL,0F0H ;取高4位MOV CL,4SHR AL,CLCMP AL,0AH ;是否是A以上的数JB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV AL,DS:[SI]AND AL,0FH ;取低4位CMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21Hadd SI,1jmp lab1lab2:mov ah,09hmov DX,OFFSET BUFFER3int 21hmov ah,01hint 21hcmp al,'q'je lab3mov BL,ALAND AL,0F0H ;取高4位MOV CL,4SHR AL,CLCMP AL,0AH ;是否是A以上的数JB C4ADD AL,07HC4: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV AL,BLAND AL,0FH ;取低4位CMP AL,0AHJB C5ADD AL,07HC5: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21Hjmp lab2lab3:mov ah,4chint 21hCODE ENDSend START六、实验结果实验二数码转换实验一、实验目的(1)掌握不同进制数及编码相互转换的程序设计方法。
(完整word版)西电微机原理上机

4.37 (上机题)编写程序实现,将缓冲区BUFFER中的100个字按递增排序,并按下列格式顺序显示:数据1 <原序号>数据2 <原序号>……算法流程图:调试问题、心得体会:通过这道题,熟悉了流程图画法,掌握了产生随机数,“冒泡法”排序,子函数编写调用等的基本过程,尤其对于中断调用,并利用ASCII码回显和对课本字节型数据“冒泡法”排序改进为字形排序的过程,是我受益匪浅。
并且亲身实践了源程序的汇编、调试也连接。
问题:将字节型冒泡法直接应用于该题,导致出错,该题存储的是字型数据!原因在于只是排列的AL中的数值,并不是产生的随机数!同时对于字型与字节型在运算类指令中的应用还是有误,以及其他的一些小错误,应加以改善!运行结果:程序代码:STACK SEGMENT STACK 'STACK'DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTBUFFER LABEL WORDX=17REPT 100X=(X+80)mod 43DW XENDMBUF DW 100 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXLEA SP,TOPMOV CX,100LEA SI,BUFFERLEA DI,BUFL1:MOV AX,[SI]INC SIINC SIMOV [DI],AXINC DIINC DILOOP L1MOV CX,100DEC CXLEA SI,BUFFERPUSH CXADD CX,CXADD SI,CXPOP CXL2:PUSH CXPUSH SIL3:MOV AX,[SI]CMP AX,[SI-2]JAE NOXCHGXCHG AX,[SI-2]MOV [SI],AXNOXCHG:LOOP L3POP SIPOP CXLOOP L2MOV CX,100LEA SI,BUFFER L4:MOV AX,[SI] CALL DISPAX ADD SI,2CALL XIAOYU CALL XUHAOCALL DAYUCALL DISPCR LOOP L4MOV AH,4CHMOV AL,0INT 21H DISPAX PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DIMOV BX,10MOV CX,3L7:XOR DX,DXDIV BXMOV [DI],DX INC DIINC DILOOP L7MOV CX,3L8:DEC DIDEC DIMOV AL,[DI] ADD AL,30HMOV AH,02MOV DL,ALINT 21HLOOP L8POP DXPOP CXPOP BXPOP AXRET DISPAX ENDP DISPCR PROC NEAR PUSH AXPUSH DXMOV AH,2MOV DL,0AH INT 21HMOV AH,2MOV DL,0DH INT 21HPOP DXPOP AXRET DISPCR ENDP XIAOYU PROC NEAR PUSH AXPUSH DXMOV AH,02 MOV DL,3CH INT 21HPOP DXPOP AXRET XIAOYU ENDP XUHAO PROC NEAR PUSH AXPUSH BXPUSH CXPUSH SIMOV CX,100 MOV BX,AX LEA SI,BUF L5:CMP BX,[SI] JZ L6ADD SI,2LOOP L5L6:MOV AX,101SUB AX,CXCALL DISPAXPOP SIPOP CXPOP BXPOP AXRETXUHAO ENDPDAYU PROC NEARPUSH AXPUSH DXMOV AH,02MOV DL,3EHINT 21HPOP DXPOP AXRETDAYU ENDPCODE ENDSEND START4.38 (上机题)按同余法产生一组随机数N(1<N<=50),并按N+50赋给45名同学的5门课程的成绩,要求编程实现计算每个同学的平均成绩,并根据平均成绩统计全班的成绩各等级的人数(A:90~100,B:80~89,C:70~79,D:66~69,E:60~65,F:60分以下),按下列格式显示:Total <总人数>A: <人数1>B: <人数2>C: <人数3>D: <人数4>E: <人数5>F: <人数6>算法流程图:调试问题、心得体会:通过该问题,进一步练习了通过流程图分析设计程序的功能,掌握了随机数产生,子函数调用,分支程序,循环程序,中断调用等过程,进行了调试,找出了数值无法转化为十进制并显示的问题,原因在于未定义临时存储单元。
西安电子科技大学微机原理上机题37题

编写程序实现将缓冲区BUFFER中的100个字按递增排序,并按下列格式顺序显示:数据1 <原序号>数据2 <原序号>数据3 <原序号>················程序如下(效果图):N=100DATAS SEGMENTBUFFER LABEL WORDX=55519REPT 100X=(X+7517)mod 65535DW XENDMNUMBER LABEL BYTEY=0REPT 100Y=Y+1DB YENDMDECIMAL DB 5 DUP(?)M DW 1 DUP(?)DATAS ENDSSTACKS SEGMENTDW 100H DUP(?)TOP LABEL WORDSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV ES,AXMOV AX,STACKSMOV SS,AXLEA SP,TOPXOR AX,AX ;开始程序LEA SI,BUFFERLEA DI,NUMBERCALL SORTMOV CX,N ;显示程序开始L1:MOV AX,[SI]MOV M,5CALL DISPAXDCALL DISPEMADD SI,2 ;显示数值XOR AX,AXMOV AL,[DI]MOV M,3CALL DISPAXDCALL DISPCRINC DI ;显示序号LOOP L1MOV AH,4CHMOV AL,0INT 21HSORT PROC NEARPUSH SIPUSH DIPUSH AXPUSH BXPUSH CXMOV CX,N;开始冒泡程序DEC CXLP1: ;外循环PUSH SIPUSH DIPUSH CXLP2: ;内循环MOV AX,[SI]CMP AX,[SI+2]JBE NOXCHGXCHG AX,[SI+2]MOV [SI],AXMOV BL,[DI]XCHG BL,[DI+1]MOV [DI],BLNOXCHG:ADD SI,2INC DILOOP LP2POP CXPOP DIPOP SILOOP LP1 ;冒泡结束POP CXPOP BXPOP AXPOP DIPOP SIRETSORT ENDPDISPAXD PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DILEA DI,DECIMALCALL TRANS16TO10MOV CX,MMOV BX,CXDEC BXLEA DI,DECIMAL[BX];指向最高位MOV AH,2DISPAXD2:MOV DL,[DI]ADD DL,30HDEC DIINT 21HLOOP DISPAXD2POP DIPOP DXPOP CXPOP BXPOP AXRETDISPAXD ENDPTRANS16TO10 PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DIMOV BX,10MOV CX,MTRANS1:XOR DX,DXDIV BXMOV [DI],DLINC DILOOP TRANS1POP DIPOP DXPOP CXPOP BXPOP AXRETTRANS16TO10 ENDPDISPEM PROC NEARPUSH AXPUSH DXMOV AL,20HMOV AH,02MOV DL,ALINT 21H ;显示一位字符POP DXPOP AXRETDISPEM ENDPDISPCR PROC NEARPUSH AXPUSH DXMOV AL,0AHMOV AH,02MOV DL,ALINT 21H ;显示一位字符POP DXPOP AXRETDISPCR ENDPCODES ENDSEND START。
15秋西电《微机原理与应用》在线作业 答案

西电《微机原理与应用》在线作业一、判断题(共 25 道试题,共 100 分。
)1. 判断下列语句语法是否正确:MOV [X][SI],T1 . 错误. 正确正确答案:2. 判断下列语句语法是否正确:MOVS. 错误. 正确正确答案:3. 判断下列语句语法是否正确:MOV S, X. 错误. 正确正确答案:4. 判断下列语句语法是否正确:SHL X,3. 错误. 正确正确答案:5. 判断下列语句语法是否正确: X,S. 错误. 正确正确答案:6. 判断下列语句语法是否正确: X,L. 错误. 正确正确答案:7. 判断下列语句语法是否正确:JMP [X]. 错误. 正确正确答案:8. 判断下列语句语法是否正确:N X,S. 错误. 正确正确答案:9. 判断下列语句语法是否正确:MOV [X],L. 错误. 正确正确答案:10. 判断下列语句语法是否正确:XHG X,2100. 错误. 正确正确答案:11. 判断下列语句语法是否正确:MOV WOR PTR [I]+3,200 . 错误. 正确正确答案:12. 判断下列语句语法是否正确: [X],100. 错误. 正确正确答案:13. 判断下列语句语法是否正确:IN 100. 错误. 正确正确答案:14. 判断下列语句语法是否正确:MOV S,1000H. 错误. 正确正确答案:15. 判断下列语句语法是否正确:MOV 20H,L. 错误. 正确正确答案:16. 判断下列语句语法是否正确:PUSH 12H. 错误. 正确正确答案:17. 判断下列语句语法是否正确:MUL 50. 错误. 正确正确答案:18. 判断下列语句语法是否正确:MOV S, SG VRW. 错误. 正确正确答案:19. 判断下列语句语法是否正确:JMP X. 错误. 正确正确答案:20. 判断下列语句语法是否正确:IV L. 错误. 正确正确答案:21. 判断下列语句语法是否正确:. 错误. 正确正确答案:22. 判断下列语句语法是否正确:XHG X,L . 错误. 正确正确答案:23. 判断下列语句语法是否正确:MOV X,L . 错误. 正确正确答案:24. 判断下列语句语法是否正确:PUSH X . 错误. 正确正确答案:25. 判断下列语句语法是否正确:LL X. 错误. 正确正确答案:。
西安电子科技大学微机原理大作业

西安电子科技大学微机原理大作业第一次上机一、实验目的1. 熟练掌握8086/8088的各种寻址方式及应用。
2.掌握DEBUG调试程序中的一些常用命令的使用方法,为以后的实验打下基础二、实验仪器586微机 1台三、实验内容1.关于数据的寻址方式练习8086/8088 提供多种方式实现操作数寻址,大体可分为7种:a. 立即寻址b. 寄存器寻址c. 直接寻址d. 寄存器间接寻址e. 寄存器相对寻址f. 基址变址寻址g. 基址变址且相对寻址掌握8086/8088的这些寻址方式,是学习汇编语言编程的关键。
指令SRC 寻址方式SRC的地址AX 推算值AX 实际值MOV AX, CX寄存器寻址0005 0005 MOV AX, 500H 立即寻址0500 0500 MOV AX, TABLE 直接寻址1541:0004 A5A 4 A5A 4MOV AX, ES:[BX] 寄存器间接寻址 1542:0004 C5C 4 C5C4MOV AX, [BX+05H] 寄存器相对寻址 1541:0009 AAA 9 AAA 9 MOV AX,寄存器相153FB8B B8B7 MOV AX, TABLE [BX] 寄存器相对寻址 1541:0008 A9A 8 A9A8MOV AX, 07H [BX] 寄存器相对寻址 1541:000B ACA B ACA BMOV AX, [BP]寄存器间接寻址 153F :0003 B4B 3 B4B 3 MOV AX, TABLE [BP] 寄存器相对寻址 1541:0007 A8A 7 A8A 7 MOV AX, 08H [BP] 寄存器相对寻址 153F :000B BCB B BCB B MOV AX, [BP+06H] 寄存器相对寻址 153F :0009 BAB 9 BAB 9 MOV AX,寄存器相1541A7A A7A6MOV AX, [BP]+05H 寄存器相对寻址153F:0008B9B8B9B8MOV AX, ES: [SI+03H] 寄存器相对寻址1542:0005C6C5C6C5MOV AX, [DI+06H] 寄存器相对寻址1541:0007A8A7A8A7MOV AX, [DI]+05H 寄存器相对寻址1541:0006A7A6A7A6MOV AX, TABLE [SI] 寄存器相对寻址1541:0006A7A6A7A6MOV AX, [SI] 寄存器间接寻址1541:0002A3A2A3A2MOV AX, TABLE 寄存器相1541A6A A6A[DI] 对寻址:00055 5MOV AX, [SI]+05H 寄存器相对寻址1541:0007A8A7A8A7MOV AX, [BX] [DI+01H] 基址变址且相对寻址1541:0006A7A6A7A6MOV AX, [BX] [SI]+03H 基址变址且相对寻址1541:0009AAA9AAA9MOV AX, TABLE [BX] [SI] 基址变址且相对寻址1541:000AABAAABAAMOV AX, ES:[BX] [DI] 基址变址寻址1542:0005C6C5C6C5MOV AX, [BP] [DI+02H] 基址变址且相对寻址153F:0006B7B6B7B6MOV AX, TABLE 基址变址1541A9A A9A[BP] [DI] 且相对寻址:00088 8MOV AX, ES:[BP] [SI] 基址变址寻址1542:0005C6C5C6C5MOV AX, [BP] [SI+05H] 基址变址且相对寻址153F:000ABBBABBBAMOV AX, 03H [BP] [DI] 基址变址且相对寻址153F:0007B8B7B8B7MOV AX, [BP] [SI] 基址变址寻址153F:0005B6B5B6B5MOV AX, [BP+02H] [DI+03H] 基址变址且相对寻址153F:0009BAB9BAB9MOV AX, TABLE [BP+02H][DI+03H] 基址变址且相对寻址1541:000DAEADAEAD第二次上机一、实验目的1. 熟练掌握汇编语言程序设计的方法及上机步骤。
西安电子科技大学微机原理上机要求及必做题目答案(汇编实现)

西安电子科技大学微机原理上机必做题目及汇编程序答案1、编写求十进制数12678532与21736543之和的程序,并将和以十进制数的形式送屏幕显示。
编程要求与提示:[1]两个加数均以压缩(组合)十进制数形式存放在ADD1和ADD2为首址的存贮器单元。
[2]和以压缩十进制数的形式存入SUM以下单元。
[3]将和送到屏幕显示部分功能的实现采用子程序的形式。
汇编语言实现如下:STACK SEGMENT STACKDB10H DUP(00)STACK ENDSDATA SEGMENTADD1DB12H,67H,85H,32HADD2DB21H,73H,65H,43HSUM DB4H DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,DATAMOV ES,AXMOV AX,STACKMOV SS,AXLEA SI,ADD1[3]LEA BX,ADD2[3]LEA DI,SUM[3]MOV CX,4CLCL1:MOV AL,[SI]ADC AL,[BX]DAAMOV[DI],ALDEC SIDEC BXDEC DILOOP L1CALL DISPAL;-------------------------------------EXITPROC:MOV AH,4CH;结束程序MOV AH,1INT21H;-------------------------------------DISPAL PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DILEA DI,SUMMOV CX,4DISPAL2:MOV AL,[DI]SHR AL,1SHR AL,1SHR AL,1SHR AL,1MOV AH,2MOV DL,ALADD DL,30HINT21HMOV AL,[DI]AND AL,0FHMOV AH,2MOV DL,ALADD DL,30HINT21HINC DILOOP DISPAL2POP DIPOP DXPOP CXPOP BXPOP AXRETDISPAL ENDPCODE ENDSEND START2、有一个首地址为A的N字数组,请编程序使该数组中的数按从大到小的次序排列。
西电微机实验报告

西电微机实验报告引言本实验通过学习微机原理和使用相应软件工具,掌握西电微机的基本配置和操作。
本实验主要包括硬件部分和软件部分。
硬件部分主要涉及微机组成和接线;软件部分则包括微机启动和应用软件的使用。
通过本实验,可以加深对微机原理的理解和掌握西电微机的使用。
实验内容硬件部分1. 搭建微机系统主机和外设的连接。
按照提供的连接图和说明,连接主机和显示器、键盘、鼠标、扬声器等外设,并确认连接无误。
2. 检查硬件接线。
确认各个连接口的接触良好,避免松动或脱落导致电流不稳定或数据传输错误。
软件部分1. 启动微机系统。
按照提供的启动指南,打开电源,并检查显示器是否正常显示主机开机画面。
2. 学习操作系统的基本使用。
熟悉微机系统的操作界面、文件管理、软件运行等基本操作,并能够通过鼠标和键盘完成相应操作。
3. 运行应用软件。
通过应用软件,如文档编辑、图片处理、音频播放等,来实践操作系统的使用。
实验结果在硬件部分,我根据提供的连接图和说明,顺利地连接了主机和外设。
在检查硬件接线时,我认真检查了每个连接口,确保其接触良好。
在软件部分,启动微机系统时,显示器正常显示主机开机画面。
通过学习操作系统的基本使用,我掌握了微机系统的操作界面,并能够通过鼠标和键盘完成相应操作。
在运行应用软件时,我成功地进行了文档编辑、图片处理和音频播放等操作。
总体来说,硬件和软件部分的实验都在我的预期范围内顺利进行,并且能够熟练地使用微机系统进行各种操作。
实验总结通过本次实验,我对微机原理有了更深入的了解,掌握了西电微机的基本配置和操作。
通过实际操作,我对微机系统的组成和连接方式有了更直观的认识,并能够独立完成硬件的搭建和连接。
在软件部分,通过学习操作系统的基本使用和运行应用软件,我对微机系统的操作界面和功能有了更深入的理解。
我能够通过鼠标和键盘完成各种操作,并熟练地运行应用软件。
通过本次实验,我不仅加深了对微机原理的理解,同时也提高了自己的动手能力和问题解决能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言程序设计综合实验姓名:***学号:*********** 2016年12月25日题目功能及要求题目要求编写程序实现下列5项功能,通过从键盘输入1~5进行菜单式选择:(1)按数字键“1”,完成将字符串中的小写字母变换成大写字母。
用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),变换后按下列格式在屏幕上显示:<原字符串>例如:abcdgyt0092<新字符串> ABCDGYT0092按任一键重做;按Esc键返回主菜单。
(2)按数字键“2”,完成在字符串中找最大值。
用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),找出最大值后按下列格式在屏幕上显示:<原字符串> The maximum is <最大值>.按任一键重做;按Esc键返回主菜单。
(3)按数字键“3”,完成输入数据组的排序。
用户输入一组十进制数值(小于255),然后变换成十六进制数,并按递增方式进行排序,按下列格式在屏幕上显示:<原数值串><新数值串>按任一键重做;按Esc键返回主菜单。
(4)按数字键“4”,完成时间的显示。
首先提示用户对时,即改变系统的定时器HH:MM:SS(以冒号间隔,回车结束),然后在屏幕的右上角实时显示出时间:HH:MM:SS。
按任一键重新对时;按Esc键返回主菜单。
(5)按数字键“5”,结束程序的运行,返回操作系统。
程序功能及分析:程序主干:(1)主程序:通过调用屏幕初始化子程序、光标位置设定子程序、清屏子程序、菜单显示子程序、命令解析子程序完成显示器初始化,设置光标位置,打印程序菜单列表以及用户输入提示信息,并等待用户从键盘输入1~5进行菜单选择。
用户输入错误会被要求重输。
子程序跳转利用数据段转移地址查找表实现。
从子服务退回时,重新开始上述操作。
(2)子服务一:将字符串中的小写字母转换成大写字母,并输出到屏幕上。
先调用字符串输出子程序输出提示信息,后调用字符串输入子程序将用户从键盘输入的字符串读到BUFFER1存储区,后逐个判断字符是否为小写字母,如果是,则通过逻辑与进行转化,完成后,将结果放置到BUFFER2,后调用字符串输出子程序完成输出。
然后输出是否重做提示信息,调用无回显的字符读入子程序,并判断退出到主程序或重做。
(3)子服务二:找出一字符串中ASCII码最大的字符并输出。
先调用字符串输出子程序输出提示信息,后调用字符串输入子程序将用户从键盘输入的字符串读到BUFFER1存储区,将AL赋初值为第一个字符,后将AL作为暂时最大值与各字符逐个比较,若小于则将其值赋给AL,否则不赋。
后将结果与提示信息生成字符串,后调用字符串输出子程序完成输出。
然后输出是否重做提示信息,调用无回显的字符读入子程序,并判断退出到主程序或重做。
(4)子服务三:读入一组十进制数,递增排序,并原格式输出。
先调用字符串输出子程序输出提示信息,后调用字符串输入子程序将用户从键盘输入的字符串读到BUFFER1存储区,后调用十进制数转二进制数子程序,将转换数据放置到BUFFER2,再利用冒泡算法对BUFFER2内的数据递增排序,再调用二进制数转十进制数子程序将BUFFER2内的二进制数转化为十进制数,放置到BUFFER3存储区内,并调用字符串格式修正子程序将不必要的前导’0’删除,再调用字符串输出子程序将BUFFER3内的数据输出。
对于非法输入(数值超过255、非法字符)会给出错误提示信息。
然后输出是否重做提示信息,调用无回显的字符读入子程序,并判断退出到主程序或重做。
(5)子服务四:完成时间的显示、修改。
调用字符串输出子程序将是否更改时间提示信息输出,并调用无等待字符读入子程序等待用户输入。
然后通过DOS功能调用读出系统时间,后调用二进制转十进制数子程序,将系统时间显示到屏幕右上方。
如果用户确认修改时间,则调用字符串读入子程序将时间放置到BUFFER1,后调用十进制数转二进制数子程序并将结果放置到BUFFER2,后通过DOS功能调用将数据送给系统,如果出错则给出出错信息。
然后输出是否重做提示信息,调用无回显的字符读入子程序,并判断退出到主程序或重做。
(6)子服务五:退出到系统。
通过DOS功能调用完成。
辅助子程序:(1)命令解析子程序:完成对用户输入选择信息的检查,合法则安排服务跳转,否则要求用户重做。
(2)菜单显示子程序:调用字符串输出子程序将菜单输出到屏幕上。
(3)屏幕初始化子程序:通过BIOS功能调用将屏幕设置成80*25字符模式。
(4)光标位置设定:通过BIOS功能调用完成设定。
(5)字符串显示子程序:通过DOS功能调用完成。
(6)清屏子程序:通过重新设置屏幕显示模式到达清屏目的。
(7)字符串读入子程序:通过DOS功能调用完成字符串输入,数据放在BUFFER1。
(8)字符读入子程序:通过DOS功能调用完成。
(9)无等待的字符读子程序:通过DOS功能调用完成。
(10)无回显的字符读入子程序:通过DOS功能调用完成。
(11)字符串结束符添加子程序:在指定存储区的字符串的最后添加回车、换行、字符串结束符。
(12)字符输出子程序:通过DOS功能调用完成。
(13)十进制数转二进制数子程序:利用加权求和公式将读入的十进制数(ASCII码字符串表示的数字)转化成二进制数并放到BUFFER存储区,其中第一个字节变量值为数据个数。
具有非法字符判定、数值超过255等判断。
(14)二进制数转十进制数子程序:利用除10取余并逆序的算法将每一个二进制数转化为十进制数(ASCII字符串),将输出放置到BUFFER3存储区。
(15)字符串前导’0’删除子程序:将十进制数(ASCII码字符串)高位的前导’0’删除。
汇编源程序STACK SEGMENT'STACK'DW 4096 DUP('C')TOP LABEL WORDSTACK ENDSDATA SEGMENTTRANSFORM DB'1.TRANSFORM', 0DH,0AH,'$'MAX DB'2.MAX',0DH,0AH,'$'SORT DB'3.SORT',0DH,0AH,'$'TIME DB'4.TIME',0DH,0AH,'$'EXIT DB'5.EXIT',0DH,0AH,'$'WAITING DB'PLEASE INPUT NUM 1-5 TO SELECT SERVICE:',0DH,0AH,'$' TIP DB'PLEASE INPUT A STRING',0DH,0AH,'$'TIPNUM DB'PLEASE INPUT A GROUP OF DECIMAL',0DH,0AH,'$'ANYKEY DB'PRESS ANY KEY TO CONTINUE',0DH,0AH,'$'MAXIMUM DB'THE MAXIMUM IS:$ 'INPUT_TIME DB'PLEASE INPUT CURRENT TIME LIKEHH:MM:SS',0DH,0AH,'$'QUESTION DB'DO YOU WANT TO SET TIME(Y/N)',0DH,0AH,'$'INPUT_ERROR DB'ERROR OR INVALID INPUT',0DH,0AH,'$'SUCCESS DB'SET TIME SUCCEED',0DH,0AH,'$'STRING DW TRANSFORM,MAX,SORT,TIME,EXIT,WAITINGSERVICE DW TRANS,FIND_MAX,SORTING,SET_TIME,EXIT_TOSYSBUFFER1 DB 512 DUP('C') ;INPUT BUFFERBUFFER2 DB 512 DUP('C') ;PROCESS WORKSPACEBUFFER3 DB 512 DUP('C') ;OUTPUT BUFFERDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV ES,AXLEA AX,TOPMOV SP,AXCALL SCREEN_INITMAIN_AGAIN:CALL CLEAR_SCREENCALL DISPLAY_MENUCALL GET_CHARCALL ORDER_PARSEJMP MAIN_AGAINMOV AH,4CHINT 21HORDER_PARSE PROC NEAR ;RETURN AL=-1 IF ERROR ELSE INVOKE SERVICE PUSH AXPUSH BXAND AL,0FHCMP AL,1JB ERROR_OVERCMP AL,5JA ERROR_OVERLEA BX,SERVICEDEC ALSHL AL ,1XOR AH,AHADD BX,AXCALL CLEAR_SCREENCALL word ptr [BX]POP BXPOP AXJMP OVER_ORDERERROR_OVER :MOV AL,0FFHOVER_ORDER:RETORDER_PARSE ENDPDISPLAY_MENU PROC NEAR ;display menu including five items PUSH DXPUSH CXPUSH SIMOV DH,0BHMOV DL,14HMOV CX,06HLEA SI,STRINGNEXT_DIS:MOV BH,0CALL CURSOR_SETPUSH DXMOV DX,[SI]ADD SI,02HCALL STRING_DISPLAYPOP DXINC DHLOOP NEXT_DISPOP SIPOP CXPOP DXRETDISPLAY_MENU ENDPSCREEN_INIT PROC NEAR ;set screen mode 80*25 character PUSH AXMOV AH,0MOV AL,02HINT 10HPOP AXRETSCREEN_INIT ENDPCURSOR_SET PROC NEAR ;set cursor BH PAGE,DH ROW,DL COLUMN PUSH AXMOV AH,02HINT 10HPOP AXRETCURSOR_SET ENDPSTRING_DISPLAY PROC NEAR ;display string DX ADDRESS PUSH AXMOV AH,09HINT 21HPOP AXRETSTRING_DISPLAY ENDPCLEAR_SCREEN PROC NEAR ;clear screenPUSH AXMOV AX,3INT 10HPOP AXRETCLEAR_SCREEN ENDPGET_CHAR_DIR PROCPUSH DXMOV AH,06HMOV DL,0FFHINT 21HPOP DXRETGET_CHAR_DIR ENDPGET_CHAR_N PROC NEAR;AL<=INPUT CHAR,NO DISPLAY MOV AH,07HINT 21HRETGET_CHAR_N ENDPGET_CHAR PROC NEAR ;AL<=IMPUT CHAR PUSH DXMOV AH,01HINT 21HPUSH AXMOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHINT 21HPOP AXPOP DXRETGET_CHAR ENDPGET_STRING PROC NEAR ;DS:DX<=STRINGPUSH AXPUSH DXPUSH BXPUSH SILEA DX,BUFFER1MOV BUFFER1,0FFHMOV AH,0AHINT 21HMOV BL,BUFFER1+1XOR BH,BHLEA SI,BUFFER1[BX+2] CALL STR_ENDPOP SIPOP BXPOP DXPOP AXRETGET_STRING ENDPTRANS PROC ;PUSH AXPUSH DXPUSH CXPUSH SIPUSH DILEA DX,TIPCALL STRING_DISPLAY AGAIN_TRANS:CALL GET_STRINGLEA SI,BUFFER1+2LEA DI,BUFFER2MOV CL,BUFFER1+1XOR CH,CHJCXZ OVER_TRANS NEXT_TRANS:MOV AL, BYTE PTR [SI]CMP AL,'a'JB NOPROCESSCMP AL,'z'JA NOPROCESSAND AL,0DFH NOPROCESS:MOV BYTE PTR [DI],ALINC SIINC DILOOP NEXT_TRANS OVER_TRANS:MOV SI,DICALL STR_ENDLEA DX,BUFFER1+2CALL STRING_DISPLAYLEA DX,BUFFER2CALL STRING_DISPLAYLEA DX,ANYKEYCALL STRING_DISPLAYCALL GET_CHAR_NCMP AL,1BHJZ EXIT_TRANSJMP AGAIN_TRANSEXIT_TRANS:POP DIPOP SIPOP CXPOP DXPOP AXRETTRANS ENDPSTR_END PROC ;INSERT END FLAG SI=ADDRESS PUSH SIMOV BYTE PTR [SI],0DHINC SIMOV BYTE PTR [SI],0AHINC SIMOV BYTE PTR [SI],'$'POP SIRETSTR_END ENDPFIND_MAX PROC;FIND MAXIMUM AMOUNT A STRING PUSH AXPUSH DXPUSH CXPUSH SILEA DX,TIPCALL STRING_DISPLAYMAX_AGAIN:CALL GET_STRINGLEA SI,BUFFER1+2MOV CL,BUFFER1+1XOR CH,CHMOV AL,[SI]JCXZ FIND_MAX_OVERFIND_MAX_NEXT:INC SICMP AL,[SI]JA MAX_NOPROCESSMOV AL,[SI]MAX_NOPROCESS:LOOP FIND_MAX_NEXTFIND_MAX_OVER:LEA DX,BUFFER1+2CALL STRING_DISPLAYLEA DX,MAXIMUMCALL STRING_DISPLAYMOV DL,ALCALL CHAR_DISPLAYMOV DL,0DHCALL CHAR_DISPLAYMOV DL,0AHCALL CHAR_DISPLAYLEA DX,ANYKEYCALL STRING_DISPLAYCALL GET_CHAR_NCMP AL,1BHJNZ MAX_AGAINPOP SIPOP CXPOP DXPOP AXRETFIND_MAX ENDPCHAR_DISPLAY PROC;DISPLAY A CHARACTER DLPUSH AXMOV AH,02HINT 21HPOP AXRETCHAR_DISPLAY ENDPDEC2HEX PROC ;10 TO 16 BUFFER1->BUFFER2,CNT->BUF2,NUM->BUF2+1 PUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DILEA SI,BUFFER1+2LEA DI,BUFFER2+1XOR CH,CHMOV CL,BUFFER1+1MOV AL,0MOV BL,0AHMOV BYTE PTR BUFFER2,0JCXZ DH_OVERDEC_NEXT:MOV BH,BYTE PTR [SI]CMP BH,' 'JZ NEXT_NUMCMP BH,'0'JB ERROR_OVERFLOWCMP BH,'9'JA ERROR_OVERFLOWCMP BH,':'JZ NEXT_NUMAND BH,0FHMUL BLJC ERROR_OVERFLOWADD AL,BHJC ERROR_OVERFLOWJMP NEXT_PRONEXT_NUM:MOV [DI],ALINC DIINC BYTE PTR BUFFER2XOR AX,AXNEXT_PRO:INC SILOOP DEC_NEXTMOV [DI],ALINC BYTE PTR BUFFER2JMP DH_OVERERROR_OVERFLOW:MOV BUFFER2,0DH_OVER:POP DIPOP SIPOP DXPOP CXPOP BXPOP AXRETDEC2HEX ENDPHEX2DEC PROC ;INPUT:BUFFER2,NUM,BUFFER2+1,START;; OUTPUT:BUFFER3,STRING,STACK :OR ,3OR2 PUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DIMOV BP,SPADD BP,0EHLEA DI,BUFFER3LEA SI,BUFFER2+1MOV CL,BUFFER2XOR CH,CHMOV BL,0AHJCXZ HEX_OVERHEX2DEC_OUTTER:MOV AH,0MOV AL,[SI]PUSH CXPUSH DIMOV DL,[BP+1]XOR DH,DHADD DI,DXDEC DIMOV CL,[BP+1]HEX2DEC_INNER:DIV BLOR AH,30HMOV BYTE PTR [DI],AHDEC DIXOR AH,AHLOOP HEX2DEC_INNERINC SIPOP DIPOP CXADD DI,DXMOV AH,[BP]MOV BYTE PTR [DI],AHINC DILOOP HEX2DEC_OUTTERHEX_OVER:MOV SI,DICALL STR_ENDPOP DIPOP SIPOP DXPOP CXPOP BXPOP AXRET 2HEX2DEC ENDPSTR_NUM_ADJUST PROC;INPUT:BUFFER3,REMOVE INVALID ZERO PUSH AXPUSH BXPUSH SIPUSH DILEA SI,BUFFER3LEA DI,BUFFER3XOR AL,ALL1:MOV BL,[SI]CMP BL,0DHJZ ADJUST_OVERCMP BL,' 'JZ CHAR_NEXTCMP BL,'0'JZ CHECK_FLAGMOV AL,01HJMP TRANSFERCHECK_FLAG:CMP AL,0JZ ADJUST_NEXTTRANSFER:MOV [DI],BLINC DIJMP ADJUST_NEXTCHAR_NEXT:MOV BYTE PTR [DI],' 'INC DIXOR AL,ALADJUST_NEXT:INC SIJMP L1ADJUST_OVER:MOV SI,DICALL STR_ENDPOP DIPOP SIPOP BXPOP AXRETSTR_NUM_ADJUST ENDPSORTING PROC ;SORTPUSH AXPUSH CXPUSH DXPUSH DISORT_AGAIN:LEA DX,TIPNUMCALL STRING_DISPLAYCALL GET_STRINGCALL DEC2HEXXOR CH,CHMOV CL,BUFFER2JCXZ SORT_ERRORDEC CXJCXZ SORT_COMPLETE SORT_OUTTER:LEA DI,BUFFER2+1PUSH CXSORT_INNER:MOV AL,[DI]CMP AL,[DI+1]JBE SORT_NOPROCESSXCHG AL,[DI+1]MOV [DI],ALSORT_NOPROCESS:INC DILOOP SORT_INNERPOP CXLOOP SORT_OUTTER SORT_COMPLETE:MOV AH,03HMOV AL,' 'PUSH AXCALL HEX2DECCALL STR_NUM_ADJUSTLEA DX,BUFFER1+2CALL STRING_DISPLAYLEA DX,BUFFER3CALL STRING_DISPLAYSORT_TIP:LEA DX,ANYKEYCALL STRING_DISPLAYCALL GET_CHAR_NCMP AL,1BHJNZ SORT_AGAINJZ SORT_OVERSORT_ERROR:LEA DX,INPUT_ERRORCALL STRING_DISPLAYJMP SORT_TIPSORT_OVER:POP DIPOP DXPOP CXPOP AXRETSORTING ENDPSET_TIME PROC;TIME SET SERVICE PUSH AXPUSH CXPUSH DXSETTIME_AGAIN:CALL CLEAR_SCREENLEA DX,QUESTIONCALL STRING_DISPLAYREFRESH:MOV AH,2CHINT 21HMOV BUFFER2,3MOV BUFFER2+1,CHMOV BUFFER2+2,CLMOV BUFFER2+3,DHMOV AH,02HMOV AL,':'PUSH AXCALL HEX2DECMOV AH,02HMOV BH,0MOV DH,0MOV DL,60INT 10HMOV BUFFER3+8,' 'LEA DX,BUFFER3CALL STRING_DISPLAYCALL GET_CHAR_DIRJZ REFRESHCMP AL,'Y'JNZ NOSETLEA DX,INPUT_TIMECALL STRING_DISPLAYCALL GET_STRINGCALL DEC2HEXMOV AH,2DHMOV CH,BUFFER2+1MOV CL,BUFFER2+2MOV DH,BUFFER2+3MOV DL,0INT 21HCMP AL,0HJZ SET_TIME_SUCCLEA DX,INPUT_ERRORCALL STRING_DISPLAYJMP NOSETSET_TIME_SUCC:LEA DX,SUCCESSCALL STRING_DISPLAY NOSET:LEA DX,ANYKEYCALL STRING_DISPLAYCALL GET_CHAR_NCMP AL,1BHJNZ SETTIME_AGAINPOP DXPOP CXPOP AXRETSET_TIME ENDPEXIT_TOSYS PROC MOV AH,4CH INT 21HRETEXIT_TOSYS ENDP CODE ENDSEND START运行结果主程序界面子服务一:子服务二:子服务三:(注:第二次输入非法输入,给出错误提示信息)子服务四:精品文档。