微机原理课设2016loop
微机原理课程设计
前言
加热器数字控制系统的设计与功能的实现要求学生在学习完微机原理及应用这门课的基础上,在对芯片类知识以及汇编语言有一定基础的前提下进行的一个非常体现学生综合能力的一个设计。要想很好的完成这个题目,必须对芯片的功能有很详细的了解,同时也要求学生的汇编语言基础要扎实。计算机技术的飞速发展,使的计算机知识和应用技能已成为人类知识经济的重要组成部分。《微型计算机原理》正是掌握计算机结构和工作原理的入门课程,它偏重于实际应用的课程,要求学生在学好理论知识的基础上,培养定的实践动手操作能力,学生将所学的理论知识和实践有机结合,初步掌握计算机应用系统设计的步骤和接口设计的方法,提高分析和解决实际问题的能力。微机原理课程设计是对《微型计算机原理》课程理论教学和实验教学的综合和总结。
[2]、徐建民·《汇编语言程序设计》[M]·北京:电子工业出版社
[3]、洪永强.微机原理与接口技术.北京:科学出版社. 2004年
课程设计图纸
程序清单
DATA SEGMENT
INTR_IVADDEQU01C8H;INTR对应的中断矢量地址(对应着中断程序入口地址)
INTR_OCW1EQU0A1H;INTR对应PC机内部8259的OCW1地址
MOV AX,SEG MYISR
MOV ES:[DI],AX;ห้องสมุดไป่ตู้置当前中断处理程序入口段地址
MOV DX,INTR_OCW1 ;设置中断屏蔽寄存器,打开INTR的屏蔽位
INAL,DX
MOV IM_BAK,AL;保存INTR原中断屏蔽字
AND AL,INTR_IM
OUTDX,AL
MOV DX,MY8259_ICW1 ;初始化实验系统中8259的ICW1
MOV DI,INTR_IVADD
微机原理课程设计说明书(加热器)
1.课程设计任务书设计内容:设计当把物品放入加热器中,首先要启动加热器和电机工作,设定加热时间为3(5)分钟,为使物品均匀加热,每隔20(30)秒电机要反转一次,(正转→反转、反转→正转),加热时间到后,停止加热器和电机工作,并发声,告知加热结束。
设计目标:在规定的时间内设计出符合要求的汇编语言程序,并提交一份符合本科生毕业设计论文规范的报告。
进度安排:8月13日-8月16日-----------------------确定设计内容并完成硬件部分8月17日-8月21日------------------------------------完成程序清单8月22日-8月23日------------------------------完成课程设计说明书2. 总体设计思路2.1、分析设计所用到的芯片的原理及使用方法:⑴8259A的使用方法:8259A有四个初始化命令字ICW及3个操作操作命令字OCW。
8259A的编程就是根据应用需要将初始化命令字ICW1-ICW4和操作命令字OCW1- OCW3分别写入初始化命令寄存器组和操作命令寄存器组。
ICW1-ICW4各命令字格式如图2-1所示,OCW1-OCW3各命令字格式如图2-2所示,其中OCW1用于设置中断屏蔽操作字,OCW2用于设置优先级循环方式和中断结束方式的8操作命令字,OCW3用于设置和撤销特殊屏蔽方式、设置中断查询方式以及设置对8259内部寄存器的读出命令。
图2-1ICW1-ICW4各命令字格式如图2-2OCW1-OCW3各命令字格式如图⑵8255的使用方法:方式0 —基本输入/出方式;方式1 —选通输入/出方式;方式2 —双向选通工作方式。
图2-3 8255命令字格式图⑶8253的使用方法:(1) 方式0:计数到0结束输出正跃变信号方式。
(2) 方式1:硬件可重触发单稳方式。
(3) 方式2:频率发生器方式。
(4) 方式3:方波发生器。
(5) 方式4:软件触发选通方式。
微机原理课程设计
《微机原理与接口技术》课程设计任务书一、设计任务题目1:用十六位乘法指令完成三十二位无符号数乘法要求:以十六进制格式输入乘数和被乘数,以十六进制格式显示结果题目2:递归调用子程序要求:N个人,输入人数N和第一个人的年龄,输出结果,十六进制可以,十进制更好,呼出递归调用子程序的框图。
二、查阅文献三、方案设计1.四、要求题目1:用十六位乘法指令完成三十二位无符号数乘法原理分析:首先在数据段中定义三个数据变量用于存放三个提示信息,然后在其中定义一个变量存放键盘缓冲区,然后定义x1,x2,y1,y2分别用来存放16位数,定义p存放输出结果,程序通过调用iinput子程序来处理每次输入数据的高16位和低16位,然后进行运算,将运算结果保存在p中,通过调用dispal子程序实现结果的输出。
源程序:ddata segment ;数据段info1 db 0dh,0ah,'Please input the number1 :','$'info2 db 0dh,0ah,'Please input the number2 :','$'info3 db 0dh,0ah,'The result is :','$'keybuf db 11 dup(?)x1 d w 4 dup(0)x2 d w 4 dup(0)y1 d w 4 dup(0)y2 d w 4 dup(0)p dw 4 dup(0)ddata endssstack segment stack 'stack' ;堆栈段dw 100h dup(?)sstack endsccode segment ;代码段assume cs:ccode,ds:ddata,ss:sstackmain proc farstart: push ds ;为结束做准备xor ax,ax ;push ax ;mov ax,ddatamov ds,axmov dx,offset info1mov ah,09int 21hcall iinput ;调用处理输入子程序mov ax,y2mov x2,axmov ax,y1mov x1,axmov dx,offset info2mov ah,09int 21hcall Iinputmov dx,offset info3mov ah,09int 21hcall mult ;调用乘法子程序mov al,byte ptr p+7call dispal ;用输出子程序mov al,byte ptr p+6call dispalmov al,byte ptr p+5call dispalmov al,byte ptr p+4call dispalmov al,byte ptr p+3call dispalmov al,byte ptr p+2call dispalmov al,byte ptr p+1call dispalmov al,byte ptr pcall dispalretmain endpdispal proc ;输出处理子程序push cxpush dxpush axmov cl,4shr al,clor al,30hcmp al,3ahjb br1add al,7br1: mov dl,almov ah,2int 21hpop axand al,0fhor al,30hcmp al,3ahjb br2add al,7br2: mov dl,almov ah,2int 21hpop dxpop cxretdispal endpiinput proc ;输入处理子程序push axpush cxpush dxpush bxmov dx,offset keybuf ;定义键盘缓冲区mov bx,dxmov [bx],byte ptr 09 ;定义键盘缓冲区长度为8mov ah,0ahint 21hmov cl,4 ;定义cl为4,做四次循环mov ch,0trfom1: add bx,2mov al,[bx+1]mov ah,[bx]call trfom ;调用转换ASC码子程序mov dl,dhmov al,ahcall trfompush cxmov cl,4 ;移位处理shr dh,clshr dx,clpop cxpush dxloop trfom1pop dxmov al,dlpop dxmov ah,dlmov y2,axpop dxmov al,dlpop dxmov ah,dlmov y1,axpop axpop cxpop dxpop bxretiinput endptrfom proc ;ASC码转换子程序push axpush cxmov cl,4cmp al,30hjl ercmp al,3ahjnl d1sub al,30h ;对数字的处理jmp okd1: cmp al,47hjnl d2sub al,37h ;对大写字母的处理jmp okd2: cmp al,61hjl ercmp al,67hjnl ersub al,57h ;对小写字母的处理jmp oker: mov al,0ok: shl al,clmov dh,alpop cxpop axrettrfom endpmult procpush axpush bxpush cxpush dxpush dimov ax,x2 ;乘数低位乘以被乘数低位mul y2mov p,axmov p+2,dxmov ax,x1mul y2 ;乘数低位乘以被乘数高位add p+2,axmov p+4,dxmov ax,x2mul y1 ;乘数高位乘以被乘数低位add p+2,axadc p+4,dxadc word ptr[di],0mov ax,x1mul y1 ;乘数高位乘以被乘数高位add p+4,axadc p+6,dxpop dipop dxpop cxpop bxpop axretmult endpccode endsend start题目2:通过递归调用求年龄原理分析:在数据段中定义三个用于保存提示信息的变量,定义键盘缓冲区,定义x1,x2变量保存输入的人数和输入的年龄,定义p变量保存输出结果。
微机原理课后习题答案
第二章1.8086CPU由哪两部分组成?它们的主要功能是什么?8086CPU由总线接口部件BIU和指令执行部件EU组成,BIU和EU的操作是并行的。
总线接口部件BIU的功能:地址形成、取指令、指令排队、读/写操作数和总线控制。
所有与外部的操作由其完成。
指令执行部件EU的功能:指令译码,执行指令。
2.8086CPU中有哪些寄存器?各有什么用途?8086CPU的寄存器有通用寄存器组、指针和变址寄存器、段寄存器、指令指针寄存器及标志位寄存器PSW。
4个16位通用寄存器,它们分别是AX,BX,CX,DX,用以存放16位数据或地址。
也可分为8个8位寄存器来使用,低8位是AL、BL、CL、DL,高8位是AH、BH、CH、DH,只能存放8位数据,不能存放地址。
指针和变址寄存器存放的内容是某一段内地址偏移量,用来形成操作数地址,主要在堆栈操作和变址运算中使用。
段寄存器给出相应逻辑段的首地址,称为“段基址”。
段基址与段内偏移地址结合形成20位物理地址。
指令指针寄存器用来存放将要执行的下一条指令在现行代码中的偏移地址。
16位标志寄存器PSW用来存放运算结果的特征,常用作后续条件转移指令的转移控制条件。
5.要完成下述运算或控制,用什么标志位判断?其值是什么?⑴比较两数是否相等?将两数相减,当全零标志位ZF=1时,说明两数相等,当ZF=0时,两数不等。
⑵两数运算后结果是正数还是负数?用符号标志位SF来判断,SF=1,为负数;SF=0,为正数。
⑶两数相加后是否溢出?用溢出标志位来判断,OF=1,产生溢出;OF=0,没有溢出。
⑷采用偶校验方式。
判定是否要补“1”?用奇偶校验标志位判断,有偶数个“1”时,PF=1,不需要补“1”;有奇数个“1”时,PF=0,需要补“1”。
(5)两数相减后比较大小?●ZF=1时,说明两数是相等的;●ZF=0时:无符号数时,CF=0,被减数大;CF=1,被减数小。
带符号数时,SF=OF=0或SF=OF=1,被减数大;SF=1,OF=0或SF=0,OF1,被减数小。
1632位微机原理汇编语言及接口技术课后习题答案
第一章1.1 解:五代,详细见书1.2 解:微型计算机:以大规模、超大规模集成电路为主要部件,以集成了计算机主要部件——控制器和运算器的微处理器为核心,所构造出的计算机系统。
PC机:PC(Personal Computer)机就是面向个人单独使用的一类微机。
单片机:用于控制的微处理器芯片,内部除CPU外还集成了计算机的其他一些主要部件,如:ROM、RAM、定时器、并行接口、串行接口,有的芯片还集成了A/D、D/A转换电路等。
数字信号处理器DSP:主要面向大流量数字信号的实时处理,在宿主系统中充当数据处理中心,在网络通信、多媒体应用等领域正得到越来越多的应用1.3 解:微机主要有存储器、I/O设备和I/O接口、CPU、系统总线、操作系统和应用软件组成,各部分功能如下:CPU:统一协调和控制系统中的各个部件系统总线:传送信息存储器:存放程序和数据I/O设备:实现微机的输入输出功能I/O接口:I/O设备与CPU的桥梁操作系统:管理系统所有的软硬件资源1.4 解:系统总线:传递信息的一组公用导线,CPU通过它们与存储器和I/O设备进行信息交换。
好处:组态灵活、扩展方便三组信号线:数据总线、地址总线和控制总线。
其使用特点是:在某一时刻,只能由一个总线主控设备来控制系统总线,只能有一个发送者向总线发送信号;但可以有多个设备从总线上同时获得信号。
1.5解:(1)用于数值计算、数据处理及信息管理方向。
采用通用微机,要求有较快的工作速度、较高的运算精度、较大的内存容量和较完备的输入输出设备,为用户提供方便友好的操作界面和简便快捷的维护、扩充手段。
(2)用于过程控制及嵌人应用方向。
采用控制类微机,要求能抵抗各种干扰、适应现场的恶劣环境、确保长时间稳定地工作,要求其实时性要好、强调其体积要小、便携式应用强调其省电。
1.6 解:1.7 解:I/O通道:位于CPU和设备控制器之间,其目的是承担一些原来由CPU处理的I/O任务,从而把CPU从繁杂的I/O任务中解脱出来。
微机原理loop
微机原理loop 1. 微机原理概述• 1.1 微机的定义• 1.2 微机的发展历程• 1.3 微机的组成与工作原理• 1.4 微机的分类2. 微机的运行过程• 2.1 微机的启动过程• 2.2 微机的工作原理• 2.3 微机的指令执行流程3. 微机原理中的Loop• 3.1 循环的概念• 3.2 循环结构在编程中的应用• 3.3 微机原理中Loop的实现方法4. 微机原理中的Loop优化• 4.1 Loop的性能影响因素• 4.2 Loop的优化技巧• 4.3 微机原理中Loop优化的实践案例5. 微机原理中Loop案例分析• 5.1 微机原理中Loop在汇编语言中的应用• 5.2 微机原理中Loop在高级语言中的应用• 5.3 微机原理中Loop在嵌入式系统中的应用6. 微机原理中Loop的问题与挑战• 6.1 微机原理中Loop可能遇到的问题• 6.2 微机原理中Loop的挑战与解决方法• 6.3 微机原理中Loop的发展趋势7. 总结•7.1 微机原理中Loop的重要性与应用价值•7.2 微机原理中Loop的发展前景•7.3 结束语1. 微机原理概述1.1 微机的定义微机是指由微处理器、存储器、输入输出设备等组成的个人电脑系统。
它具有体积小、功能强大、适用广泛等特点,成为现代信息社会中不可或缺的一部分。
1.2 微机的发展历程微机的发展可以追溯到20世纪70年代,随着微处理器技术的发展,原先庞大昂贵的计算机系统逐渐被集成在一个芯片上,从而形成了微机。
1.3 微机的组成与工作原理微机主要由主机和外设组成。
主机包括中央处理器(CPU)、存储器(内存)、输入输出接口(I/O)、总线等部分。
微机的工作原理是通过CPU执行指令,完成对存储器中数据的读写操作,并通过输入输出接口与外设进行数据的输入输出。
1.4 微机的分类根据体积和用途的不同,微机可以分为台式机、笔记本电脑、平板电脑等多种类型。
它们在形态和性能上有所差异,但都属于微机范畴。
中国石油大学2016年微机原理实验程序(最新)终稿
实验一寻址方式和汇编语言程序上机调试步骤2、在数据段X单元存放有数据42,Y单元存放有数据-43,编程求这两数之和,并把结果存放到S单元。
data segmentx db 42y db -43s db 0data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov al,xadd al,ymov s,alloop: jmp loopcode endsend start3、已知数据段X单元存放的数据为10H,编程将该数据左移四位后存放到Y单元。
data segmentx db 10hy db 0hdata endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov cl,4hmov al,xrol ax,clmov y,alloop: jmp loopcode endsend start实验二循环程序设计1、编程将数据段从00H单元起始的十个单元赋值,值为00H~09H。
DATA SEGMENT DAT DB 10 DUP(?)DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV CX,10MOV BX,0LOOPER: MOV DAT[BX],BLINC BXLOOP LOOPERLOOP:JMP LOOPCODE ENDSEND START2、现有两组数,X= -78, 127,-128, -125,88,Y=32, -43, 76, 95, 1。
编程求两个数组之和,并将结果传送到S数组内,S (i)= X(i)+ Y(i)。
DATA SEGMENTORG 0000HX DB -78,127,-128,-125,88Y DB 32,-43,76,95,1S DB 5 DUP(?)DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV CX,5MOV BX,0LOOPER :MOV AL,X[BX]MOV DL,Y[BX]ADD AL,DLMOV S[BX],ALINC BXLOOP LOOPERLOOP: JMP LOOPCODE ENDSEND START3、现有两个多位十进制数,X=5790123467,Y=1357902468。
微机原理(用汇编语言实现电话本功能)课程设计
课程设计报告学号:*************名:***学院:信息科学与工程学院专业:电子信息工程班级:0605班指导教师:***一、课程设计目的运用所学的汇编语言写一个具有电话本功能的程序,达到提高动手能力及解决问题的能力。
二、设计要求1、能够存储50个电话号码,包括人名(20个字符)、电话号码(8个字符)。
2、系统可以随时接受新的人名和电话号码。
3、具有随时查询号码的功能。
要求输入人名后,在屏幕上显示相应的电话号码。
4、具有删除号码的功能。
要求输入人名后,系统自动删除相应的号码。
5、运行此系统后,要显示菜单选择的功能。
三、程序设计思想每个人的信息包括人名和号码,人名占20个字节,外加一个$字符,电话号码占8个字节,外加一个$字符,所以每个人的信息一共占30个字节。
可以开辟一片连续的存储区,包含30*50即1500个字节,即ZHU DB 1500 DUP(0)。
另外再定义四个需要输入信息的变量,依次为:ZHU1 DB 21,0,21 DUP(0) ;搜索姓名变量ZHU2 DB 21,0,21 DUP(0) ;添加姓名变量ZHU3 DB 9,0,9 DUP(0) ;添加号码变量ZHU4 DB 21,0,21 DUP(0) ;删除姓名变量添加新的人名和号码时,可以通过10号功能调用,先将人名和号码暂时存放在ZHU2和ZHU3中,然后在逐字节地复制到ZHU 中,记住在人名和号码末尾加上$字符。
查询号码时,将输入的要查询的人名存放在ZHU1中,然后再每隔30个字节与ZHU中的人名逐个字符地比较,若完全相等,则将人名下面的号码输出,否则说明要查询的人名不存在。
删除时,先输入要删除的人名,同查询相似,按同样的方法在ZHU中寻找相应的数据区,若找到了,则从找到时下面一个人的信息开始,统一向上移动30个字节,若没有找到,则说明要删除的人名的信息不存在。
四、程序框图五、程序清单DATAS SEGMENTOBF1 DB'Welcome to use this phone book!$'OBF2 DB'Please choose the function buttom(1/2/3):$'OBF11 DB'1 for inputing$'OBF16 DB'2 for searching$'OBF17 DB'3 for deleting$'OBF18 DB'Other for exiting$'OBF3 DB'Please input a new name(within 20 words):$'OBF4 DB'please input the number(within 8 numbers):$'OBF5 DB'Continue to input?(y/n)$'OBF6 DB'Are you sure to end the phone book?(y/n)$'OBF7 DB'Please input a name you want to search(within 20 words):$' OBF8 DB'Got it,it is:$'OBF9 DB'Have not found ,it does not exit!$'OBF10 DB'Continue to search?(y/n)$'OBF12 DB'Please input the name you want to delete(within 20 words):$' OBF13 DB'The name you want to delete does not exit!$'OBF14 DB'Success to delete!$'OBF15 DB'Continue to delete?(y/n)$'ZHU1 DB 21,0,21 DUP(0) ;搜索(查询)姓名变量ZHU2 DB 21,0,21 DUP(0) ;添加姓名变量ZHU3 DB 9,0,9 DUP(0) ;添加号码变量ZHU4 DB 21,0,21 DUP(0) ;删除姓名变量ZHU DB 1500 DUP(0)DATAS ENDSSTACKS SEGMENTDW 32 DUP(0)STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV BP,-30BEGIN:CALL NEXTLINEMOV DX,OFFSET OBF1 ;显示菜单选择界面MOV AH,9INT 21HCALL NEXTLINE ;调用换行函数MOV DX,OFFSET OBF2MOV AH,9INT 21HCALL NEXTLINEMOV DX,OFFSET OBF11MOV AH,9INT 21HCALL NEXTLINEMOV DX,OFFSET OBF16MOV AH,9INT 21HCALL NEXTLINEMOV DX,OFFSET OBF17MOV AH,9INT 21HCALL NEXTLINEMOV DX,OFFSET OBF18MOV AH,9INT 21HCALL NEXTLINEMOV AL,0MOV AH,1INT 21HCMP AL,'1' ;选择1,输入信息JE INPUTCMP AL,'2' ;选择2,查询信息JE SEARCHCMP AL,'3' ;选择3,删除信息JE DELETEJMP STOPINPUT: CALL NEXTLINEADD BP,30MOV SI,BPS2:MOV BYTE PTR ZHU[SI],0 ;清除ZHU中最后一个人的信息后面的30 INC SI ; 个字节中非0的单元CMP [SI],0JNE S2MOV SI,BPMOV DX,OFFSET OBF3MOV AH,9INT 21HMOV DX,OFFSET ZHU2 ;输入的人名存放在ZH2中MOV AH,10INT 21HMOV BX,-1S5:INC BX ;为避免ZHU2中刚输入的信息没有完全覆CMP BYTE PTR ZHU2[BX+2],0DH ;盖上一次的信息,将出车符(0DH)及其后JNE S5 ;面的字节归0S6:MOV BYTE PTR ZHU2[BX+2],0INC BXCMP BX,20JNE S6MOV BYTE PTR ZHU2[BX+2],0DHMOV CX,20MOV BX,-1S1:INC BX ;将ZH2复制到ZHU中MOV DL,BYTE PTR ZHU2[BX+2]MOV BYTE PTR ZHU[SI+BX],DLLOOP S1MOV BYTE PTR ZHU[SI+20],'$'CALL NEXTLINEMOV DX,OFFSET OBF4MOV AH,9INT 21HMOV DX,OFFSET ZHU3MOV AH,10INT 21HMOV BX,-1S7:INC BX ;为避免刚输入的号码没有完全覆盖上一次的号码,将这次输CMP BYTE PTR ZHU3[BX+2],0DH ; 入的号码的最后一位的回车符(0DH)换成$ JNE S7MOV BYTE PTR ZHU3[BX+2],'$'ADD SI,21MOV CX,8MOV BX,-1S3:INC BXMOV DL,BYTE PTR ZHU3[BX+2]MOV BYTE PTR ZHU[SI+BX],DLLOOP S3MOV BYTE PTR ZHU[SI+8],'$'CALL NEXTLINEMOV DX,OFFSET OBF5MOV AH,9INT 21HCALL NEXTLINEMOV AH,1INT 21HCMP AL,'Y'JE INPUTCMP AL,'y'JE INPUTJMP BEGINSTOP: CALL NEXTLINEMOV DX,OFFSET OBF6MOV AH,9INT 21HMOV AL,0MOV AH,1INT 21HCMP AL,'Y'JE EXITCMP AL,'y'JNE BEGINEXIT:MOV AX,4C00H ;退出电话本程序INT 21HSEARCH:CALL NEXTLINEMOV DX,OFFSET OBF7 ;输入你要搜索的名字,存放在ZHU1中MOV AH,9INT 21HMOV DX,OFFSET ZHU1MOV AH,10INT 21HMOV BX,-1L5:INC BX ;为避免ZHU1刚输入的信息没有完全覆盖上一次的信息,CMP BYTE PTR ZHU1[BX+2],0DH ;将回车符(0DH)及其后面的字节归0 JNE L5L6:MOV BYTE PTR ZHU1[BX+2],0INC BXCMP BX,20JNE L6MOV BYTE PTR ZHU1[BX+2],0DHCALL NEXTLINEMOV CX,50 ;在ZHU中搜索与ZHU1相等的字符串MOV SI,-30L1:ADD SI,30MOV BX,-1L2:INC BXCMP BX,20JE L3PUSH AXMOV AL,BYTE PTR ZHU[SI+BX]MOV AH,BYTE PTR ZHU1[BX+2]CMP AL,AHPOP AXJE L2LOOP L1MOV DX,OFFSET OBF9 ;没有搜索到MOV AH,9INT 21HJMP L4L3:MOV DX,OFFSET OBF8 ;搜索到了MOV AH,9INT 21HINC BXADD BX,OFFSET ZHUADD BX,SIMOV DX,BXMOV AH,9INT 21HL4:CALL NEXTLINEMOV DX,OFFSET OBF10 ;继续搜索吗?MOV AH,9INT 21HMOV AL,0MOV AH,1INT 21HCMP AL,'Y'JE SEARCHCMP AL,'y'JE SEARCHJMP BEGINDELETE:CALL NEXTLINEMOV DX,OFFSET OBF12 ;输入你要删除的名字,存放在ZHU4中MOV AH,9INT 21HMOV DX,OFFSET ZHU4MOV AH,10INT 21HMOV BX,-1D6:INC BX ;为避免ZHU4刚输入的信息没有完全覆盖上一次的信息,CMP BYTE PTR ZHU4[BX+2],0DH ;将回车符(0DH)及其后面的字节归0 JNE D6D7:MOV BYTE PTR ZHU4[BX+2],0INC BXJNE D7MOV BYTE PTR ZHU4[BX+2],0DHCALL NEXTLINEMOV CX,50MOV SI,-30D1:ADD SI,30MOV BX,-1D2:INC BXCMP BX,20JE D3PUSH AXMOV AL,BYTE PTR ZHU[SI+BX]MOV AH,BYTE PTR ZHU4[BX+2]CMP AL,AHPOP AXJE D2LOOP D1MOV DX,OFFSET OBF13 ;你要删除的姓名不存在MOV AH,9INT 21HJMP D5D3:PUSH AXD4:MOV AL,BYTE PTR ZHU[SI+30]MOV BYTE PTR ZHU[SI],ALINC SICMP [SI],0JNE D4POP AXSUB BP,30MOV DX,OFFSET OBF14 ;删除成功!MOV AH,9INT 21HD5:CALL NEXTLINEMOV DX,OFFSET OBF15 ;要继续删除吗?MOV AH,9INT 21HMOV AL,0MOV AH,1INT 21HCMP AL,'Y'JE DELETECMP AL,'y'JE DELETENEXTLINE PROC ;换行函数MOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HRETNEXTLINE ENDPCODES ENDSEND START六、程序测试结果调试以上程序,生成.exe文件后,运行该.exe文件,得到如下结果:图(1)先选择1号功能,即输入信息,得到:图(2)选择n,即返回菜单选择界面,并选择2号功能,即查询信息,得到:图(3)选择n,返回显示菜单选择界面,选择3号功能,即删除信息,得到:图(4)选择n,又回到菜单显示界面,重新查询信息,可以得到:图(5)选择n,返回菜单显示界面,按任意键,得到:图(6)选择n,结束电话本系统。
微机原理课程设计 太阳能热水器控制 8086
J I A N G S U U N I V E R S I T Y微机系统与接口技术课程设计说明书题目:太阳能热水器的数显控制学院名称:机械工程学院专业班级:测控1401姓名学号:指导教师:2016 年12 月目录引言 (1)一、结构设计 (1)1.1温度传感器 (1)1.1.1 DS18B20数字温度传感器 (1)1.1.2 AD590温度传感器 (2)1.2水位传感器 (3)1.2.1开关式液位传感器 (3)二、硬件设计 (4)2.1功能分析 (4)2.1.1温度读取与显示 (4)2.1.2水位的读取与显示 (6)2.1.3低温保护功能 (6)2.1.4手动注水功能 (7)2.2存储器 (7)2.3总体接线 (8)三、程序设计 (9)3.1.2 手动注水子程序 (11)四、功能测试 (12)4.1低温保护功能测试 (12)4.2水位显示和手动注水功能测试 (14)五、总结 (17)参考文献 (18)原件清单 (19)微机系统与接口技术课程设计任务书一、设计目的:1、建立微机系统概念,加深对微机系统的理解和认识,提高微机系统的应用能力。
2、进一步学习和掌握微机程序设计方法,通过应用程序的编写和调试,学习程序的调试方法。
3、进一步熟悉违纪典型接口芯片的使用,接口及外部设备与系统的连接方法,二、题目:微机系统与接口技术应用系统的设计-------------太阳能热水器数显控制器三、设计要求:1、以8086(8088)CPU为主控单元,构建微机应用系统。
2、应用系统的硬件设计,画出电路原理图和线路连接图。
3、应用系统的软件设计,画出软件流程图,写出主要程序。
4、根据实验条件,进行微机应用系统的部分模拟调试工作,写出调试说明。
5、整理设计说明书,列出参考文献清单。
6、列出使用的元件和设备清单引言目前,中国已成为世界上最大的太阳能热水器生产国,年产量约为世界各国之和。
但是与之相配套的太阳能热水器控制器却一直处在研究与开发阶段。
微机原理实验(循环程序设计)
教
师
评
阅
教师签字年月日
备注:1.文件名命名方式为:学号+姓名+实验序号.DOC
2.将文件按附件形式添加后提交
DATA SEGMENT
DB 06H,12H,88H,82H,90H,22H,33H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV DI,0000H
MOV CL,[DI]
XOR CH,CH
MOV BL,CH
INC DI
A0: MOV AL,[DI]
TEST AL,80H
JE A2
INC BL
A2: INC DI
LOOPA0
MOV [DI],BL
MOV AX,4C00H
INT 21H
CODE ENDS
END START
实
验
步
骤
(1)用编辑软件如:EDIT,输入源程序,并保存,后缀名为.ASM。
-U ;先用反汇编来查看源程序装入的地址和数据段的地址
:
-G=xxxx:xxxx;从程序装入的地址处,开始运行程序
(5)查看实验结果。
(6)也可使用EMU8086软件进行调试
骤
实
验
分
析
与
总
结
1.通过实验掌握了宏汇编命令的基本格式及对循环结构的理解。
2.熟悉并掌握了循环结构程序设计的方法。
2.求某数据区内负数的个数。
设数据区的第一个单元存放数据的个数,从第二个单元开始存放数据,在最后一个单元存放结果。
微机原理实验指导书 (1)
实验一系统操作及程序调试举例1.实验目的学习并掌握实验系统的基本操作,为以后的实验打下基础。
2.实验设备DICE-8086B实验系统一台3.实验准备工作系统一经连好,检查无误后,就可以通电运行。
系统提供两种启动方式,即:系统自动完成后,显示器上会显示“>”提示符,等待键入操作命令。
4.实验内容及步骤(1)系统操作练习(一)要求:从3500内存单元开始建立0~15共16个数据。
程序流程图如下:实验步骤①输入与修改:在“﹥”提示符下键入A2000,此时显示器上将会显示程序的段地址CS和偏移地址IP(=2000H),接着就可以在光标处输入程序。
注:在输入过程中,若发现本行有错误,则可以按“ ”键删除并重新输入;若回车后系统提示“ERROR!”,则要在原地址指针处重新正确输入。
输入程序后可通过反汇编查看程序。
(U操作)②程序运行:在DICE-8086B实验系统上,程序的运行方式有单步、连续和断点运行几种方式。
可参考(T操作,G操作,GB操作等)③内存单元的修改与显示:用(D操作)可显示内存单元的内容,用(E操作)可修改内存单元的内容。
(分别参考前)。
④运行程序观察从3500H单元开始连续存放的16个数据为多少?任意修改AX的值,再运行程序,显示运行结果是否正确?流程图及参考程序如下:地址机器码助记符注释2000 BF 3500 MOV DI,3500 ;设数据区首址2003 B9 0010 MOV CX,0010 ;字节数送CX2006 B8 0000 MOV AX,00002009 9E SAHF200A 88 05 MOV B[DI],AL ;写入一字节200C 47 INC DI ;修改地址指针200D 40 INC AX ;修改数据200E 27 DAA ;十进制调整200F E2 F9 LOOP 200A ;未填完转移2011 CD 00 INT(2)系统操作练习(二)要求:将内存3500单元开始的0~15共16个数传递到3600单元开始的数据区中。
微机原理课程设计_进制转换程序设计
课程设计任务书学生姓名:易杨专业班级:电信 0802 指导教师:曾刚工作单位:信息工程学院题目:进制转换程序设计初始条件:具备数字电路的理论知识;具备微机原理的理论知识和实践能力;熟悉汇编语言编程技术;熟悉80X86的CPU结构和指令系统;熟悉相关常用接口电路的设计使用方法。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、程序实现二进制、十进制、十六进制之间的转换2、在命令提示下输入相应进制数,回车后进行转换3、输入错误时应声响报警并拒绝输入4、程序采用汇编语言在PC机上完成5、完成符合学校要求的设计说明书时间安排:一周,其中2天程序设计,2天程序调试,1天完成课程设计报告书及答辩指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (I)1原理分析 (1)2程序设计流程 (3)2.1程序流程图 (3)2.2设计思路 (4)3程序设计 (5)3.1堆栈段数据段程序设计 (5)3.2主程序设计 (5)3.3输入二进制程序 (7)3.4输入十进制程序 (8)3.5输入十六进制程序 (8)3.6输出二进制程序 (9)3.7输出十进制程序 (9)3.8输出十六进制程序 (11)3.9回车键确定程序 (11)3.10报警程序 (12)4运行结果 (13)5心得体会 (15)参考文献 (16)摘要日常生活与实际应用中,往往需要计算机处理的信息是多种多样的,如各种进位制的数据,不同语种的文字符号和各种图像信息等。
但在计算机内部采用的是二进制计数制,这种进制表达方法对于人们研究分析是不那么方便的。
本次课程设计将通过所学的微机原理知识理论,用汇编语言编写程序,实现二进制、十进制与十六进制之间的相互转换,并在MF2KP软件上演示。
关键词:汇编程序进制转换MF2KP1 原理分析进位计数制是人们利用符号来计数的方法。
一种进位计数制包含一组数码符号和两个基本因素。
数码是用不同的数字符号来表示一种数制的数值,这些数字符号称为”数码”。
微机原理3.8
3、逻辑尺控制法:将一个逻辑变量存储 在一个寄存器或一个变量中,利用其中二 进制位作为“尺子”来进行控制。
例4、计算FUNC0和FUNC1共16次,顺序是: FUNC0 5次,FUNC1 3次,FUNC0 2次, FUNC1 4次,FUNC0 1次,FUNC1 1次。 FUNC0的功能是输出一个A,FUNC1的功 能是输出一个B。
束。 例3.26 内存中从STRING地址开始存放一 个以$结尾的字符串,要求检查所有字符是否均 为偶校验。是→置标26流程图
开始
BX←取字符串首地址
DI←结果单元地址 AL←取一字符 BX←BX+1 AL=‘$’?
Y
AH←0
N
N
PF=0? RESULT←AH 结束
SI→ BUFF1 SI→
CX=100作循环计数器; SI作源数据块地址指针; DI作目的块地址指针。
DI→ BUFF2 DI→
流程图
S
CX←100 SI←BUFF1偏 DI ←BUFF2偏
LOP
循环准备
AL ←[SI] [DI] ←AL SI ←SI+1 DI ←DI+1 Y CX-1≠0
循环工作
等)联用。
3.8.3 循环程序设计方法
循环程序设计的关键是如何控制循环。 1、计数控制法 适用对象:循环次数已知。 控制方法:设置一个计数器,用倒计数法。 例3.25 在以BUF为首地址的字节单元中存 放了COUNT个无符号数,找出其中最大数,送 MAX单元。
例1 将DS段缓冲区BUFF1中的100个字符传 送到ES段中的BUFF2。
循环修改
循环工作
循环判断
循环修改
3.8.2
循环指令(重复控制指令) OPR ; OPR≡{标号}
1632位微机原理汇编语言及接口技术教程课后习题答案
or ax,ax
xor ax,ax
not ax
test ax,0f0f0h
〔解答〕
mov ax,1470h;AX=1470HCFZFSFOFPF
and ax,ax;AX=1470H00000
or ax,ax;AX=1470H00000
xor ax,ax;AX=0000H01001
not ax;AX=FFFFH01001
执行单元EU:负责指令译码、执行和数据运算;
8位cpu在指令译码前必须等待取指令操作的完成,8088中需要译码的指令已经取到了指令队列,不需要等待取指令。而取指令是cpu最为频繁的操作,因此8088的结构和操作方式节省了大量等待时间,比8位cpu节省了时间,提高了性能。
〔习题2.2〕
说明8088的8个8位和8个16位通用寄存器各是什么?
(2)数据总线:传输读写操作的数据信息。
(3)控制总线:协调系统中各部件的操作。
〔习题1.7〕
简答如下概念:
(1)计算机字长
(2)取指-译码-执行周期
(3)ROM-BIOS
(4)中断
(5)ISA总线
〔解答〕
(1)处理器每个单位时间可以处理的二进制数据位数称计算机字长。
(2)指令的处理过程,即指处理器从主存储器读取指令(简称取指),翻译指令代码的功能(简称译码),然后执行指令所规定的操作(简称执行)的过程。
⑵有两个32位数值,按“小端方式”存放在两个缓冲区buffer1和buffer2中,编写程序段完成DX.AX←buffer1-buffer2功能。
⑶编写一个程序段,在DX高4位全为0时,使AX=0;否则使AX=-1。
〔解答〕
CPU:CPU也称处理器,是微机的核心。它采用大规模集成电路芯片,芯片内集成了控制器、运算器和若干高速存储单元(即寄存器)。处理器及其支持电路构成了微机系统的控制中心,对系统的各个部件进行统一的协调和控制。
微机原理与汇编语言实验03_循环程序设计实验
微机原理与汇编语言实验实验三循环程序设计实验一实验目的1、掌握循环程序的设计方法。
2、掌握比较指令、转移指令和循环指令的使用方法。
3、进一步掌握调试工具的使用方法。
二实验预习要求1、复习比较指令、条件转移指令和循环指令。
2、复习循环程序的结构、循环控制方法等知识。
3、读懂“三实验内容”中给出的将十进制数转换为二进制数以及将二进制数转换为十进制数的程序。
4、根据“三实验内容”中给出的流程图和程序框架编写源程序,以便上机调试。
5、从“四实验习题”中任选一道题目,编写源程序,以便上机调试。
三实验内容计算1+2+……n=?,其中n通过键盘输入。
要求在屏幕上提供如下信息:Please input a number(1 627): ;出现此信息后通过键盘输入一个小于628的无符号整数1+2+…..n=sum;其中n为用户输入的数,sum为所求的累加和程序运行情况如下图所示(说明:图中所运行程序允许累加和不大于一个32位二进制数所能表示的范围)。
1、编程指导(1)键盘输入的十进制数如368在计算机中是以33H,36H,38H形式存放的,如何将它们转换为一个二进制数101110000B,以便对累加循环的循环次数进行控制是本程序首先要解决的问题。
将键盘输入的十进制数转换为二进制数的程序清单如下:.model small.stack.dataINF1 DB "Please input a number (0-65535):$"IBUF DB 6,0,6 DUP(?).codeSTART: MOV AX, @dataMOV DS, AXMOV DX, OFFSET INF1MOV AH, 09HINT 21HMOV DX, OFFSET IBUF ;键入一个十进制数(<65535)MOV AH, 0AHINT 21HMOV CL, IBUF+1 ;十进制数的位数送CXMOV CH, 0MOV SI, OFFSET IBUF+2 ;指向输入的第一个字符(最高位)MOV AX, 0 ;开始将十进制数转换为二进制数AGAIN: M OV DX, 10 ;((0⨯10+a4) ⨯10+…) ⨯10+a0MUL DXAND BYTE PTR [SI], 0FHADD AL, [SI]A DC AH, 0I NC SILOOP AGAINMOV AH, 4CHINT 21HEND START本程序功能:从键盘接收一个无符号十进制整数(小于65535),将其转换为二进制数,转换结果存在AX寄存器中。
微机原理课程设计(电子时钟)
电子时钟课程设计一:设计背景电子数字钟的应用十分广泛,通过计时精度很高的石英晶振(也可采用卫星传递的时钟标准信号),采用相应进制的计数器,转化为二进制数,经过译码和显示电路准确地将时间“时”“分”“秒”用数字的方式显示出来。
与传统的机械钟相比,它具有走时准确,显示直观,无机械传动,无需人的经常调整等优点。
它广泛用于电子表、车站、码头、广场等公共场所的大型远距离时间显示电子钟。
二:数字钟电路设计思路1.选用8253计数器2进行1s的定时,其输出OUT1与8259的IRQ0相连,当定时到1s时产生一个中断服务程序进行时、分、秒的计数,并送入相应的存储单元;8255的A口接七段数码管的位选信号,B口接数码管的段选信号。
时、分、秒的数值通过对8255的编程可送到七段数码管上显示。
2.此程序主要由四部分组成:第一部分为最主要的部分定义显示界面;第二部分为利用延时程序,并将调用的二进制表示的时间数转换成ASCII码,并将时间数存入内存区;第三部分将存在系统内存区的时间数用七段数码管显示出来;第四部分利用循环程序分别对秒个位、秒十位、分个位、分十位与相应的规定值进行比较,结合延时程序来实现电子钟数字的跳变,从而形成走时准确的电子钟。
该程序实现了准确显示秒和分,读数准确,走时精准。
此电子钟能准确的从0时0分0秒走时到23时59分59秒,然后能自动回复到0时0分0秒循环走时。
3.基本工作原理:系统设计的电子时钟主要由显示模块、时钟控制模块和时钟运算模块三大部分组成。
以8086微处理器作CPU,用8253做定时器产生时钟频率提供一个频率为10kHz的时钟信号,要求每隔10ms完成一次扫描键盘的工作。
在写入控制字与计数初值后,每到10ms定时器就启动工作,即当计数器减到1时,输出端OUT0输出一个CLK周期的低电平,向CPU申请中断,当达到100次时,则输出端OUT1输出1s,向CPU申请中断,由8255控制一个数码管显示,当计数到60s时,则输出端OUT2向CPU申请中断,由另一数码管显示1min,同理由数码管显示1h.CPU处理,使数码管的显示发生变化。
微机原理loop
微机原理loop
在微机原理中,循环(loop)是一种重要的控制结构,它可以让程序重复执行一段代码,直到满足某个条件时才停止执行。
循环分为两种主要类型:while循环和for循环。
while循环是一种基于条件的循环结构,它会根据一个条件不断地重复执行程序,直到这个条件不满足为止。
while循环代码示例: ```
while(条件){
循环体;
}
```
for循环则是一种计数器控制的循环结构,它会重复执行一段代码,直到计数器达到指定值为止。
for循环代码示例:
```
for(初始化; 条件; 步进){
循环体;
}
```
循环结构在程序设计中应用广泛,特别是在需要重复执行某个任务的情况下。
对于大部分计算机应用,循环结构都是非常必要的,因为它们简化了复杂的代码流程,并使程序更加高效和优化。
- 1 -。
LOOP指令课程设计报告
课程设计报告书题目:计算机组成与体系结构CPU LOOP指令设计学院计算机科学与工程学院专业计算机科学与技术(全英创新班)学生姓名方嘉铭、柳雨新、张弘学生学号201236590024、201236590130、201230590280指导教师赖晓铮课程编号 145243课程学分 2起始日期 2014年9月至2014年10月课题名称计算机组成与体系结构CPU LOOP指令设计一、选题背景主要问题:在已有的FS-I-SYSTEM硬件仿真系统中完成LOOP微指令的编写,以模拟实现CPU中循环语句的调用。
应达到的技术要求:在已有的FS-I-SYSTEM硬件仿真系统中通过指令调用让LOOP 微指令完成一些指定的操作,并成功通过测试程序,以检验其正确性。
设计的指导思想:冯诺依曼结构:是一种将程序指令存储器和数据存储器合并在一起的存储器结构。
程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同。
哈佛结构:一种将程序指令存储和数据存储分开的存储器结构。
中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。
程序指令存储和数据存储分开,可以使指令和数据有不同的数据宽度。
二、方案论证(设计理念)FS-I-SYSTEM的CPU内核与Harvard architecture较为相近,它是一种将程序指令和数据分开的存储器结构,因此在进行程序导入的时候需要分别将微程序和数据分别导入到对应的Microprogram以及Data里。
它和Von-Neumann architecture是不一样的。
在本次课程设计中,我们需要完成的是LOOP指令及其相应的微指令的编写。
其主要完成的功能是在CX寄存器中预先存好一个值作为循环的次数,然后每当微程序执行到该指令时,CX里的值自减1,通过判断CX的值是否大于0,若大于0则PC跳到一个事先设置好的地址以实现循环语句的效果,若等于0,则继续往下执行语句。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
mov dx,con_8255
mov al,80h
out dx,al
mov dx,pc_8255
mov al,LEDCON
out dx,al
mov cx ,10
MOV Buffer + 2,AL
MOV AL,2
MOV AH,AL
AND AL,0FH
MOV Buffer + 3,AL
MOV Buffer + 4,10H
MOV Buffer + 5,10H
MOV Buffer + 6,10H
MOV Buffer + 7,10H
MOV CX , 20
AGAIN: CALL Display8
loop AGAIN
POP DX
POP CX
POP BX
MOV ES,AX
NOP
CALL InitKeyDisplay ;对键盘、数码管控制器8255初始化
CALL Init825ห้องสมุดไป่ตู้
CALL WriIntver
MOV Counter,0 ;中断次数
MOV ReDisplayFlag,0
CALL DISPLAY8
loop again222
MOV LEDCON,0FFH
CALL LedDisplay_a
CALL DISPLAY8
CMP Counter,7
JNZ START2
START3:
LEA SI,Buffer
mov dx,con_8255
mov al,80h
out dx,al
mov dx,pc_8255
mov al,0ffh
out dx,al
mov cx,10
RET
LedDisplay_a ENDP
LedDisplay_b PROC NEAR
PUSH AX
PUSH BX
PUSH DX
LEA SI,buffer1 ;置显示缓冲器初值
MOV AH,7FH
LEA BX,SEG_TAB
LD0: MOV DX,PA_8255
mov al,80h
out dx,al
mov dx,pc_8255
mov al,LEDCON
out dx,al
mov cx ,10
CALL LedDisplay_a
again222:
AND AL,0FH
MOV Buffer+1,AL
MOV AL,1
MOV AH,AL
AND AL,0FH
MOV Buffer + 2,AL
MOV AL,0
MOV AH,AL
again111:
CALL DISPLAY8
loop again111
mov ReDisplayFlag,0
LEA SI,Buffer
MOV CL,COUNTER
SHL LEDCON,CL
mov dx,con_8255
PC_8255 EQU 0272H
.STACK 100
.DATA
BUFFER DB 8 DUP(?)
BUFFER1 DB 0,1,2,3,4,5,6,7
SEG_TAB DB 0A4H,0C0H,0F9H,82H,0C7H,0C0H,0C0H ,8CH
RET
Init8259 ENDP
WriIntver PROC NEAR
PUSH ES
MOV AX,0
MOV ES,AX
MOV DI,28H
LEA AX,INT_2
STOSW
CMP ReDisplayFlag,0
JNZ START2
CALL delay
CALL LedDisplay3
CMP ReDisplayFlag,0
JNZ START2
CALL delay
MOV AX,CS
STOSW
POP ES
RET
WriIntver ENDP
LedDisplay_a PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AL,Counter
MOV Buffer+5,AL
MOV Buffer+6,AL
MOV Buffer+7,AL
POP DX
POP CX
POP BX
POP AX
MOV Buffer,AL
MOV AL,1
MOV AH,AL
AND AL,0FH
MOV Buffer + 1,AL
MOV AL,0
MOV AH,AL
AND AL,0FH
again333:
CALL LedDisplay_b
loop again333
mov ReDisplayFlag,0
LEA SI,Buffer
; MOV CL,COUNTER
mov ledcon,0b3h
OUT DX,AL
MOV DX,IO8259_1
MOV AL,08H
OUT DX,AL
MOV AL,09H
OUT DX,AL
MOV AL,0FbH
OUT DX,AL
LEDCON DB 0FFH
Counter DB ?
ReDisplayFlag DB 0
.CODE
START:
MOV DX,Con_8255
MOV AL,80H
OUT DX,AL
MOV AX,@DATA
MOV DS,AX
again444:
CALL LedDisplay_b
loop again444
MOV LEDCON,0FFH
CMP Counter,8
JNZ START3
START4:
MOV Counter,1
MOV Buffer,AL
MOV Buffer+1,AL
MOV Buffer+2,AL
MOV Buffer+3,AL
MOV Buffer+4,AL
LODSB
XLAT ;取显示数据
OUT DX,AL ;段数据->8255 PA 口;PA指示LED显示什么数据
INC DX ;扫描模式->8255 PB 口;PB哪个LED显示
MOV AL,AH
OUT DX,AL
CALL DL1 ;延迟1ms
MOV DX,PB_8255
POP AX
RET
LedDisplay ENDP
LedDisplay2 PROC NEAR
push ax
push bx
push cx
push dx
MOV BUFFER,10H
MOV AL,6
MOV AH,AL
START2:
mov dx,con_8255
mov al,80h
out dx,al
mov dx,pc_8255
mov al,0ffh
out dx,al
mov cx,10
CALL LedDisplay_a
JMP START2
Delay PROC NEAR ;延时
PUSH cx
MOV CX,60000
DL500ms1: LOOP DL500ms1
POP CX
RET
Delay ENDP
Delay2 PROC NEAR
AND AL,0FH
MOV Buffer + 3,AL
MOV AL,2
MOV AH,AL
AND AL,0FH
MOV CX,500
LOOP $
POP CX
RET
DL1 ENDP
LedDisplay PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AL,6
MOV AH,AL
AND AL,0FH
.MODEL TINY
EXTRN InitKeyDisplay:NEAR, Display8:NEAR
IO8259_0 EQU 0250H
IO8259_1 EQU 0251H
CON_8255 EQU 0273H
PA_8255 EQU 0270H
PB_8255 EQU 0271H
PUSH CX
MOV CX,60000
CALL DISPLAY8
LOOP DELAY2
pop cx
ret
delay2 endp
Init8259 PROC NEAR
MOV DX,IO8259_0
MOV AL,13H
CALL LedDisplay2
CMP ReDisplayFlag,0
JNZ START2
CALL delay
CALL LedDisplay
CMP ReDisplayFlag,0
JZ START1
STI ;开中断
START1:
LEA SI,Buffer
CALL LedDisplay5
CMP ReDisplayFlag,0
JNZ START2