东南大学微机实验报告一
- 格式:doc
- 大小:993.37 KB
- 文档页数:10
东南大学自动化学院微机实验及课程设计报告《参数可调波形发生器》姓名:学号:专业:实验室:组别:同组人员:设计时间:评定成绩:审阅教师:目录一.设计目的和要求--------------------------------------3 二.原理设计--------------------------------------------4 三.方案论证与实现--------------------------------------6 四.设计思路及流程图--------------------------------------------------------7 五.编程实现--------------------------------------------------------------------10六.方案测试与结果分析----------------------------------18 六.改进与提高------------------------------------------19 七.分析与总结------------------------------------------19一、设计要求1)基本要求编制1 个参数在线可调的波形发生程序,由D/A 输出,构成参数在线可调的波形发生器,并用示波器观察波形。
函数波形可选f(t)=asin(bt),其中a、b参数在线可调(也可自己选择,但要求至少2 个参数可调且调节很明显)。
参数调节采用如下两种方式之一:(1)两个可调电位器输出通过A/D 转换后作为可调参数;(2)参数通过实验装置上的键盘实时修改(调整);(3)精确时间,开关选择标准信号输出(例如a=2V, b=100πRAD/s,即50Hz 正弦波)。
2)设计提示(1)当用电位器调节参数时,输出零不能对应相应的参数值就为零;(2)当通过键盘修改参数时,先键入参数名如“a”,显示当前参数值,修改后再键入参数名,则修改参数完成,随后输出波形发生变化。
东南大学《乒乓球比赛》微机课程设计实验报告姓名:学号:专业:吴健雄学院实验室:实验时间:2013年00月00日报告时间:2013年00月00日评定成绩:审阅教师:目录一、实验目的与内容 (2)二、总方案设计及原理 (3)(一)比赛规则 (3)(二)面板设计 (3)(三)方案流程图 (3)三、方案实现与测试 (5)(一)各模块硬件设计 (5)(二)整体硬件连线图 (6)(三)系统框图 (7)(四)主程序设计 (7)(1)主程序流程图 (7)(2)主要程序片段 (9)(五)子程序设计 (11)(1)延时子程序 (11)(2)屏幕显示子程序 (12)(3)数码管扫描比分子程序 (13)(4)移动速度选择子程序 (16)(5)规定等待时间选择子程序 (17)四、程序设计中遇到的问题及解决方法 (18)五、分析与总结 (18)附录 (19)一. 实验目的与内容1)基本要求用8个LED 发光管(红黄绿)的来回滚动显示来模拟打乒乓球时乒乓球在两边球台上的来回运动。
比赛双方用按钮/开关(双方各用1个按钮/开关)来模拟发球与接球,即发球方按动其控制的按钮/开关,球从发球方一侧向另一方运动(LED发光管从发球方到对方逐个点亮,滚动显示),当球运动至接球方时,接球方立即按动其控制的按钮/开关,“击球”使球“弹回”发球方一侧,如此周而复始,直至在规定的击球时间内有一方未能完成击球动作,从而对方得一分,然后继续比赛。
比赛规则可参照一般的乒乓球比赛规则。
要求:(1) 球以每0.5秒滚过1个LED的速度移动;(2) 回球需在球到达后的0.5秒内进行(按下按钮),否则按失球计;(3) 球未到达提前按下按钮按失球处理,不起回球作用;(4) 在PC机上显示比赛过程,同时用2个八段数码管显示比分(按10进制计数,初始值 0:0,可自行设计显示及规则,可简化为0-9,也可为0-99);(5) 要求精确计时。
2)设计提示球到达接球方后,立即读接球方的按钮状态,若未按则有效(若已按下则按失球计),并开始0.5秒的计时,在这个0.5秒内不断读接球方按钮状态,直到按下代表“击球”动作。
东南大学《微机实验及课程设计》实验报告实验六8255 并行输入输出姓名:学号:专业:实验室:计算机硬件技术实验时间:年05月22日报告时间:年05月29日评定成绩:审阅教师:一.实验目的与内容(一)实验目的1)掌握8255方式0的工作原理及使用方法,利用直接输入输出进行控制显示;2)掌握8段数码管的动态刷新显示控制;(二)实验内容及要求1、8段数码管静态显示:编程从键盘输入一位十进制数字(0~9),在数码管上显示出来。
(必做)2、8段数码管动态显示:在两个数码管上同时显示不同的两位数字或字母,保持不变直至退出。
(如56或7f)(必做)3、静态显示:用逻辑电平开关预置某个数字(0~9)的二进制码,将该数据用8255的C口读入,并用A口输出,并在数码管显示出来。
4、动态显示:在两个数码管上滚动循环显示不同的0~f字符。
(即开始时两个数码管显示01,12,23,34 ······ 9a······f0,一直循环直至退出)注:3,4中选做一题,必做一题二. 实验基本原理(一)实验接线图PA0~PA6分别接数码管的a~gPC0~PC7分别逻辑电平开关的K0~K7位选端S1接+5V位选端S0接地数码管dp端接地必做1,3 接线图PA0~PA6分别接数码管的a~g位选端S0 、S1接8255C口的PC0、PC1端必做2 接线图(二)程序流程图开 始设置8255C口输入A口输出从C口输入数据将此数据自A口输出有键按下吗?NY结 束图 8255 简单输入输出程序流程图图 8255 动态显示5 6 程序流程图三方案实现与测试(或调试)必做实验1:data segmentioport equ 0ec00h-0280hio8255a equ ioport+288hio8255b equ ioport+28bhled db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh mesg1 db 0dh,0ah,'Input a num(0--9h):',0dh,0ah,'$'data endscode segmenta ssume cs:code,ds:datastart: mov ax,datam ov ds,axm ov dx,io8255b ;使8255的A口为输出方式m ov ax,80ho ut dx,alsss: mov dx,offset mesg1 ;显示提示信息m ov ah,09hi nt 21hm ov ah,01 ;从键盘接收字符i nt 21hc mp al,'0' ;是否小于0j l exit ;若是则退出c mp al,'9' ;是否大于9j g exit ;若是则退出s ub al,30h ;将所得字符的ASCII码减30Hm ov bx,offset led ;bx为数码表的起始地址x lat ;求出相应的段码m ov dx,io8255a ;从8255的A口输出o ut dx,alj mp sss ;转SSS exit: mov ah,4ch ;返回DOS i nt 21hcode endsend start必做实验2:data segmentioport equ 0ec00h-0280hio8255a equ ioport+28ahio8255b equ ioport+28bhio8255c equ ioport+288hled db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh buffer1 db 5,6bz dwdata endsstacks segment stackdb 100 dup()stacks endscode segmentassume cs:code,ds:data,ss:stacksstart: mov ax,stacksmov ss,axmov ax,datamov ds,axmov dx,io8255bmov al,80hout dx,almov di,offset buffer1;23loop2: mov bh,02hlll: mov byte ptr bz,bhpush didec diadd di,bzmov bl,[di] pop dimov al,0mov dx,io8255aout dx,almov bh,0mov si,offset led add si,bxmov al,byte ptr [si] mov dx,io8255cout dx,almov al,byte ptr bz mov dx,io8255aout dx,almov cx,3000delay: loop delaymov bh,byte ptr bz shr bh,1jnz lllmov dx,0ffhmov ah,06hint 21hje loop2mov dx,io8255amov al,0out dx,almov ah,4chint 21hcode endsend start选做实验1:data segmentioport equ 0ec00h-0280h ;tpc卡中设备的io地址io8255a equ ioport+288h ;8255A口地址io8255b equ ioport+28bh ;8255控制寄存器端口地址io8255c equ ioport+28ah ;8255C口地址led db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,79h data endsstacks segment stackdb 100 dup ()stacks endscode segmentassume cs:code,ds:data,ss:stacksmain proc farstart: mov ax,stacksm ov ss,axmov ax,datam ov ds,axm ov dx,io8255b ;设8255为C口输入,A口输出m ov al,8bho ut dx,alinout: mov dx,io8255c ;从C 口输入一数据i n al,dxc mp al,30h ;是否小于0j l error ;若是则显示Ec mp al,39h ;是否大于9j g error ;若是则显示Esub al,30hjmp showerror: mov al,79hmov dx,io8255aout dx,al;显示Eshow: mov bx,offset led ;bx为数码表的起始地址x lat ;求出相应的段码mov dx,io8255a ;从A 口输出刚才自C口所输入的数据o ut dx,alm ov dl,0ffh ;判断是否有按键m ov ah,06hi nt 21hj z inout ;若无,则继续自C 口输入,A口输出m ov ah,4ch ;否则返回DOSi nt 21hmain endpcode endsend start选做实验2:data segmentioport equ 0ec00h-0280hio8255a equ ioport+288hio8255b equ ioport+289hio8255c equ ioport+28ahio8255d equ ioport+28bhled db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h ,7ch,39h,5eh,79h,71h ;段码buffer1 db 0,1 ;存放要显示的十位和个位bz dw ;位码count dwcount1 dwdata endsmystack segment para stackdb 100 dup()mystack endscode segmenta ssume cs:code,ds:data,ss:mystackstart:mov ax,datam ov ds,axmov dx,io8255b ;将8255设为A 口输出m ov al,80ho ut dx,albegin3: mov count1,0fhbegin2: mov count,3000mov ax,countbegin1: mov count,ax mov cx,02hmov ah,02hlea si,buffer1mov bx,offset led begin: mov al,[si] xlatmov dx,io8255aout dx,almov al,ahmov dx,io8255cout dx,alcall delaymov al,0out dx,alinc sishr ah,1loop beginmov ax,countdec axjnz begin1mov si,0inc buffer1[si] inc siinc buffer1[si]dec count1jnz begin2mov si,offset buffer1 mov byte ptr[si],0mov byte ptr[si+1],1 mov dx,0ffhmov ah,06hint 21hje begin3jne exitdelay procpush cxmov cx,0ffffhdelay1: loop delay1 pop cxretdelay endpexit: mov ah,4chint 21hcode endsend start四.分析与总结1、8255作为一个并行输入输出接口电路可实现动态和静态的输入输出,在静态实验中,我们通过键盘输入数据,实际上就是用计算机读取键盘的输入值通过8255输出给外设的过程,动态实验中计算机直接读取内存中的数通过8255送到数码管上显示出来2、8255的A口、B口、C口和控制口的端口地址分别为288H~28BH。
计算机硬件课程设计设计报告学号:09008112 姓名:马京亚成绩:学号:09008123 姓名:郭晨成绩:东南大学计算机科学与工程学院二〇一〇年十一月目录一、设计名称: (3)二、实验目的: (3)三、实验任务: (3)四、设计方案: (4)1.数据格式和指令系统 (4)2.硬件结构设计 (5)3.数据通路设计 (6)4.控制器设计 (7)5.指令的微程序表 (10)6.总电路图及Rom (11)五、设计优化 (12)1.更改时序 (12)2.增加指令 (13)3.减少ROM空间 (17)4.总电路图 (19)六、测试结果与性能分析 (20)1.测试程序 (20)2.时序图 (21)3.编译报告中资源使用情况 (22)七、课程设计总结 (23)微程序控制的模型计算机的设计与调试二、实验目的:1.综合运用“计算机组成原理”和“数字电路”等课程的知识,通过对模型机的设计和调试,加深对计算机各部件工作原理的认识。
2.进一步掌握运用EDA 技术进行设计和调试的工作方法。
3.掌握计算机硬件设计的思想,方法及工作过程,进一步培养工程设计的能力。
三、实验任务:1.自行规定数据格式和指令格式,在所提供的条件范围内设计一台由微程序控制的模型计算机。
2.根据设计方案,将模型机调试成功,对设计进行优化。
3.整理出相关文件。
(1)数据格式和指令系统。
(2)总框图。
(3)详细电路图。
(4)微指令格式和微程序。
(5)调试过程和测试结果(包括测试程序)。
1.数据格式和指令系统采用8 位数据通路,数据采用8 位二进制定点表示。
7 6 5 4 3 2 1 0.设置7 条机器指令和2条面板操作指令(1)面板操作指令a.输入地址为PC 置初始值,即输入程序的起始地址,当K1 开关置“1”,K2 开关置“0”时执行此操作;b.输入程序将程序输入到内存的指定区域,当K1,K2 开关均置“1”时,由面板输入开关输入程序;c.本模型机设置K3 开关,K3 置1 表示执行单步操作;d. START 表示启动开关。
东南大学计算方法与实习实验报告学院:电子科学与工程学院学号:06A*****姓名:***指导老师:***实习题14、设S N=Σ(1)编制按从大到小的顺序计算S N的程序;(2)编制按从小到大的顺序计算S N的程序;(3)按两种顺序分别计算S1000,S10000,S30000,并指出有效位数。
解析:从大到小时,将S N分解成S N-1=S N-,在计算时根据想要得到的值取合适的最大的值作为首项;同理从小到大时,将S N=S N-1+ ,则取S2=1/3。
则所得式子即为该算法的通项公式。
(1)从大到小算法的C++程序如下:/*从大到小的算法*/#include<iostream>#include<iomanip>#include<cmath>using namespace std;const int max=34000; //根据第(3)问的问题,我选择了最大数为34000作为初值void main(){int num;char jus;double cor,sub;A: cout<<"请输入你想计算的值"<<'\t';cin>>num;double smax=1.0/2.0*(3.0/2.0-1.0/max-1.0/(max+1)),temps;double S[max];// cout<<"s["<<max<<"]="<<setprecision(20)<<smax<<'\n';for(int n=max;n>num;){temps=smax;S[n]=temps;n--;smax=smax-1.0/((n+1)*(n+1)-1.0);}cor=1.0/2.0*(3.0/2.0-1.0/num-1.0/(num+1.0)); //利用已知精确值公式计算精确值sub=fabs(cor-smax); //double型取误差的绝对值cout<<"用递推公式算出来的s["<<n<<"]="<<setprecision(20)<<smax<<'\n';cout<<"实际精确值为"<<setprecision(20)<<cor<<'\n';cout<<"则误差为"<<setprecision(20)<<sub<<'\n';cout<<"是否继续计算S[N],是请输入Y,否则输入N!"<<endl;cin>>jus;if ((int)jus==89||(int)jus==121) goto A;}(2)从小到大算法的C++程序如下:/*从小到大的算法*/#include<iostream>#include<iomanip>#include<cmath>using namespace std;void main(){int max;A: cout<<"请输入你想计算的数,注意不要小于2"<<'\t';cin>>max;double s2=1.0/3.0,temps,cor,sub;char jus;double S[100000];for(int j=2;j<max;){temps=s2;S[j]=temps;j++;s2+=1.0/(j*j-1.0);}cor=1.0/2.0*(3.0/2.0-1.0/j-1.0/(j+1.0)); //利用已知精确值公式计算精确值sub=fabs(cor-s2); //double型取误差的绝对值cout<<"用递推公式算出来的s["<<j<<"]="<<setprecision(20)<<s2<<'\n';cout<<"实际精确值为"<<setprecision(20)<<cor<<'\n';cout<<"则误差为"<<setprecision(20)<<sub<<'\n';cout<<"是否继续计算S[N],是请输入Y,否则输入N!"<<endl;cin>>jus;if ((int)jus==89||(int)jus==121) goto A;}(3)(注:因为程序中setprecision(20)表示输出数值小数位数20,则程序运行时所得到的有效数字在17位左右)ii.选择从小到大的顺序计算S1000、S10000、S30000的值需要计算的项S1000S10000S30000计算值0.74900049950049996 0.74966672220370571 0.74996666722220728实际精确值0.74900049950049952 0.74990000499950005 0.74996666722220373误差 4.4408920985006262*10-16 5.6621374255882984*10-15 3.5527136788005009*10-15有效数字17 17 17附上部分程序运行图:iii.实验分析通过C++程序进行计算验证采用从大到小或者从小到大的递推公式算法得到的数值基本稳定且误差不大。
东南大学《微机实验及课程设计》实验报告实验三定时-中断实验:模拟流水灯姓名:学号:专业:自动化类实验室:金智楼416实验时间:2020年4月29日报告时间:2020年5月1日评定成绩:审阅教师:实验三定时-中断实验:模拟流水灯一. 实验目的与内容1.实验目的:1)掌握 PC 机中断处理系统的基本原理;2)学会编写中断服务程序。
3)掌握计数器/定时器 8253/8254 的基本工作原理和编程应用方法;4)了解掌握 8253(8254)的计数器/定时器典型应用方法。
2.实验内容:1. 查阅实验指导书 P60,了解微机主板上的 8259 IRQ0 是留给时钟的中断,类型号是 08H;2. 在提供的例程 int.asm 基础上编写利用 IRQ0 的定时中断程序(即修改对应的中断服务程序),每次中断在屏幕上输出一行字;3. 查阅课本 P273 例程,了解主机板上 8253 端口号和通道 0 对应的时钟,修改 8253 初始化程序,使得通道 0 输出时钟为55ms;4. 修改之前的程序,使其功能为:每 18 次中断(对应约1s)在屏幕上输出一行字;5. 根据提供的画图程序,模拟单色流水灯,按每秒一个灯向着单方向流动;6. 双向流水灯、键控(方向/加减速)流水灯。
二. 基本实验原理中断:PC 机用户可使用的硬件中断只有可屏蔽中断,由 8259 中断控制器管理。
中断控制器用于接收外部中断请求信号,经过优先级判别等处理后向 CPU 发出可屏蔽中断请求。
IBMPC、PC/XT 机内有一片 8259 中断控制器对外可以提供 8 个中断源:中断源中断类型号中断功能IRQ0 08H 时钟IRQ1 09H 键盘IRQ2 0AH 保留IRQ3 OBH 串行口2IRQ4 0CH 串行口1IRQ5 0DH 硬盘IRQ6 0EH 软盘IRQ7 0FH 并行打印机8 个中断源的中断请求信号线 IRQ0~IRQ7 在主机的 62 线 ISA 总线插座中可以引出,系统已设定中断请求信号为“边沿触发”,普通结束方式。
《微机实验及课程设计》实验报告实验一汇编语言与程序调试基础姓名:学号:专业:仪器科学与工程学院实验室:计算机硬件技术实验时间: 2014年04月17日报告时间: 2014年04月23日评定成绩:审阅教师:一、实验目的1、了解命令行操作基本方式和基本命令,掌握PC环境下命令行方式的特点2、掌握汇编语言程序指令编辑、宏汇编、连接和运行的基本概念3、熟练掌握动态调试程序TD的常用命令和窗口功能,学会用TD调试程序,修改环境4、学会利用DEBUG或TD检查认识指令功能的正确方法二、实验内容1、必做内容(1)要求计算两个多字节十六进制数之差:3B74AC60F8-20D59E36C1=?式中被减数和减数为5个字节,存放在DATA1和DATA2的内存区,低位在前,高位在后。
试编写减法的程序段,要求相减的结果存放在首址为DATA3的内存区。
(2)以BUFFER为首地址的内存区存放了10个十六位带符号数,编写程序比较它们的大小,找出其中最小的带符号数,存入MIN和MIN+1单元。
2、选做内容(1)两个字符串的长度均为10,首地址分别为STRING1和STRING2,比较两个字符串是否完全相同,如果相同,将BL寄存器置为00H;如果不完全相同,将BL寄存器置为FFH,并将第一个字符串中的第一个不相同字符的地址放在SI寄存器中。
三、实验原理1、实验基本步骤(1)用任意一种文本编辑器(EDIT、NOTEPAD、UltraEDIT等)建立编辑汇编源程序,并将其保存为文件名.asm文件,将其放入带汇编工具的文件夹中(d:\tasm)。
注:文件名不要起的过长,在连接时可能会出现can’t find file的问题。
(2)开始菜单,点运行条目,打入cmd命令进入DOS调试环境。
(3)进入该文件夹(cd d:\tasm) ,键入如下命令开始编辑程序:d:\zxj>edit 文件名.asm(4)将程序保存后返回DOS进行汇编,键入如下命令:d:\zxj>tasm 文件名.asm如果汇编通过,进行下一步,如果出现error,返回3步骤,根据错误的行数进行修改,然后重新汇编,直到不产生error为止。
东南大学电子科学与工程学院实验报告课程名称:微机原理与接口技术实验名称:交通灯控制实验姓名:学号:实验室:516室实验组别:同组人员:实验时间:2016 年5 月23 日评定成绩:审阅教师:实验报告要求实验准备1.实验目的和要求(或主要性能指标)2.实验原理及实现方案3.实验方案设计与参数选择4.需测量参数及数据测量方法5.理论计算数据或软件模拟数据6.实验数据记录格式7.实验使用仪器设备(包括仪器设备名称、型号、规格、编号、使用状况)8.实验过程或实验步骤实验过程1.实验步骤和实验数据记录2.实验最终方案和方案参数3.实验中出现的问题及解决方法实验总结1.实验数据处理2.实验误差分析3.实验结果讨论4.实验心得注:页面不够可以加页一、实验目的通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用。
二、实验内容如图2-29,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。
编程使六个灯按交通灯变化规律亮灭。
十字路口交通灯的变化规律要求:(1)南北路口的绿灯、东西路口的红灯同时亮。
(2)南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮(3)南北路口的红灯、东西路口的绿灯同时亮(4)南北路口的红灯继续亮,同时东西路口的黄灯闪烁若干次。
2东南大学电子科学与工程学院实验报告用纸东南大学电子科学与工程学院实验报告用纸3三、硬件连接图四、编程参考流程图五、基础部分代码;***********************************;;* 十字路口红绿灯模拟演示程序*;;* 端口各灯的设置: *;;* 1红1黄1绿0 0 2红2黄2绿*;;***********************************;data segmentioport equ 0ec00h-0280hio8255a equ ioport+28ahio8255b equ ioport+28bhportc1 db 24h,44h,04h,44h,04h,44h,04h ;六个灯可能db 81h,82h,80h,82h,80h,82h,80h ;的状态数据db 0ffh ;结束标志data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,io8255bmov al,90hout dx,al ;设置8255为C口输出mov dx,io8255are_on: mov bx,0on: mov al,portc1[bx]cmp al,0ffhjz re_onout dx,al ;点亮相应的灯inc bx4东南大学电子科学与工程学院实验报告用纸mov cx,2000 ;参数赋初值test al,21h ;是否有绿灯亮jz de1 ;没有,短延时mov cx,0FFFFH ;有,长延时de1: mov di,0FFFFHde0: dec dijnz de0loop de1push dxmov ah,06hmov dl,0ffhint 21hpop dxjz on ;没有,转到onexit: mov ah,4ch ;返回int 21hcode endsend start代码分析:主要分析灯的延迟时间这部分。
东南大学微机实验报告10页10页
1. 简介:介绍实验目的、实验背景、研究问题和实验方法等。
2. 材料和方法:介绍实验材料和方法,例如使用的硬件、软件和技术等。
3. 结果:给出实验结果,例如测试数据和图表等。
4. 讨论:对结果进行讨论,对实验中遇到的问题进行解释和分析,并提出结论和建议。
5. 结论:总结实验过程、重要结果和研究结论,以及对未来工作的展望。
以下是一份典型的东南大学微机实验报告的框架,可以参考使用。
实验题目:xxx
实验时间:xxxx.xx.xx
实验地点:东南大学计算机实验室
学生姓名:xxx
实验报告结构
1. 简介
1.1 实验目的
1.3 研究问题
2. 材料和方法
2.1 硬件
2.3 技术
3. 结果
3.1 测试数据
4. 讨论
4.2 问题解释
4.3 建议
5. 结论
5.3 未来展望
参考文献: 1. xxxx。
实验十一、实验目的1.了解Intel 8086CPU的中断处理功能以及IBM-PC的中断结构。
2.了解8259中断控制器的使用。
3.掌握键盘中断的编程,观察中断的执行情况。
二、实验任务要求每按下一个键就向CPU发出中断请求信号,该信号由8259的IRQ1引入,中断类型号为09,CPU响应中断后转入执行KEYINT中断服务程序,并且在CRT上显示某字或某个图形,按下10次后返回DOS。
三、源程序STACK SEGMENT STACKDW 200H DUP(?)STACK ENDSDATA SEGMENTKEY DB ?BUF DB "OK!"DATA ENDSCODE SEGMENTASSUME CS:CODE, SS:STACK, DS:DATADELAY PROCPUSH CXPUSH DXMOV DX,0A64DHCON2: MOV CX,0FFFFHCON: DEC CXJNE CONDEC DXJNE CON2POP DXPOP CXRETDELAY ENDPDISP1 PROC FARPUSH AXPUSH BXPUSH CXPUSH DXMOV AH, 15 ;读当前显示状态INT 10HMOV AH, 0 ;设置显示方式INT 10HMOV CX, 1 ;要显示字符个数MOV DX, 0 ;行号为0,列号为0REPT: MOV AH, 2 ;设置光标位INT 10HMOV AL, 0FH ;读出太阳图形MOV AH, 10 ;写字符INT 10HCALL DELAYSUB AL, ALMOV AH, 10 ;清除原图形INT 10HINC DHADD DL, 2CMP KEY, 10JAE GO1CMP DH, 25JNE REPTGO1: POP DXPOP CXPOP BXPOP AXRETDISP1 ENDPDISP2 PROC FARPUSH CXPUSH BXPUSH AXMOV CX, 3NEXTC: LODSB ;AL<-[SI]MOV AH, 0EH ;写字符,并移动光标MOV BX, 01INT 10HCALL DELAYLOOP NEXTCCMP KEY, 10JAE GO2POP AXPOP BXPOP CXRETDISP2 ENDPKEYINT PROC FARPUSH AXPUSH SISTIIN AL, 60HIN AL, 61HOR AL, 80HOUT 61H, ALAND AL, 7FHOUT 61H,ALTEST AH, 80HJNE GOSTIINC KEYMOV SI, OFFSET BUFCALL DISP2GO: MOV AL, 20HOUT 20H, ALPOP SIPOP AXIRETKEYINT ENDP START: MOV AX, STACK MOV SS, AXMOV AX, DATAMOV DS, AXMOV ES, AXMOV AX, ES:[24H]PUSH AXMOV AX, ES:[26H]PUSH AXCLIMOV AX, OFFSET KEYINTMOV ES:[24H],AXMOV AX, SEG KEYINTMOV ES:[26H], AXSTIMOV KEY, 0AGAIN: CALL DISP1CMP KEY, 10JB AGAINCLIGO2: POP AXMOV ES:[26H],AXPOP AXMOV ES:[24H],AXSTIMOV AH, 4CHINT 21HCODE ENDSEND START四、实验中遇到的问题在实验编写过程中,遇到按住键,会一直显示OK,出现10次OK后也不会跳出程序。
微机实验报告
实验一指令与汇编语言基础
姓名:学号:
专业:测控技术与仪器实验室:
时间:2013年04月23号报告时间:2013年04 月23号评定成绩:审阅教师:
一、实验目的
1)了解命令行操作基本方式和基本命令,掌握PC环境下命令行方式的特点;
2)掌握汇编语言程序指令编辑、宏汇编、连接、运行基本概念;3)熟练掌握动态调试程序TD的常用命令和窗口功能,学会用TD调试程序,修改环境;
4)学会利用DEBUG或TD检查认识指令功能的正确方法。
二、实验内容
(一)必做实验
1-1、要求计算两个多字节十六进制数之差:
3B74AC60F8-20D59E36C1=?
式中被减数和减数为5个字节,存放在DATA1和DATA2的内存区,低位在前,高位在后。
试编写减法的程序段,要求相减的结果存放在首址为DATA3的内存区。
1-2、以BUFFER为首地址的内存区存放了10个十六位带符号数,编写程序比较它们的大小,找出其中最小的带符号数,存入MIN和MIN+1单元。
三实验源程序和流程图
1、十六进制相减
A、实验要求:
计算两个多字节十六进制数之差:
3B74AC60F8-20D59E36C1=?
式中被减数和减数为5个字节,存放在DATA1和DATA2的内存区,低位在前,高位在后。
试编写减法的程序段,要求相减的结果存放在首址为DATA3的内存区。
B、实验源代码和流程图
DATA SEGMENT
DATA1 DB 0F8H,60H,0ACH,74H,3BH
DATA2 DB 0C1H,36H,9EH,0D5H,20H
DATA3 DB 5 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV CX,5
MOV DI,0
CLD
LOOPER: MOV AL,DATA1[DI]
SBB AL,DATA2[DI]
MOV DATA3[DI],AL
INC DI
DEC CX
JNZ LOOPER
MOV AH,4CH
INT 21H
CODE ENDS
END START
C、实验过程及实验结果
结果
结果分析:理论计算为1A9F0E2A37H与实验结果相似。
2、找出最小的带符号数
A、实验要求:
以BUFFER为首地址的内存区存放了10个十六位带符号数,编写程序比较它们的大小,找出其中最小的带符号数,存入MIN和MIN+1单元。
B、实验源程序和流程图:
DATA SEGMENT
BUFFER DW 0000H,0123H,0235H,5644H,0FFFH,0FFFFH,0ADCDH,5967H,6FABH,0AB54H
MIN DW ?
DATA ENDS
CODE S EGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START: MOV AX,DATA
MOV DS,AX
XOR AX,AX ;将AX清零
MOV CX,9
LEA SI,BUFFER
CLD
LODSW ;取16位带符号数到AX
MOV MIN,AX
CHECK: LODSW ;取下一个数到AX
CMP AX,MIN
JL LOWER
JMP DONE
LOWER: MOV MIN,AX
JMP DONE ;否则转DONE
DONE: LOOP CHECK
MOV AH,4CH
INT 21H
CODE E NDS
END START
C、实验过程及实验结果
实验结果分析:理论计算可知最小带符号数是AB54H与实验结果相同。
三、选做实验
A、实验源程序和流程图
DATA SEGMENT
STRING1 DB 'HELLOGUYS'
STRING2 DB 'HELLOGUYS!'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA SI,STRING1
LEA DI,STRING2
MOV CX,11
CLD
REPE CMPSB
JCXZ ALLMATCH
MOV BL,0FFH
ALLMATCH:MOV BL,00H
JMP DONE
DONE: DEC SI
MOV AH,4CH
INT 21H
CODE ENDS
END START
B、实验过程及实验结果
四、实验中遇到的问题和思考
1、由于刚开始接触微机实验不太会编译、调试、以及连接程序。
2、不会看程序最后运行出来的结果。
3、选作实验编译的时候有一个warning,但是可以运行,不知道是什
么原因。