微机原理实验报告西安交通大学
西安交通大学接口技术实验报告
西安交通大学微型计算机接口技术实验报告班级:物联网姓名:学号:实验一基本I/O扩展实验一、实验目的1、了解 TTL 芯片扩展简单 I/O 口的方法,掌握数据输入输出程序编制的方法;2、对利用单片机进行 I/O 操作有一个初步体会。
二、实验内容74LS244 是一种三态输出的8 总线缓冲驱动器,无锁存功能,当G 为低电平时,Ai 信号传送到Yi,当为高电平时,Yi 处于禁止高阻状态。
74LS273 是一种8D 触发器,当CLR 为高电平且CLK 端电平正跳变时,D0——D7 端数据被锁存到8D 触发器中。
实验原理图:三、实验说明利用74LS244 作为输入口,读取开关状态,并将此状态通过74LS273 再驱动发光二极管显示出来,连续运行程序,发光二极管显示开关状态。
四、实验流程图五、实验连线1、244的cs连接到CPU地址A15,Y7—Y0连接开关K1-K8;2、273的CS连接到CPU地址A14,Q7-Q0连接到发光二极管L1-L8;3、该模块的WR,RD连接CPU的WR,RD,数据线AD7-AD0,地址线A7-A0分别与CPU的数据线AD7-AD0,地址线A7-A0相连接。
六、程序源代码(略)七、实验结果通过开关K01 到K08 可以对应依次控制LED 灯的L1 到L8 ,即当将开关Ki 上拨时,对应的Li 被点亮,Ki 下拨时,对应的Li熄灭。
此外,如果将开关拨到AAH 时,将会产生LED 灯左移花样显示;如果开关拨到55H 时,将会产生LED 灯右移花样显示。
七、实验心得通过本次实验,我了解了TTL 芯片扩展简单I/O 口的方法,同时也对数据输入输出程序编制的方法有一定的了解与掌握,对利用单片机进行I/O 操作有一个初步体会,实验使我对自己在课堂上学的理论知识更加理解,同时也锻炼了我的动手操作能力。
实验二可编程定时计数器8254实验一、实验目的1、了解可编程定时器/计数器8254 实验了解计数器的硬件连接方法及时序关系;2、掌握8254 的各种模式的编程及其原理,用示波器观察各信号之间的时序关系。
微机原理实验报告册(3篇)
第1篇一、实验目的1. 理解和掌握微机的基本组成和工作原理;2. 熟悉微机硬件设备和实验仪器的使用方法;3. 提高动手实践能力,培养解决实际问题的能力;4. 深入理解微机原理课程内容,为后续课程学习奠定基础。
二、实验内容1. 微机系统认识实验2. 微机硬件组成实验3. 微机指令系统实验4. 微机寻址方式实验5. 微机程序设计实验6. 微机接口技术实验三、实验仪器与设备1. 微机原理实验箱2. 示波器3. 数字万用表4. 计算机一台5. 实验指导书四、实验步骤与内容1. 微机系统认识实验(1)观察实验箱的结构,了解各个模块的功能;(2)熟悉实验箱的电源、复位、运行等按钮的使用方法;(3)学习微机系统的工作流程,包括加电、复位、启动等过程;(4)观察微机系统启动后的运行状态,了解各个模块的协同工作。
2. 微机硬件组成实验(1)观察实验箱的CPU、内存、I/O接口等硬件模块;(2)学习CPU的内部结构,包括寄存器、控制单元、运算单元等;(3)学习内存的存储原理,了解ROM、RAM等存储器的特点;(4)学习I/O接口的工作原理,了解中断、DMA等传输方式。
3. 微机指令系统实验(1)学习微机指令系统的基本格式,包括操作码、地址码等;(2)掌握微机指令系统的寻址方式,包括立即寻址、直接寻址、间接寻址等;(3)编写简单的汇编语言程序,实现加、减、乘、除等运算;(4)学习微机中断处理过程,了解中断向量表、中断服务程序等概念。
4. 微机寻址方式实验(1)学习微机寻址方式的基本概念,包括直接寻址、间接寻址、寄存器寻址等;(2)编写程序,实现不同寻址方式下的数据访问;(3)观察不同寻址方式对程序执行速度的影响。
5. 微机程序设计实验(1)学习汇编语言程序设计的基本方法,包括数据定义、指令编写、程序结构等;(2)编写简单的程序,实现数据交换、排序等操作;(3)学习微机程序的调试方法,包括单步执行、断点设置等。
6. 微机接口技术实验(1)学习微机接口技术的基本概念,包括并行接口、串行接口等;(2)观察实验箱中的并行接口、串行接口等模块,了解其工作原理;(3)编写程序,实现数据在并行接口、串行接口之间的传输;(4)学习微机中断处理在接口技术中的应用。
微机原理实验-顺序实验
西安交通大学实验报告课程:微机原理与接口技术实验实验名称:顺序程序设计第 1页共页系别:理学院应用物理系实验日期 2016年11月19日专业班级:应物42班组别____________ 实验报告日期 2016年月日姓名:茹世浩学号: 2140903034 报告退发 ( 订正、重做) 1.实验目的学习8086汇编语言程序的基本结构和顺序程序设计的基本方法。
2.实验设备微型电脑、、、3.实验原理顺序程序是控制流仅有一个走向的程序,它主要用于解决一些无需进行判断分支,也无需循环执行的简单问题。
本节的实验内容与乘法和除法运算有关。
无符号数乘法运算使用MUL指令,有符号数乘法运算使用IMUL指令。
乘法运算属于隐含操作数的运算,因此在使用乘法指令前,需要先将乘数放入AL〔8位乘法〕或AX〔16位乘法〕中。
乘法指令执行后,乘积在AX〔8位乘法〕或DX:AX〔16位乘法〕中。
无符号数除法运算使用DIV指令,有符号数除法运算使用IDIV 指令。
除法运算属于隐含操作数的运算,因此在使用除法指令前,需要先将被除数放入AX 〔8位除法〕或DX:AX〔16位除法〕中。
当除数为8位时,被除数应为16位;除数为16位时,被除数应为32位。
对无符号数除法,当被除数字长不够时,高位部分可直接补0;而对有符号数除法,当被除数字长不够时,必须使用符号扩展指令进行扩展。
除法运算执行后,结果在AX〔8位除法〕或DX:AX〔16位除法〕,其中AL〔8位除法〕或AX〔16位除法〕中是商,AH〔8位除法〕或DX〔16位除法〕中是余数。
4.实验内容在NUM变量中定义了5个有符号数〔字节类型〕,分别是U= 09H,V=16H,W=04H,X=17H,Y=05H,计算〔U+V-W*X〕/Y,将结果显示在屏幕上。
程序流程图如图错误!文档中没有指定样式的文字。
-1。
开始[NUM]=U,[NUM+1]=V,[NUM+2]=W,[NUM+3]=X,[NUM+4]=Y第一步:计算W*X1. [NUM+2]→AL〔数据W送AL〕2. AL*[NUM+3]→AL〔W*X乘积送AL〕→BL〔乘积备份到BL〕第二步:计算U+V-W*X1. [NUM]→AL〔数据U送AL〕2. AL+[NUM+1]→AL〔U+V之和送到AL〕3. AL-BL→AL〔U+V-W*X,结果送到AL〕第三步:计算〔U+V-W*X〕/Y1. AL符号扩展到AX2. AX / [NUM+4]→AX 〔〔U+V-W*X〕/Y,商在AL中〕第四步:显示结果的高4位1. AL中的结果暂存到BL2. AL逻辑右移4位〔取高4位〕3. AL的内容转换成ASCII码4. 显示第五步:显示结果的低4位1. BL中暂存的结果送到AL2. 保留AL中低4位,高4位清03. AL的内容转换成ASCII码4. 显示返回DOS图错误!文档中没有指定样式的文字。
西安交大微机原理实验报告1
实验一数据传送、算术运算、循环程序结构实验目的:1 •熟悉8086汇编语言源程序的框架结构,并掌握汇编语言程序的编写、汇编、 连接、执行的过程,并利用 Turbo Debugger 调试汇编程序。
2. 熟悉8086指令系统的数据传送指令,掌握寻址方式。
3. 熟悉8086指令系统的算术运算指令。
掌握循环结构汇编语言程序的编制。
实验内容:1、P121 14 题程序框图:DW 128 DUP ⑺STACKS ENDSDATAS SEGMENT;数据DATA SEGMENTORG 1000HBCD1 DD 90000010H,12345678HORG 2000HBCD2 DD 90000020H,23456789H;堆栈段 源代码:STACKS SEGMENT STACKDATA ENDSCODES SEGMENT;代码段ASSUMECS:CODES,DS:DATASSTART: MOVAX,DATAS;初始化MOV DS,AXMOV CX,8 ;循环次数 MOV BX,0 ;指针 CLCJ进位清零L00P1: MOVAL,[BX+1000H];BCD1 ADCAL,[BX+2000H];BCD1+BCD2AAA J分离修正MOV [BX+2000H],AL;移到要求的位置INC BX ;指针指向下一个子节LOOPLOOP1MOV AX,4C00H ;退出程INT 21HCODES ENDSSTART结果:2、P121 15 题程序框图: 源代码:STACKS SEGMENT STACK;堆栈段DW 128 DUP ⑺STACKS ENDS DATAS SEGMENT;数据段ENDORGDB2000H 80H,81H,82H,83H,00H,01H,02H,03H,84H,85H DATAS ENDSCODES SEGMENT ;代码段 START: L1:LODSBL2:LOOP L1 ASSUMECS:CODES,DS:DATASMOVAX,DATAS;初始化 MOV DS,AX MOVSI,2000H J MOV CX,10 ;字节数 MOV DL,0FFH ;最小的有符- CMP AL,DLJNG L2MOV DL,ALMOV DS:[2000H],DL MOV AX,4C00H ;退出程序 INT 21H ;最大数存入2000h 单号字节数据CODES ENDS END START 3、P195 6 题 程序框图源代码:STACKS SEGMENTDWSTACK128 DUP(?);堆栈段JSTACKS ENDSDATAS SEGMENT;数据段ORG1000HN1DW1111HN2DW2222HN3DW3333HM1DW0M2DW0M3DW0DATAS ENDSCODES SEGMENT;代码段ASSUME CS:CODES,DS:DATAS START:MOV AX,DATAS;初始化MOV DS,AXMOV AX,N2MUL N3;B*CMOV M3,AXMOV M2,DXMOV AX,N3MUL N1;A*CADD M2,AXADC M1,DXMOV AX,4C00H;退出程序INT 21HCODES ENDSEND START结果:醪DOSBox DJ4h Cpu speedt 3000 cycles. Frames kip 0, Program: DEBUGS Trace Irrterrupt-tAX-1CBS BX=O900 CX=1137 »S=1C 庐ES=1C35 SS=1CA5 1DB6:00G5 A1GZ10Trftce Interruptkd ds:1000 DX=O0OO SP=G10O BP=0900 SI=G0OO DI=0OQO CS=1DB6 IP=O00g MU UF DI PL NZ NA FO NC MOU AX^ElOOgJ1CB5: IODO 11 11 E乙祝33 33 1CB5:1010 BB B5 1C BE D8 fit 1CB5:1020 16 G6;10 Al 04 10 1CB5: 1G30 66 10 B8 60 处CD 1CB5:1CHQ e© 00 00 00 00 00 ***Dup1icate Line(s)*** 1CB5:10?0 GO 0© 00 00 QG 00rogram terminated BC = 0 M lcbS:ICG©1CB5:1600 11 11 22 22 33 33 1CB5:10101C 8E D6 Al1C跖:1G2O 16 66 10 Al CH 10 1CB5: 1G30 66 10 B8 D0 4C CD 1CB5:164Q ©0 Q0 00 00 00 GO k**Duplicate Linets)*** 1CB5:1670 GO 00 00 GO GO 00 kx 00 00-00 00 00 00 00 GE 10-F?昂€4 10 A3F7 Z6-00 10 61 06 6821 GG-00 GO eo oe 0000 00-00 00 60 00 0000 <30-00 0069 GG-36GEF7Z10010-F726-00O0-0GGO-00D0261000004、P196 12 题程序框图36eA&81&&©'01OOw■ n i_r P ■■■■■:RS*,X? *,w®,...?..u&.....8.LM!……00C6€40100GO921006000000A3080000载囹己臭制在QQ或者wo胡文档中右■■ U ■ X J H Ta ■ BI ■ A ■■00 00-00 00 G0 00 00 G0 00 00 ......................................源代码:STACKS SEGMENT STACK ;堆栈段DW 128 DUP⑺;STACKS ENDSDATAS SEGMENT ;数据段STRING1 DB'AAAA'STRING2 DB'AAAa'DATAS ENDSCODES SEGMENT ;代码段ASSUME CS:CODES,DS:DATASAXQATAS ;初始化DS,AX AX,DS ES,AX SI,STRING1 DI,STRING2 CX,4STRING1,STRING2 LABNE AL,'Y' EXIT AL,'N'AX,4C00H ;退出程序 21H结果:[>0: ■ J ir ] IPLL L J59H 是N 的ascII 码实验中出现的问题及解决:总体来说,实验中最大的阻碍是 64位系统不能使用masm 或者轻松汇编等软件,造成了许多困难,解决办法是在网上下载了dosbox ,输入命令 mount ch:\study\masm, h:\study\masm 是我电脑中masm.exe 所在的位置,不知道什么原因masm611用不了这个方法,在网上重新下载了 masm5,和debug32至此,算是 解决了“非编程困难”。
西安交通大学微机原理第一次实验报告
微型计算机原理与接口技术第一次实验报告实验者姓名:实验者学号:所在班级:报告完成日期:20年月日实验二分支程序的设计一、实验目的1.学习提示信息的显示及键盘输入字符的方法。
2.掌握分支程序的设计方法。
二、实验内容在提示信息下,从键盘输入原码表示的二位十六进制有符号数。
当此数大于0时,屏幕显示此数为正数;当此数小于0时,屏幕显示此数为负数;当此数等于0时,屏幕显示此数为零。
三、实验调试过程利用-u命令进行反汇编,结果如下。
三个CMP语句运行完的地址如图所示,第一个CMP运行完的是29H输出结果的地址如下图所示:首先对输入为负数时进行验证:输入FFH,设置一个断点在29H,利用-t命令观察跳转,结果如图:可以看到,程序最终正确的转入输出负的分支。
再输入正数11H,利用-t观察整个比较过程如下:可以看到,程序最终正确的转入输出正的分支。
最后输入00H,利用-t观察整个比较过程如下:可以看到,程序最终正确的转入输出0的分支。
四、实验框图及程序代码实验框图:程序代码:CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDA TA SEGMENT;定义结果信息MESS1 DB 'INPUT DATA:',0DH,0AH,'$'MESS2 DB 'THIS DATA IS+',0DH,0AH,'$'MESS3 DB 'THIS DATA IS-',0DH,0AH,'$'MESS4 DB 'THIS DATA IS ZERO',0DH,0AH,'$'DA TABUF DB 3 ;定义最大可输入字符长度ACTLEN DB ? ;实际输入字符长度STRING DB 3 DUP(?) ;输入字符缓冲区DA TA ENDSSSEG SEGMENT PARA STACK 'STACK'DB 50 DUP(0)SSEG ENDSCODE SEGMENTASSUME CS:CODE,SS:SSEG,DS:DA TASTART:MOV AX,DATAMOV DS,AXMOV AX,SSEGMOV SS,AXMOV DX,OFFSET MESS1MOV AH,09HINT 21HMOV AH,0AHMOV DX,OFFSET DATABUFINT 21HCRLFMOV AL,STRINGCMP AL,38HJAE ISNEGCMP AL,30HJNZ ISPOSMOV AL,[STRING+1]CMP AL,30HJNZ ISPOSJMP ISZEROISPOS:MOV DX,OFFSET MESS2MOV AH,09HINT 21HJMP DONEISNEG:MOV DX,OFFSET MESS3MOV AH,09HINT 21HJMP DONEISZERO:MOV DX,OFFSET MESS4MOV AH,09HINT 21HJMP DONEDONE:MOV AX,4C00HINT 21HCODE ENDSEND START五、实验结果及分析编写的汇编程序EX2.ASM经过汇编MASM与链接LINK生成可执行文件EX2.EXE,测试如下:可见,程序能够正确判断输入数据的正、负、零情况。
微机原理实验报告
微机原理实验报告概述:微机原理是计算机科学与技术专业中的一门重要课程,通过实验学习,可以加深对计算机内部运行原理的理解,提高软硬件的开发和调试能力。
本实验报告将介绍我对微机原理实验的学习和思考。
实验一:二进制转换实验在这个实验中,我首先了解了二进制数的概念以及其和十进制数的转换方法。
通过实际操作,我加深了对计算机内部数据表示方式的理解。
这对于后续学习计算机系统结构和编程语言至关重要。
实验二:逻辑门电路实验逻辑门电路是计算机硬件的基础组成部分,通过实验,我学会了使用逻辑门芯片构建各种逻辑电路,并能够通过真值表分析和验证逻辑电路的正确性。
这对于理解计算机内部的数据处理和控制逻辑有着直接的帮助。
实验三:运算器设计实验在这个实验中,我通过学习和设计算术逻辑单元(ALU),了解了计算机的算术操作过程,并能够通过运算器实现基本算术运算。
这对于理解计算机内部数据的处理和计算机指令的执行有着重要的意义。
实验四:存储器与外设实验存储器是计算机系统的重要组成部分,通过实验,我深入了解了存储器的类型、组织结构和访问方式,并通过外设与存储器的交互,实践了计算机系统的输入和输出过程。
实验五:微处理器实验微处理器是计算机系统中最核心的部件,通过实验,我学习了微处理器的基本运行原理,能够通过汇编语言编写程序,并通过微处理器执行程序实现特定的功能。
这个实验为我今后学习计算机体系结构和操作系统打下了坚实的基础。
实验总结:通过这几个实验,我深入了解了微机原理课程的实践内容和相关知识。
实验的过程中,我不仅学会了使用仪器设备和工具,还培养了自己的动手能力和团队合作精神。
通过不断的实践,我对计算机内部结构和运行原理有了更深刻的理解,也提高了我的问题解决能力和创新思维。
未来展望:微机原理实验的学习只是计算机科学与技术专业中的一小部分。
我希望在今后的学习过程中能加深对计算机体系结构、操作系统、编程语言等方面的学习,并不断深入钻研,成为一名优秀的计算机科学与技术专业人才。
微机原理的实验报告
一、实验目的1. 理解微机的基本组成和各部件的功能;2. 掌握微机的工作原理和指令系统;3. 熟悉汇编语言程序设计的基本方法;4. 提高动手能力和实际操作技能。
二、实验内容1. 微机系统组成实验(1)实验目的:了解微机的基本组成和各部件的功能。
(2)实验内容:观察并记录微机系统的各个部件,如CPU、内存、硬盘、主板等,并了解它们的功能。
(3)实验步骤:①观察微机系统各个部件的连接情况;②了解各个部件的功能和作用;③分析微机系统的整体结构。
2. 微机工作原理实验(1)实验目的:掌握微机的工作原理。
(2)实验内容:观察并记录微机工作过程中的各个阶段,如指令的取指、译码、执行等。
(3)实验步骤:①观察微机工作过程中的各个阶段;②了解各个阶段的功能和作用;③分析微机工作原理。
3. 指令系统实验(1)实验目的:熟悉汇编语言指令系统。
(2)实验内容:学习汇编语言的基本指令,如数据传送指令、算术运算指令、逻辑运算指令等。
(3)实验步骤:①学习汇编语言的基本指令;②编写简单的汇编语言程序,实现数据传送、算术运算、逻辑运算等功能;③调试程序,观察程序运行结果。
4. 汇编语言程序设计实验(1)实验目的:提高汇编语言程序设计能力。
(2)实验内容:编写一个汇编语言程序,实现以下功能:①计算两个数的和;②判断一个数是否为偶数;③输出程序运行结果。
(3)实验步骤:①编写汇编语言程序,实现上述功能;②调试程序,观察程序运行结果;③分析程序运行过程,确保程序正确性。
三、实验结果与分析1. 微机系统组成实验:通过观察和记录微机系统的各个部件,了解了微机的基本组成和各部件的功能。
2. 微机工作原理实验:通过观察微机工作过程中的各个阶段,掌握了微机的工作原理。
3. 指令系统实验:通过学习汇编语言的基本指令,熟悉了汇编语言指令系统。
4. 汇编语言程序设计实验:通过编写汇编语言程序,提高了汇编语言程序设计能力。
四、实验心得通过本次微机原理实验,我对微机的基本组成、工作原理和指令系统有了更深入的了解。
微机原理实验报告
微机原理实验报告一、实验目的本次微机原理实验的主要目的是通过实际操作和观察,深入理解微机系统的工作原理和组成结构,掌握微机系统的编程和调试方法,提高我们对微机原理的实际应用能力。
二、实验设备1、计算机一台2、微机原理实验箱一套三、实验内容1、 8255 并行接口实验了解 8255 芯片的工作原理和编程方法。
通过编程实现 8255 芯片的 A 口、B 口、C 口的输入输出控制。
2、 8253 定时/计数器实验掌握 8253 芯片的工作方式和编程要点。
利用 8253 芯片实现定时和计数功能。
3、 8259 中断控制器实验学习 8259 芯片的中断管理机制。
编写中断服务程序,实现中断响应和处理。
四、实验原理1、 8255 并行接口8255 是一种可编程的并行接口芯片,具有 A、B、C 三个 8 位端口。
通过对控制字的编程,可以设置各个端口的工作方式为输入或输出。
2、 8253 定时/计数器8253 包含三个独立的 16 位计数器,每个计数器可以工作在不同的方式下,如方式 0 到方式 5。
通过对计数器的初值设置和控制字编程,可以实现定时和计数功能。
3、 8259 中断控制器8259 用于管理外部中断请求,可实现中断优先级的判断和中断嵌套。
通过对 8259 的初始化编程,可以设置中断触发方式、中断向量等。
五、实验步骤1、 8255 并行接口实验连接实验电路,将 8255 芯片与实验箱上的相关引脚连接好。
编写程序,设置 8255 的控制字,使 A 口为输出,B 口为输入。
向 A 口输出数据,从 B 口读取数据,并观察实验结果。
2、 8253 定时/计数器实验连接实验电路,将 8253 芯片与实验箱上的相关引脚连接好。
编写程序,设置 8253 计数器 0 的工作方式为方式 2,初值为 1000。
启动计数器,观察输出引脚的波形变化。
3、 8259 中断控制器实验连接实验电路,将 8259 芯片与实验箱上的相关引脚连接好。
微机原理的实验报告
微机原理的实验报告一、实验目的本实验旨在深入理解微机原理的相关知识,并通过实践操作,掌握微机原理的实验方法与技巧。
二、实验内容1. 搭建微机实验系统:根据实验所需,搭建适当的微机实验系统,包括各种硬件设备的连接与设置。
2. 硬件接口的实验:通过连接不同的硬件接口,进行实验操作,学习硬件接口的使用方法和原理。
3. 程序设计与调试实验:使用相应的汇编语言或高级语言,编写程序并进行调试,观察程序的执行结果。
4. 中断实验:通过调用不同的中断服务例程,进行实验操作,学习中断的使用原理和应用场景。
三、实验步骤与结果1. 实验步骤:(1) 搭建微机实验系统:按照实验指导书的要求,连接各种硬件设备,确保能够正常工作。
(2) 硬件接口的实验:选择一个硬件接口,例如并行口,通过编写相应的程序,实现读取和输出数据的功能。
观察实验现象并记录。
(3) 程序设计与调试实验:根据实验要求,选择适当的编程语言,编写相应的程序,并进行调试。
观察程序的执行结果,并记录相关数据。
(4) 中断实验:选择一个中断服务例程,例如键盘中断,通过编写相应的程序,实现对键盘输入的响应。
观察实验现象并记录相关数据。
2. 实验结果:(1) 硬件接口的实验结果:通过编写程序并连接硬件接口,成功读取和输出数据,实现了相应的功能。
(2) 程序设计与调试实验结果:编写的程序能够正确执行,并得到了预期的结果。
(3) 中断实验结果:编写的程序能够响应相应的中断信号,并实现了对键盘输入的处理。
四、实验分析与讨论1. 实验分析:通过本次实验,我们深入了解了微机原理的相关知识,并通过实践操作,掌握了微机原理的实验方法和技巧。
2. 实验讨论:在实验过程中,我们遇到了一些困难和问题,例如硬件接口的连接和调试,程序的编写和调试等。
但通过彼此的合作与讨论,我们最终解决了这些问题,并成功完成了实验。
五、实验总结通过本次实验,我们对微机原理有了更深入的理解,并通过实践操作,掌握了微机原理的实验方法和技巧。
微机原理与接口技术实验报告5-综合设计实验
西安交通大学实验报告第页共页课程微机原理与接口技术实验系别生物医学工程实验日期年月日专业班级组别交报告日期年月日姓名学号报告退发 (订正、重做)同组者教师审批签字实验名称综合设计实验一、实验目的:1、掌握结构化汇编语言程序设计;2、掌握8253、8259的初始化和操作编程;3、熟悉LED数码管的动态驱动。
二、实验设备1、Lab6000p实验教学系统;2、IBM-PC机三、实验内容1、实验要求以4MHz为时钟基准,设计一个电子钟,在LED数码管显示时钟,格式如下:XX XX XX 由左向右分别为:时、分、秒。
2、提示8253工作于定时方式,即对4MHz或分配后的基准时钟脉冲进行计数,8253定时器每100us中断一次,在中断服务程序中,对中断次数进行计数,100us计数10000次就是1秒。
然后再对秒计数得到分和小时值,并送入显示缓冲区显示。
四、实验程序代码; 本实验利用8253做定时器,用定时器输出的脉冲控制8259产生中断; 在8259中断处理程序中,对时、分、秒进行计数,在等待中断的循; 环中用LED显示时间。
; 8253用定时器/计数器1,8253片选接CS4,地址为0C000H。
8253时钟; 源CLK1接分频电路的F/64输出。
分频器的Fin接4MHz时钟。
8253的; GATE1接VCC。
; 8259中断INT0接8253的OUT1,片选接CS5,地址为0D000H。
; 显示电路的KEY/LED CS 接CS0,地址为08000H。
;CONTROL equ 0c003hCOUNT0 equ 0c000hCOUNT1 equ 0c001hCOUNT2 equ 0c002hmd8255 equ 82h ; 8255 工作方式PA8255 equ 8000h ; 8255 PA口输出地址CTL8255 equ 8003h ; 8255 控制口地址OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口ICW1 equ 00010011b ; 单片8259, 上升沿中断, 要写ICW4ICW2 equ 00100000b ; 中断号为20HICW4 equ 00000001b ; 工作在8086/88 方式OCW1 equ 11111110b ; 只响应INT0 中断CS8259A equ 0d000h ; 8259地址CS8259B equ 0d001hdata segmentCNT db 0LEDBuf db 6 dup(?) ; 显示缓冲Num db 1 dup(?) ; 显示的数据DelayT db 1 dup(?)Hour db 0Minute db 0Second db 0LEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07hdb 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h data endscode segmentassume cs:code, ds: dataDelay proc nearpush ax ; 延时子程序push cxmov al, 0mov cx,axloop $pop cxpop axretDelay endpDisplayLED proc nearmov bx, offset LEDBufmov cl, 6 ; 共6个八段管mov ah, 00100000b ; 从左边开始显示DLoop:mov dx, OUTBITmov al, 0out dx,al ; 关所有八段管mov al, [bx]mov dx, OUTSEGout dx,almov dx, OUTBITmov al, ahout dx, al ; 显示一位八段管push axmov ah, 1call Delaypop axshr ah, 1inc bxdec cljnz DLoopmov dx, OUTBITmov al, 0out dx,al ; 关所有八段管retDisplayLED endpIEnter proc nearpush axpush dxinc Secondmov al, Secondcmp al, 60jne Exitmov Second, 0inc Minutemov al, Minutecmp al, 60jne Exitmov Minute, 0inc Hourmov al, Hourcmp al, 24jne Exitmov Hour, 0Exit:mov dx, CS8259Amov al, 20h ; 中断服务程序结束指令out dx, alpop dxpop axiretIEnter endpIInit procmov dx, CS8259Amov al, ICW1out dx, almov dx, CS8259Bmov al, ICW2out dx, almov al, ICW4out dx, almov al, OCW1out dx, alretIInit endpstart proc nearmov ax, datamov ds, axmov Hour, 0mov Minute, 0mov Second, 0climov ax, 0mov ds, axmov al, 76h; 01110110B ; 计数器1,16位,方式3,二进制mov dx, CONTROLout dx, almov ax, 62500mov dx, COUNT1out dx, al ; 计数器低字节mov al, ahout dx, al ; 计数器高字节mov al, MD8255mov dx, CTL8255out dx, almov bx, 4*ICW2 ; 中断号mov ax, codeshl ax, 4 ; x 16add ax, offset IEnter ; 中断入口地址(段地址为0)mov [bx], axmov ax, 0inc bxinc bxmov [bx], ax ; 代码段地址为0call IInitmov ax, datamov ds, axmov CNT, 0 ; 计数值初始为0mov al, CNTmov dx, PA8255out dx, alstiLP: ; 等待中断,并计数。
西安交大微机原理第一次实验报告(共10页)
微机(wēi jī)原理第一次实验报告一.实验(shíyàn)目的(1) 学习8086/8088指令系统中一些基本(jīběn)指令的用法和程序设计的基本方法。
(2) 熟悉PC机上建立、汇编、连接(liánjiē)、调试和运行8086、8088汇编语言程序的全过程。
(3) 学习提示信息的显示及键盘输入字符的方法。
(4) 掌握分支程序的设计方法。
二.实验内容(1) 设a,b,c,d四个数分别以单字节压缩BCD码形式存放在内存NUM开始的四个单元,计算(a+b)-(c+d)并将结果放在Y1单元中,将结果在屏幕上显示出来。
在debug中不断改变a,b,c,d内容并查看结果。
1. a=09, b=06, c=04, d=072. a=38, b=41, c=29, d=343. a=70, b=23, c=42, d=414. a=63, b=73, c=62, d=50(2) 在提示信息下,从键盘输入原码表示的二位十六进制有符号数,当此数大于0时,屏幕上显示此数为正数;当此数小于0时,屏幕上显示此数为负数;当此数为0时,屏幕上显示此数为零。
三.实验调试过程3.1 题目一调试过程C:\<DEBUG ONE.EXE-U 反汇编-R 查看(chákàn)寄存器变量值观察(guānchá)到0005时已完成(wán chéng)数据初始化,利用(lìyòng)g 5追踪到此处利用-d0指令查看内存单元,在偏移地址为0,1,2,3的地方有9,6,4,7,正是我们在代码中赋的初值。
-g d,观察(guānchá)到此时AL已赋值a=15H-g 16,计算(jì suàn)出a+b的值并赋给AL,值为0b,正确(zhèngquè)-g 19,DAA调整后AL变为11,计算(jì suàn)正确-g 1b,cl=04H成功赋值给AL,正确-g 1f,计算出(a+b)-(c+d)结果为04H,正确题目(tímù)二程序调试过程-U0, 反汇编-g 5,程序执行到此处时,完成(wán chéng)DS寄存器赋值DS=0B5EH-g a,程序执行到此处时,完成(wán chéng)SS寄存器赋值SS=0B69H-g 24,程序执行到此处,实现提示信息输出(shūchū)INPUT DATA:,手动输入C9-U-g 2f,程序执行到此处,成功(chénggōng)跳转,显示信息“THIS DATA IS –“四.程序(chéngxù)及框图4.1 题目(tímù)一程序DSEG SEGMENT ;定义数据段NUM DB 13H,27H,11H,12H ;定义(dìngyì)a,b,c,dY1 DB ?DSEG ENDS ;数据段定义结束SSEG SEGMENT PARA STACK ;定义堆栈段DB 20 DUP(?)SSEG ENDS ;堆栈段定义结束CSEG SEGMENT ;定义代码段ASSUME CS:CSEG,DS:DSEG,SS:SSEG ;各段定义(dìngyì) START: MOV AX,DSEGMOV DS,AX ;数据段段(duàn duàn)地址送DSMOV AX,SSEGMOV SS,AX ; 堆栈段段(duàn duàn)地址送SSMOV AL,[NUM]ADD AL,[NUM+1] ;计算(jì suàn)a+bDAA ;压缩BCD码加法调整DAAMOV CL,AL ; 保存a+bMOV AL,[NUM+2]ADD AL,[NUM+3] ;计算c+dDAA ;压缩BCD码加法调整DAASUB CL,AL ;计算(a+b)-(c-d)MOV AL,CLDAS ;DAS调整MOV [NUM+4],AL ;保存结果AND AL,0F0H ;取AL中高四位MOV CL,4SHR AL,CL ;BCD码高位移至低位ADD AL,30H ;AL加30H得ASCII码MOV DL,ALMOV AH,02HINT 21H ;显示DLMOV AL,[NUM+4] ; 恢复ALAND AL,0FH ;取AL低四位ADD AL,30H ;AL加30H得ASCII码MOV DL,ALMOV AH,02HINT 21H ;显示DLMOV AX,4C00HINT 21H ;返回DOSCSEG ENDSEND START ;程序结束4.2 题目二程序CRLF MACRO ;宏定义MOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21H ;显示换行ENDM ;宏结束DATA SEGMENT ;定义数据段MESS1 DB 'INPUT DATA:',0DH,0AH,'$'MESS2 DB 'THIS DATA IS+',0DDH,0AH,'$'MESS3 DB 'THIS DATA IS-',0DH,0AH,'$'MESS4 DB 'THIS DATA IS ZERO',0DH,0AH,'$'DATABUF DB 3 ;定义(dìngyì)最大可输入字符长度 ACTLEN DB ? ;实际(shíjì)输入字符长度STRING DB 3 DUP(?) ;输入(shūrù)字符缓冲区DATA ENDS ;数据(shùjù)段结束SSEG SEGMENT PARA STACK 'STACK' ;定义堆栈段 DB 50 DUP(0)SSEG ENDS ;堆栈段结束CODE SEGMENT ;定义代码段ASSUME CS:CODE,SS:SSEG,DS:DATA ;各段定位START: MOV AX,DATAMOV DS,AX ;DS段寄存器赋值MOV AX,SSEGMOV SS,AX ;SS段寄存器赋值MOV DX,OFFSET MESS1MOV AH,09HINT 21H ;显示提示信息MOV AH,0AHMOV DX,OFFSET DATABUFINT 21H ;接收键入的字符串CRLF ;回车换行MOV AL,STRING ;接收字符高位CMP AL,38H ;比较高位和38H的大小JGE FUSHU ; 若高位>=38H?,跳至FUSHU处执行 CMP AL,30H ;比较高位和30H的大小JE ZERO ;若高位=30H?,跳至ZERO处执行ZHENGSHU: MOV DX,OFFSET MESS2 ;显示输出为正数 MOV AH,09HINT 21HJMP OVERFUSHU: MOV DX,OFFSET MESS3 ;显示输出为负数MOV AH,09HINT 21HJMP OVERZERO: MOV AL,[STRING+1] ;显示输出为0CMP AL,30HJNE ZHENGSHUMOV DX,OFFSET MESS4MOV AH,09HINT 21HJMP OVEROVER: HLTCODE ENDS ;代码段结束(jiéshù)END START ;程序(chéngxù)结束五.实验(shíyàn)结果5.1 题目(tímù)一实验结果1. a=09, b=06, c=04, d=07时,计算结果为042. a=38, b=41, c=29, d=34时,计算结果为163. a=70, b=23, c=42, d=41时,计算结果为104. a=63, b=73, c=62, d=50时,计算结果为245.2 题目二实验结果键盘输入c9,输出“THIS DATA IS-“键盘输入17,输出“THIS DATA IS +”键盘输入00,输出”THIS DATA IS ZERO’六.必要的分析6.1 题目一分析1. 压缩BCD码需要用到压缩BCD码的调整指令2. 程序末尾显示要利用DOS功能调用3.显示单个字符,要先将其转化为ASCII 码,再利用DOS功能调用的02H功能。
微机原理实验报告
西安交通大学实验报告课程_ 微机与接口技术第页共页系别__ 生物医学工程_______ __ 实验日期: 年月日专业班级___ __组别___ __ 交报告日期: 年月日姓名__ 学号_ _报告退发( 订正、重做)同组人_ 教师审批签字实验一汇编语言程序设计一、实验目的1、掌握Lab6000p实验教学系统基本操作;2、掌握8088/8086汇编语言的基本语法结构;3、熟悉8088/8086汇编语言程序设计基本方法二、实验设备装有emu8086软件的PC机三、实验内容1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。
编程并显示结果:如果数组是无符号数,求出最大值,并显示;如果数组是有符号数,求出最大值,并显示。
2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:”3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII是:”4、两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。
在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子程序)5、键盘输入一个小写字母(a~z),转换成大写字母显示:请输入一个小写字母(a~z):转换后的大写字母是:6、实现4字节无符号数加法程序,并显示结果,如H + H = xxxxxxxxH四、实验代码及结果、实验代码:DATA SEGMENTSZ DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H;存进数组SHOW DB 'THE MAX IS: ','$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA ;把数据的基地址赋给DSMOV DS,AXMOV DX,OFFSET SHOW ;调用DOS显示字符串MOV AH,09HINT 21HMOV SI ,OFFSET SZ ;数组的偏移地址赋给SIMOV CX,10 ;存进数组的长度给CXMOV DH,80H ;将数组的第一个数写进DHNEXT:MOV BL,[SI] ;将数组的第一个数写进BLCMP DH,BL ;比较DH和BL中数的到校JAE NEXT1 ;如果DH中的数大于BL中,将跳转到NEXT1MOV DH,BL ;如果DH中的数小于BL中,将BL中的数赋给DHNEXT1:INC SI ;偏移地址加1LOOP NEXT;循环,CX自减一直到0,DH中存数组的最大值;接下来的程序是将将最大值DH在屏幕上显示输出MOV BX,02HNEXT2:MOV CL,4ROL DH,CL ;将DH循环右移四位MOV AL,DHAND AL,0FH ;将AL高位清零,一位一位进行ASCII码转换CMP AL,09H ;与09H比较大小JBE NEXT3 ;若小于,跳转至NEXT3,证明数值在0-9之间ADD AL,07H ;若大于,则证明为字母,因为字母与数字的ASCII码相差7,所以要加上7NEXT3:ADD AL,30H ;因为转换为ASCII码要加30HMOV DL,ALMOV AH,2 ;DOS中断显示INT 21HDEC BXJNZ NEXT2MOV DL,'H'MOV AH,2INT 21HCODE ENDSEND START实验结果:、实验代码DATA SEGMENTSZ DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H ;存进数组SHOW DB 'THE MAX IS: ','$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA ;把数据的基地址赋给DSMOV DS,AXMOV DX,OFFSET SHOW ;调用DOS显示字符串MOV AH,09HINT 21HMOV SI ,OFFSET SZ ;数组的偏移地址赋给SIMOV CX,10 ;存进数组的长度给CXMOV DH,80H ;将数组的第一个数写进DHNEXT:MOV BL,[SI] ;将数组的第一个数写进BLCMP DH,BL ;比较DH和BL中数的到校JGE NEXT1 ;如果DH中的数大于BL中,将跳转到NEXT1;此为无符号数与有符号数的唯一差别,JGE是无符号数的跳转MOV DH,BL ;如果DH中的数小于BL中,将BL中的数赋给DHNEXT1:INC SI ;偏移地址加1LOOP NEXT ;循环,CX减1,一直到CX减为0,DH中存数组的最大值;接下来的程序是将最大值DH在屏幕上显示输出MOV BX,02HNEXT2:MOV CL,4ROL DH,CL ;将DH循环右移四位MOV AL,DHAND AL,0FH ;将AL高位清零,一位一位进行ASCII码转换CMP AL,09H ;与09H比较大小JBE NEXT3 ;若小于,跳转至NEXT3,证明数值在0-9之间ADD AL,07H;若大于,则证明为字母,因为字母与数字的ASCII码相差7,所以要加上7NEXT3:ADD AL,30H ;因为转换为ASCII码要加30HMOV DL,ALMOV AH,2 ;DOS中断显示INT 21HDEC BXJNZ NEXT2MOV DL,'H'MOV AH,2INT 21HCODE ENDSEND START实验结果2、实验代码DATA SEGMENTBNUM DW 0500HDNUM DB 4 DUP()MES DB 'THE BCD OF '500H' IS: ','$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET MES ;将字符串偏移量写入DXMOV AH,09HINT 21HMOV AX,BNUM ;将0500H存入AX中LEA BX,DNUM ;取DNUM的偏移量MOV DL,0;计算1000的个数COUNT1:SUB AX,03E8H ;AX-1000JC NEXT1 ;不够减,即若CF=1,有借位,转NEXT1INC DL ;DL+1JMP COUNT1 ;跳转AGAIN1 NEXT1:ADD AX,03E8H ;AX+1000MOV [BX],DL ;将DL(即千位数)存入DNUM中INC BX ;BX+1MOV DL,0 ;DL清零;计算100个数COUNT2:SUB AX,0064H ;AX-100JC NEXT2INC DLJMP COUNT2NEXT2:ADD AX,0064HMOV [BX],DL ;将DL(即百位数)存入DNUM中INC BXMOV DL,0;计算10个数COUNT3:SUB AX,000AH ;AX-10JC NEXT3INC DLJMP COUNT3NEXT3:ADD AX,000AHMOV [BX],DL ;将DL(十位数)存入DNUM中INC BXMOV [BX],AL ;计算个位数MOV CX,4; 接下来的程序是将数值转化为ASCII并在屏幕上显示LEA SI,DNUM ;取DNUM的地址偏移量NEXT4:MOV AL,[SI] ;将DNUM中所存的各个数值转换为ASCII码;;在屏幕上输出显示CMP AL,09HJBE NEXT5ADD AL,07HNEXT5:ADD AL,30HMOV DL,ALMOV AH,2INT 21HINC SIDEC CXJNZ NEXT4CODE ENDSEND START实验结果3、实验代码DATA SEGMENTOUP DB 'THE ASCII OF 7963 IS:','$'A1 DB 07H,09H,06H,03HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET OUPMOV AH,09HINT 21HMOV CL,4MOV SI,0NEXT:MOV AL,A1[SI] ;将A1的第SI个数据传给ALMOV BL,ALOR AL,30H ;加30转换为ASCII码值SHR AL,4AND AL,0FH ;将右移后的高位清零ADD AL,30H ;因为ASCII码与值之间相差30 MOV DL,ALMOV AH,2 ;输出对应的ASCII码INT 21HMOV AL,BLAND AL,0FHADD AL,30HMOV DL,ALMOV AH,02HINT 21HMOV DL,' 'MOV AH,02HINT 21HINC SILOOP NEXTEXIT:MOV AH,4CHINT 21HCODE ENDSEND START实验结果4、实验代码DATA SEGMENTYI DB 100 DUP(88H)ER DB 100 DUP(00H) ;定义数组MES DB 'THE NUMBER OF COUNTER IS: ','$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMAIN PROC FARSTART: MOV AX,DATAMOV DS,AXMOV CL,100 ;计数器初值MOV CH,00H ;转移次数统计,初值LEA SI,YI ;将内存块1的偏移量给SILEA DI,ER ;将内存块2的偏移量给DI NEXT: MOV AL,[SI]MOV [DI],AL ;将YI中的数据复制到ER中INC SIINC DIINC CHMOV DX,OFFSET MES ;显示字符串MOV AH,9INT 21HCALL COUNT ;调用子程序DEC CL ;计数减1JNZ NEXT ;计数不为零,跳转执行HLTMAIN ENDP ;主程序结束;下面是子程序,实现屏幕显示转移次数功能COUNT PROC NEAR ;定义子程序属性PUSH CX ;CX进栈MOV DH,CHMOV BX,02HNEXT2: MOV CL,4ROL DH,CL ;将DH循环右移四位MOV AL,DHAND AL,0FH ;将AL高位清零CMP AL,09H ;与09H比较大小JBE NEXT3 ;若小于,跳转至NEXT3ADD AL,07HNEXT3: ADD AL,30H ;加30HMOV DL,ALMOV AH,2 ;DOS中断显示INT 21HDEC BXJNZ NEXT2MOV DL,'H' ;显示HMOV AH,2INT 21HMOV DL,0AH ;回车MOV AH,2INT 21HMOV DL,0DH ;换行MOV AH,2INT 21HPOP CX ;CX出栈RETCOUNT ENDP;子程序结束CODE ENDSEND START实验结果5、实验代码DATA SEGMENTINP DB 'PLEASE INPUT (a~z): ','$' ;设置字符串OUP DB 'THE TRANSFORMATION(A~Z) IS:','$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMAIN PROC FARSTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET INP ;显示字符串,提示输入MOV AH,9INT 21HMOV AH,1 ;DOS中断调用,从键盘中读取一个字符INT 21HPUSH AX ;AX入栈PUSH DXMOV DL,0DH ;中断调用,回车MOV AH,2INT 21HMOV DL,0AH ;中断调用,换行MOV AH,2INT 21HMOV DX,OFFSET OUP ;显示字符串,输出提示MOV AH,9INT 21HPOP DX ;DX出栈POP AX ;AX出栈SUB AL,32 ;AL减去32,使大写转化为小写;大小写之间的ASCII码值相差32MOV DL,AL ;DOS中断显示结果MOV AH,2INT 21HMAIN ENDPCODE ENDSEND START实验结果:6、实验代码DATA SEGMENTYI DB 44H,33H,22H,99H,00HER DB 44H,33H,22H,99H,00H ;装载数据,必须有后面00HSUM DB 5 DUP()OUP DB 'H + H= ','$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMAIN PROC FARSTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET OUP ;显示字符串MOV AH,9INT 21HLEA BP,YI ;在BP中装入YI的地址偏移量LEA SI,ER ;在SI中装入ER的地址偏移量LEA DI,SUM ;在DI中装入SUM的地址偏移量MOV CX,05 ;计数初值CLC ;进位位清零NEXT: MOV AL,[BP] ;将YI中的数据赋给ALMOV AH,[SI] ;将ER中的数据赋给BLADC AL,AH ;YI和ER中的数据带进位的相加MOV [DI],AL ;将相加的结果保存在SUM中INC SIINC DIINC BPDEC CXJNZ NEXT ;结果不为零,跳转到NEXT;上面的程序已经将相加的结果存在了SUM中,下面的程序是将SUM中的结果转化为ASCII显示MOV CH,05 ;计数器初值NEXT1: MOV DH,[DI-1] ;将所得结果最高位赋给DHMOV BX,02HNEXT2: MOV CL,4ROL DH,CL ;将DH循环右移四位MOV AL,DHAND AL,0FH ;将AL高位清零CMP AL,09H ;与09H比较大小JBE NEXT3 ;若小于,跳转至NEXT3ADD AL,07HNEXT3: ADD AL,30H ;加30HMOV DL,ALMOV AH,2 ;DOS中断显示INT 21HDEC BXJNZ NEXT2DEC DIDEC CHJNZ NEXT1 ;循环显示SUM中的值MOV DL,'H' ;显示HMOV AH,2INT 21HMAIN ENDPCODE ENDSEND START实验结果五、分析与总结通过实验熟练了8086的指令系统和基本的程序设计格式,实验中出现的各种问题通过一步步的分析自行解决的过程,提高了对于各种语句、指令的运用熟练程度实验二8255可编程并行接口实验一、实验目的1、掌握8255芯片结构及工作方式;2、熟悉8255并行口扩展的编程。
微机原理实验报告
微机原理实验报告一、实验目的本实验旨在通过实际操控和操作微型计算机,深入了解微机系统的组成和工作原理,加深对计算机硬件结构以及基本操作的理解,培养实际动手能力。
二、实验内容1.熟悉微机系统组成部分:主机、显示器、键盘等。
2.掌握微机系统的基本操作:开机、关机、复位、重启等。
3.了解微机系统的工作原理:运行机制、输入输出等。
4.实践运用微机系统进行一些简单的应用操作。
三、实验步骤1.开机操作:按下主机电源按钮,等待主机启动。
2.系统自检:主机启动后会进行自检操作,检查硬件是否正常。
如果发现问题,主机会发出蜂鸣声。
3.输入输出设备准备:连接好显示器和键盘,并检查是否正常连接。
4.系统登录:按照屏幕上的提示,输入用户名和密码进行系统登录。
5.系统操作:根据实验要求,进行相应的系统操作。
6.关机操作:在操作完成后,选择关机选项进行关机。
四、实验结果与分析通过本次实验,我掌握了微机系统的基本操作,并对其工作原理有了更深入的了解。
通过实际操作,我可以熟练地开机、关机、复位等操作,并可以进行一些简单的应用操作。
同时,我也了解到了微机系统由主机、显示器、键盘等多个组成部分组成,不同组成部分的协作工作实现了系统的正常运行。
五、实验心得通过本次实验,我对微机系统的组成和工作原理有了更深入的了解。
这对我后续学习计算机原理和操作系统提供了基础。
在实验过程中,我也发现了一些问题,比如操作系统选择界面的选择问题,我没有选择正确的操作系统,导致后续实验操作遇到一些困难。
这些问题提醒我在实际操作中需要格外注意,仔细阅读提示并选择正确的操作选项。
总结来说,本次实验对我深入理解微机系统的组成和工作原理提供了良好的机会。
通过实际操控和操作微型计算机,我对计算机硬件结构以及基本操作有了更直观的认识,掌握了一些基本操作技能。
在未来的学习和应用中,我将更加注重细节,提高自己的操作技能,并不断深入学习和了解更多关于微机系统的知识。
微机原理实验报告
实验名称:微机原理与接口技术实验实验日期:2023年11月X日实验地点:微机原理实验室实验仪器:微机原理实验箱、计算机、仿真软件等实验人员:XXX、XXX、XXX一、实验目的1. 理解微机原理的基本概念和组成结构。
2. 掌握计算机的基本工作原理和指令系统。
3. 学习计算机接口技术的基本原理和方法。
4. 通过实验,提高动手能力和实际操作技能。
二、实验内容1. 计算机组成结构实验:- 学习计算机的硬件组成,包括中央处理器、存储器、输入输出设备等。
- 了解计算机的工作原理,包括数据的输入、处理、输出过程。
- 使用实验箱进行计算机组成结构实验,验证计算机的基本工作原理。
2. 指令系统实验:- 学习汇编语言的基本语法和指令系统。
- 掌握指令的格式、操作数和寻址方式。
- 使用汇编语言编写程序,实现简单的计算、数据传输和逻辑运算等功能。
3. 接口技术实验:- 学习计算机接口的基本原理和方法。
- 了解常用的接口电路和芯片。
- 使用接口技术实现数据传输、信号处理等功能。
- 学习仿真软件的使用方法,包括程序编写、调试和运行等。
- 使用仿真软件模拟计算机的工作过程,验证程序的正确性。
三、实验步骤1. 计算机组成结构实验:- 搭建实验箱,连接计算机硬件设备。
- 编写程序,实现简单的计算、数据传输和逻辑运算等功能。
- 观察实验结果,验证计算机的基本工作原理。
2. 指令系统实验:- 学习汇编语言的基本语法和指令系统。
- 编写汇编语言程序,实现简单的计算、数据传输和逻辑运算等功能。
- 使用汇编语言编写程序,实现更复杂的计算和数据处理功能。
3. 接口技术实验:- 学习计算机接口的基本原理和方法。
- 使用接口技术实现数据传输、信号处理等功能。
- 编写程序,实现接口功能,并验证其正确性。
4. 仿真软件实验:- 使用仿真软件编写程序,实现计算机的基本工作过程。
- 使用仿真软件调试程序,验证程序的正确性。
- 使用仿真软件模拟接口电路的工作过程,验证接口功能的正确性。
西安交大微机实验报告二
实验二分支程序的设计一、实验目的1.学习提示信息的显示及键盘输入字符的方法。
2.掌握分支程序的设计方法。
二、实验内容在提示信息下,从键盘输入原码表示的二位十六进制有符号数。
当此数大于0时,屏幕显示此数为正数;当此数小于0时,屏幕显示此数为负数;当此数等于0时,屏幕显示此数为零。
三、程序代码CRLF MACROMOV A H,02HMOV D L,0DHINT 21HMOV A H,02HMOV D L,0AHINT 21HENDMDATA SEGMENTMESS1 DB 'INPUT DATA:',0DH,0AH,'$'MESS2 DB 'THIS DATA IS +',0DH,0AH,'$'MESS3 DB 'THIS DATA IS -',0DH,0AH,'$'MESS4 DB 'THIS DATA IS ZERO',0DH,0AH,'$'DATABUF DB 3ACTLEN DB ?STRING DB 3 DUP(?)DATA ENDSSSEG SEGMENT PARA STACK 'STACK'DB 50 DUP(0)SSEG ENDSCODE SEGMENTASSUME CS:CODE,SS:SSEG,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AX,SSEGMOV SS,AXMOV DX,OFFSET MESS1MOV AH,09HINT 21HMOV AH,0AHMOV DX,OFFSET DATABUFINT 21HCRLFMOV AL,STRINGCMP AL,38HJAE NEGATIVECMP AL,30HJNZ POSITIVEMOV AL,STRING[1]CMP AL,30HJNZ POSITIVEMOV DX,OFFSET MESS4MOV AH,09HINT 21HJMP RRNEGATIVE:MOV DX,OFFSET MESS3MOV AH,09HINT 21HJMP RRPOSITIVE:MOV DX,OFFSET MESS2MOV AH,09HINT 21HJMP RRRR:MOV AX,4C00HINT 21HCODE ENDSEND START四、调试过程1.将代码编译链接成EXE文件,然后进入DEBUG进行调试。
微机原理实验报告西安交通大学
西安交通大学电子信息与工程学院自动化科学与技术系微机原理与接口技术实验报告实验名称:微机原理与接口技术实验者姓名: XX 实验者学号:21105040XX所在班级:自动化1X报告完成日期:2014年1月12日实验一数据传送、算术运算、循环程序结构1、实验目的a)熟悉8086汇编语言源程序的框架结构,并掌握汇编语言程序的编写、汇编、连接、执行的过程,并利用Turbo Debugger调试汇编程序。
b)熟悉8086指令系统的数据传送指令,掌握寻址方式。
c)熟悉8086指令系统的算术运算指令。
掌握循环结构汇编语言程序的编制。
2、实验内容教材P121,第14、15题。
教材P195,第6题。
教材P196,第12题。
3、具体实验第一题(P121,第14题)设有两个8个字节长的BCD码数据BCD1及BCD2。
BCD1数以1000H为首地址在内存中顺序存放;BCD2数以2000H为首地址在内存中顺序存放。
要求相加后结果顺序存放在以2000H为首地址的内存区中(设结果BCD数仍不超过8个字节长)。
a) 实验原理考虑两个8个字节长的BCD码相加,首先根据地址要求将数据放在对应的地址单元中,然后做加法,BCD码相加要用到调整指令,结果才为正确的BCD数b) 程序框图c) 程序源代码DATAS SEGMENTORG1000HBCD1 DB 01H,02H,03H,04H,05H,06H,07H,88H;起始地址为1000H ORG2000HBCD2 DB 11H,12H,13H,14H,15H,16H,17H,18H;起始地址为2000H DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXMOV BX,0MOV CX,8 ;设置循环次数8次CLC ;清进位CF标志AGAIN:MOV AL,[BX+1000H]ADC [BX+2000H],AL;结果放在2000H开始的单元内DAAINC BXLOOP AGAIN;没完成则转AGAIN循环MOV AH,4CHINT 21HCODES ENDSEND START运行: BCD1 DB 11H,12H,13H,14H,15H,16H,17H,18HBCD2 DB 21H,22H,23H,24H,25H,26H,27H,28H结果如下:DS:2000H为首地址的连续八个字节单元中第二题(P121,第15题)设从2000H为首地址的内存中,存放着10个带符号的字节数据,试编写“找出其中最大的数,并存入2000H单元中“的程序。
微机原理与接口技术实验报告2-8255可编程并行接口实验
西安交通大学实验报告成绩第页共页课程微机原理与接口技术实验系别生物医学工程实验日期年月日专业班级组别交报告日期年月日姓名学号报告退发 (订正、重做) 同组者教师审批签字实验名称8255可编程并行接口实验一、实验目的:1、掌握8255芯片结构及工作方式;2、熟悉8255并行口扩展的编程。
二、实验设备1、Lab6000p实验教学系统;2、IBM-PC机三、系统中8255模块Lab6000p实验箱中的8255模块连线如图所示:AD0~AD7、A0、A1、RESET、/WR、/RD已分别连至系统总线DB0~DB7、AB0、AB1、RESET、/IOW、/IOR;8255_CS、PA口、PB口、PC口引出留给用户连接。
四、实验内容和实验步骤1、8255基本输入输出方式――开关控制LED显示1)实验要求开关拨上LED亮,开关拨下LED灭。
2)电路连接8255_CS连至地址译码/CS0,PA口连至LED电平显示模块,PB口连至开关电路。
3)程序框图4)程序代码mode equ 082h ; 方式0,PA,PC输出,PB输入PortA equ 8000h ; Port APortB equ 8001h ; Port BPortC equ 8002h ; Port CCAddr equ 8003h ; 控制字地址code segmentassume cs:codeStart:mov al, modemov dx, CAddrout dx, al ; 输出控制字loop1: mov dx, PortBin al, dxmov dx, PortAout dx, aljmp loop1code endsend start5)实验步骤[1]在Lab6000p实验箱上完成连接电路;[2]开启计算机电源,开启Lab6000p实验箱电源;[3]启动WAVE6000软件;[4]确认WAVE6000与Lab6000p连接;[5]输入源代码;[6]编译源代码(F9);[7]单步运行源代码(F8),观察每条指令执行结果;[8]连续运行程序(Ctrl+F9),上下拨动开关观察LED显示情况。
西安交大微机原理第二次实验报告
微型计算机原理与接口技术第二次实验报告实验者姓名:实验者学号:所在班级:报告完成日期:20年月日实验四8255A并行接口实验一、实验目的1.学会通过PC总线、驱动器、译码器等在PC机外部扩充新的芯片。
2.了解8255A并行口的工作原理。
3.掌握8255A初始化的程序设计方法。
4.掌握8255A方式0的基本输入/输出和方式1的选通型输入/输出方式的使用方法。
二、实验内容1.[实验一]使8255A工作于方式0,将由C口读入的开关状态从A口输出到LED上显示出来。
接线方式:断开电源,将8255A的CS接I/O地址输出端288H~28FH,C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。
2.[实验二]使8255工作于方式1,将由A口读入的状态从B口输出到LED上显示出来。
接线方式:断开电源,将8255A的CS接I/O地址输出端288H~28FH,A口接逻辑电平开关K0~K5,B口接LED显示电路L0~L5,C口相应位分别接开关或LED发光二极管。
三、程序及框图1.实验一:8255A工作于方式0[程序代码]PPIA EQU 288HPPIB EQU 289HPPIC EQU 28AHPPICTL EQU 28BHDATA SEGMENTMESS1 DB '8255A IN MODE 0!',0DH,0AH,'$'MESS2 DB 'ENTER ANY KEY RETURN TO DOS!',0DH,0AH,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET MESS1 ;数据段段寄存器结构MOV AH,09HINT 21H ;显示提示信息1MOV DX,OFFSET MESS2MOV AH,09HINT 21H ;显示提示信息2MOV AL,10001001BMOV DX,PPICTLOUT DX,ALCOUNT:MOV DX,PPIC ;8255A的C口读入数据IN AL,DXMOV DX,PPIA ;将数据送至8255A的A口输出OUT DX,ALMOV AH,06H ;若有键按下,则退出MOV DL,0FFHINT 21HJZ COUNTMOV AX,4C00HINT 21HCODE ENDSEND START[实验框图]2.实验二:8255A工作于方式1[程序代码]PPIA EQU 288HPPIB EQU 289HPPIC EQU 28AHPPICTL EQU 28BHDATA SEGMENTMESS1 DB '8255A IN MODE 0!',0DH,0AH,'$'MESS2 DB 'ENTER ANY KEY RETURN TO DOS!',0DH,0AH,'$' DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET MESS1MOV AH,09HINT 21HMOV DX,OFFSET MESS2MOV AH,09HINT 21HMOV AL,10111101BMOV DX,PPICTLOUT DX,ALCOUNT:MOV DX,PPIC ;从C口读入IBF(PC5)状态信号IN AL,DXAND AL,00100000B ;取PC5位来看JZ COUNT ;IBF=0,YES则跳COUNTMOV DX,PPIA ;从A口读入数据IN AL,DXPUSH AXRDC:MOV DX,PPIC ;从C口读入OBF(PC1)状态信号IN AL,DXAND AL,0000010B ;取PC1位来看JZ RDC ;IBF=0,YES则跳COUNTPOP AXMOV DX,PPIB ;向B口输出数据OUT DX,ALMOV AH,06HMOV DL,0FFHINT 21HJZ COUNTMOV AX,4C00HINT 21HCODE ENDSEND START[实验框图]四、实验结果及分析1.实验一:8255A工作于模式0按照连线要求,在TPC-ZK实验板上连好线。
微机原理实验报告
微机原理实验报告实验目的,通过本次实验,掌握微机原理的基本知识,了解微机系统的组成和工作原理,掌握微机系统的组装和调试方法。
实验一,微机系统组成及工作原理。
1.1 微机系统的组成。
微机系统由中央处理器(CPU)、内存、输入设备、输出设备和外部设备等组成。
其中,CPU是微机系统的核心部件,负责控制整个系统的运行。
1.2 微机系统的工作原理。
微机系统的工作原理是通过CPU对内存中的指令进行解释和执行,从而实现各种功能。
CPU通过总线与内存、输入输出设备进行数据传输和控制信号的交换,实现对整个系统的控制和管理。
实验二,微机系统的组装和调试。
2.1 微机系统的组装。
在组装微机系统时,首先要选择合适的主板、CPU、内存、硬盘等配件,然后按照正确的安装顺序和方法进行组装。
组装完成后,还需连接电源、显示器、键盘、鼠标等外部设备。
2.2 微机系统的调试。
组装完成后,需要对微机系统进行调试,检查各个部件是否连接正确,是否能够正常工作。
通过BIOS设置和操作系统的安装,完成对微机系统的调试和配置。
实验三,微机系统的应用。
3.1 微机系统的应用领域。
微机系统广泛应用于各个领域,如办公、教育、科研、娱乐等。
在办公领域,微机系统可以用于文字处理、表格制作、图像处理等;在教育领域,微机系统可以用于多媒体教学、网络教学等。
3.2 微机系统的发展趋势。
随着科技的不断发展,微机系统也在不断更新换代,性能不断提升,体积不断缩小,功耗不断降低。
未来,微机系统将更加智能化、便携化,成为人们生活、工作不可或缺的一部分。
结论,通过本次实验,我对微机原理有了更深入的了解,掌握了微机系统的组成和工作原理,了解了微机系统的组装和调试方法,对微机系统的应用和发展趋势也有了一定的认识。
这对我今后的学习和工作将有很大的帮助。
微机原理实验报告
微机原理实验报告
一、实验目的
本次实验的主要目的是了解微机原理、学习微机的基础知识、技能和操作方法,还有熟悉微机实验室的使用方法。
二、实验过程
在实验室中,我们首先进行了掌握微处理器的基本指令集和编程技巧的实验。
通过对微处理器的学习,我们了解到了微处理器的组成结构和工作原理,同时也了解了微处理器的基础指令集,包括数据的传送、算术、逻辑、分支、循环指令等等。
接着我们进行了CPU总线实验。
通过对CPU总线的学习,我们了解了CPU读写内部和外部存储器的方法和原理。
同时,我们学习了编写程序来控制CPU读写存储器等。
最后,我们进行了8255并行接口控制实验。
通过学习并实践8255并行接口控制实验,我们了解了接口及其编程。
三、实验结果
在实验中,我们成功地掌握了微处理器的基本指令集和编程技巧,了解了微处理器的组成结构和工作原理,同时掌握了CPU总
线实验和8255并行接口控制实验。
在实验中不仅增长了专业知识,而且也培养了我们的实验能力,并进一步增强了我们的实践能力。
四、实验心得
通过这次实验,我们意识到,要想成为一名优秀的计算机专业
人才,必须首先打牢微机原理的基础,通过大量的实践和实验,
来应用理论知识,深入了解计算机底层的数据处理方式以及处理
器和存储器的工作原理。
只有这样才能够在日后工作中运用自如,并且在以后的学习和研究中更具备竞争力。
在以后的学习中,我将持续学习和实践,不断探索和发现,提
升自身的能力,为未来的发展做好充分的准备。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安交通大学电子信息与工程学院自动化科学与技术系微机原理与接口技术实验报告实验名称:微机原理与接口技术实验者姓名: XX 实验者学号:21105040XX所在班级:自动化1X报告完成日期:2014年1月12日实验一数据传送、算术运算、循环程序结构1、实验目的a)熟悉8086汇编语言源程序的框架结构,并掌握汇编语言程序的编写、汇编、连接、执行的过程,并利用Turbo Debugger调试汇编程序。
b)熟悉8086指令系统的数据传送指令,掌握寻址方式。
c)熟悉8086指令系统的算术运算指令。
掌握循环结构汇编语言程序的编制。
2、实验内容教材P121,第14、15题。
教材P195,第6题。
教材P196,第12题。
3、具体实验第一题(P121,第14题)设有两个8个字节长的BCD码数据BCD1及BCD2。
BCD1数以1000H为首地址在内存中顺序存放;BCD2数以2000H为首地址在内存中顺序存放。
要求相加后结果顺序存放在以2000H为首地址的内存区中(设结果BCD数仍不超过8个字节长)。
a) 实验原理考虑两个8个字节长的BCD码相加,首先根据地址要求将数据放在对应的地址单元中,然后做加法,BCD码相加要用到调整指令,结果才为正确的BCD数b) 程序框图c) 程序源代码DATAS SEGMENTORG1000HBCD1 DB 01H,02H,03H,04H,05H,06H,07H,88H;起始地址为1000H ORG2000HBCD2 DB 11H,12H,13H,14H,15H,16H,17H,18H;起始地址为2000H DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXMOV BX,0MOV CX,8 ;设置循环次数8次CLC ;清进位CF标志AGAIN:MOV AL,[BX+1000H]ADC [BX+2000H],AL;结果放在2000H开始的单元内DAAINC BXLOOP AGAIN;没完成则转AGAIN循环MOV AH,4CHINT 21HCODES ENDSEND START运行: BCD1 DB 11H,12H,13H,14H,15H,16H,17H,18HBCD2 DB 21H,22H,23H,24H,25H,26H,27H,28H结果如下:DS:2000H为首地址的连续八个字节单元中第二题(P121,第15题)设从2000H为首地址的内存中,存放着10个带符号的字节数据,试编写“找出其中最大的数,并存入2000H单元中“的程序。
a)实验原理首先把十个带符号数放在要求的的存储单元中,然后再进行比较,有符号数的比较用JL,JC,JNG,等指令,首先设计一个最小带符号数80H作为比较初值,用2000H单元中的数分别与其它进行比较,若大于则把该单元的数存入2000H 单元,否则不予处理。
对于该题,我采用的是字符串指令,由于是隐含寻址,把2000H中的数作为字符串源操作数,其它进行一次循环则依次放入AL中,注意的是当CX为10时,DL=80H。
b)程序框图c)程序源代码DATA SEGMENTORG2000H;数据存放在2000H开始的单元BCD DB10H,28H,49H,69H,0A1H,0C3H,96H,29H,45H,02H DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV SI,2000H;地址指针指向单元首地址MOV CX,10MOV DL,80H;设置最小符号数L1: LODSBCMP AL,DL;比较带符号数JNG L2 ;(DL)大则跳转L2MOV DL,AL;DL指向内容小则交换L2: LOOP L1MOV DS:[2000H],DL;最大数存放在2000H单元MOV AH,4CHINT 21HCODE ENDSEND START运行:BCD DB10H,28H,49H,69H,0A1H,0C3H,96H,29H,45H,02H 结果为69H第三题(P195,第6题)试编制一程序,用乘法指令实现32位二进制数与16位二进制数相乘。
a)实验原理首先把被乘数第八位和高八位分别与乘数相乘,高八位乘得结果左移16位与第八位乘得结果相加即为结果。
b)程序框图c)程序源代码DATA SEGMENTDATAX DW1000H,1000HDATAY DW2000HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV BX,1000H ;将把结果存到1000H开始的单元中MOV SI,OFFSET DATAXMOV DI,DATAYMOV AX,[SI]MUL DI ;把低16位相乘,结果存到AX,DX中MOV[BX],AX ;把结果中低16位存到BX对应的存储单元MOV[BX+2],DX ;把结果中高16位存到BX+2对应的存储单元MOV AX,[SI+2] ;计算被乘数高16位相乘的结果MUL DIADD[BX+2],AX ;把两次相乘结果对应(把第二次的结果;向左移16位)相加,最后结果存在了[BX] 到[BX+5]ADD[BX+4],DXMOV AH,4CHINT 21HCODE ENDSEND START运行:结果在DS:1000中第四题(P196,第12题)设有两个等字长,字节型字符串,试编写一汇编程序,比较它们是否完全相等,若相等则将字符Y送入AL中,否则将字符N送入字符中。
a)程序框图b)程序源代码DATA SEGMENTSTRX DB'CZX0','$'STRY DB'CZX1','$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV ES,AXCLDLEA DI,STRY;取字符串1首地址LEA SI,STRX;取字符串2首地址CALL L1MOV DL,AL ;显示结果MOV AH,02HINT 21HMOV AH,4CHINT 21HL1 PROCMOV CX,10REPZ CMPSB STRX,STRY ;比较两个字符串JNZ RA ;不相等则跳转到RAMOV AL,'Y';相等则将Y送ALJMP RBRA: MOV AL,'N';不相等则将Y送ALRB:RET ;比较结束返回程序L1 ENDPCODE ENDSEND START运行:当字符串为STRX DB'CZX0','$'STRY DB'CZX1','$'当字符串为STRX DB'CZX0','$'STRY DB'CZX0','$'4、实验中遇到的问题:在刚开始接触实验时感觉非常困难,无从下手,后来经过仔细认真阅读书上的经典程序之后,基本能够写出关键程序片段,再借助辅导书完善了实验程序内容,基本顺利地完成了实验。
本次实验让我熟悉了汇编语言的实现步骤和常用的指令系统,同时也学会了利用DEBUG调试汇编程序。
实验二汇编语言程序设计1、实验目的a)练习编写较复杂汇编语言程序时程序框图的绘制。
b)子程序定义与调用,参数传递的方法。
c)了解宏指令的定义与调用,并与子程序定义与调用进行比较。
d)掌握利用软件中断实现DOS系统调用的方法。
2、具体实验第一题:教材4章,第8题,设n=10。
即试编制程序,找出前十个质数。
提示:编写一个判断某数是否质数的子程序,主程序调用该子程序,对顺序递增的自然数进行是否质数的判断,若是则存放在质数缓冲区中,直到找到10个质数,程序结束。
判断一个数N是否是质数的一种算法是:将N顺序与2~N-1的数相除,若每次除法的余数均不等于0,则该数是质数。
注意:8086的除法支持双字除以字,字除以字节,本题中可以选择字除以字节。
正确结果为:02,03,05,07,0B,0D,11,13,17,1D(十六进制数)a)实验原理找出前十个质数,质数只能被1和其自身整除,但考虑到如果从2开始一个一个的除的算法效率太低,很多已经是合数的作为除数是浪费的,故该算法用每一个数除以已经判断出来的质数(均小于该数),如果不能整除则说明该数是质数,能整除说明该数不是质数,继续进行下一个判断。
b)程序框图c)程序源代码N EQU 10STRDISP MACRO POSMOV DX,OFFSET POSMOV AH,9HINT 21HENDMNUMTOSTR MACRO NUM,POSMOV AX,NUMMOV SI,OFFSET POSADD SI,LENGTH POS-2;从最后开始(不考虑字符串结束符"$")存放5个字符CALL WORDTOSTR;ENDMDATAS SEGMENTNUMBER DW N DUP(0)LAST DW?NUMNOW DW?STR1 DB"The first ten prime numbers are as follows:",0DH,0AH,"$"STR3 DB"PRESS ANY KEY TO CONTINUE","$"STRNO DB 6 DUP(" "),"$"STRPRIME DB 6 DUP(" "),"$"HCHH DB 0DH,0AH,"$"DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS,ES:DATAS START:MOV AX,DATASMOV DS,AXMOV ES,AXMOV AX,STACKSMOV SS,AXMOV SI,OFFSET NUMBER;质数数组首地址MOV BX,0MOV NUMBER[SI+BX],2;第一个质数为2MOV LAST,0;最后一个质数地址MOV DX,2;第一个质数是2MOV NUMNOW,1;质数计数LOOP1:INC DX;往后查找MOV BX,2;MOV CX,0LOOP2:;判定DX中数据是否是质数PUSH DX;保存现场,防止除法运算带来的改变MOV AX,DXMOV DX,0ADD SI,CX;求出作为除数的质数的相对位移MOV BX,NUMBER[SI];从质数集里读取质数ADC SI,CX;还原SIINC CXINC CX;cx自加2DIV BX;DX<-(DX:AX)/(BX)余数CMP DX,0POP DXJZ LOOP1;除尽则表示该数不是质数,继续查找下一个CMP BX,DXJB LOOP2;如果除数小于被除数,则增大除数继续做除法ADD LAST,2;相当于指针往后移动一个字的单位长度MOV BX,LASTMOV NUMBER[SI+BX],DX;将找到的质数存入数组,基址变址寻址ADD NUMNOW,1;质数计数加1CMP NUMNOW,N;得到N个质数则结束JNZ LOOP1;否则继续查找;输出结果MOV NUMNOW,1MOV DI,OFFSET NUMBERSTRDISP STR1DISPLAY:NUMTOSTR NUMNOW,STRNOMOV AX,DS:[DI]NUMTOSTR AX,STRPRIMESTRDISP STRPRIME;输出质数STRDISP HCHHINC DIINC DIADD NUMNOW,1CMP NUMNOW,NJBE DISPLAY;等待键盘输入,使程序不会立即退出STRDISP STR3MOV AH,08HINT 21HMOV AH,4CHINT 21H;子程序;WORDTOSTR;将AX中数字转换成5个字符的字符串,存入SI为首地址的存储单元里WORDTOSTR PROC FARPUSH SIMOV CX,5;设置循环次数NEXTDIGIT:MOV DX,0MOV BX,10CMP AX,0JZ BLANKDIV BXADD DX,30H;将得到的每位数字转换为对应的ASCII码SETCHAR:MOV [SI],DLDEC SIMOV DX,0LOOP NEXTDIGITPOP SICMP BYTE PTR [SI],20HJZ ZERORETZERO:MOV BYTE PTR[SI],30HRETBLANK:MOV DL,20HJMP SETCHARWORDTOSTR ENDPCODES ENDSEND START运行结果:第二题编写一个汇编程序,实现N!(N>=0):N!=N*(N-1)*(N-2)*……*1(设N=3),跟踪IP变化,观察堆栈的变化,理解子程序递归调用中程序执行的流程,以及帧信息的组成。