微机原理程序
微机原理及程序设计

微机原理及程序设计微机原理及程序设计是一门结合了计算机硬件基础和软件编程技能的课程,它对于理解现代计算机系统的工作方式至关重要。
本课程旨在教授学生微机的基本组成原理、指令系统、存储结构以及程序设计的基本方法。
微机原理概述微机,即微型计算机,是一种体积小、价格低廉、功能相对单一的计算机系统。
它们广泛应用于个人计算、嵌入式系统、工业控制等领域。
1. 微机的基本组成:微机主要由中央处理器(CPU)、存储器、输入输出设备(I/O)等部分组成。
2. 中央处理器:CPU是微机的核心,负责执行程序指令。
它包括算术逻辑单元(ALU)、控制单元(CU)和寄存器组。
3. 存储器:存储器用于存储程序和数据。
主要分为随机存取存储器(RAM)和只读存储器(ROM)。
4. 输入输出设备:包括键盘、鼠标、显示器、打印机等,用于与用户进行交互。
指令系统与寻址方式1. 指令系统:是CPU可以执行的所有指令的集合。
指令系统的设计直接影响到微机的性能和功能。
2. 寻址方式:是CPU访问存储器中数据的方法。
常见的寻址方式包括直接寻址、间接寻址、基址寻址等。
存储结构1. 存储器的层次结构:通常包括高速缓存(Cache)、主存和辅助存储器。
2. 存储管理:涉及虚拟存储技术、内存分配和回收等。
程序设计基础1. 程序设计语言:包括汇编语言、高级语言等。
汇编语言与机器指令直接对应,而高级语言则更为抽象,易于编写和理解。
2. 程序结构:程序通常由数据定义、指令序列和控制结构组成。
3. 算法与数据结构:算法是解决问题的步骤,而数据结构是组织数据的方式。
程序设计方法1. 模块化设计:将程序分解为多个模块,每个模块完成特定的功能,易于管理和维护。
2. 面向对象编程:以对象和类为基础,强调数据和功能的封装、继承和多态性。
3. 程序调试:使用调试工具来查找和修复程序中的错误。
微机接口技术1. 总线接口:连接微机内部各部件的通信线路。
2. 外设接口:如串行接口、并行接口、USB接口等,用于连接外部设备。
微机原理五类常用程序

五类常用程序:传输数据求最大最小值统计正负数排序加法程序存储器清零或置FF1.1将1000H-1063H中的各字节内容清0(或置FFH)1.2传输数据块将1000H-1063H中的字节内容传递到4000H-4063H2.找最大值最小值从2500H-2563H中存放着数据,把其中的最大值找出来,地址存放在3000H中3.统计负数正数从2100H 开始存放100个无符号数,统计有多少个正数,多少个负数。
负数个数存入2200H4.1求1AH+02H+31H+14H+2FH+06H=???数据1AH、0FH 、24H、4EH、18H、2DH放在[3000H]- [3005H]处4.2求十进制计算25 74 89 67+ 49 78 64 95数据25 74 89 67放在[2400]- [2403]数据49 78 64 95放在[2500]- [2503]4.3将BLOCK单元开始的10个单元数相加,结果存放入BLOCK单元。
若相加过程中发生溢出,停止运算,并在DL中设置溢出标志FF.5.冒泡排序方法5.1字节型变量V AR1、V AR2和V AR3存放有3个无符号数,将其中的内容按从大到小重新排列。
解:经重新排列后,V AR1的值最大,V AR3的值最小。
由于变量中存放的数据为无符号数,因此应该采用JA、JAE、JB、JBE等指令。
编程思路:通过在三个数中找出最大值,将它与V AR1单元进行交换;然后对剩余的两个数进行比较,将较大值存放在V AR2中。
汇编语言程序如下:5.2存放在2040H-2045H中的字节数据由大到小排列1.1将1000H-1063H中的各字节内容清0(或置FFH)MOV SI, 1000HMOV CX, 0064HXOR AL,ALL1: MOV [SI], ALINC SIDEC CXJNZ L1HLT1.2传输数据块将1000H-1063H中的字节数据内容传递到4000H-4063HMOV SI, 1000HMOV DI, 4000HMOV CX, 0064HL1: MOV AL, [SI]MOV [DI], ALINC SIINC DIDEC CXJNZ L1HLT2. 从2100H 开始存放100个无符号数,求最大值并存入单元2200HMOV SI, 2100HMOV CX, 0064HXOR AL,ALL1: CMP AL, [SI]JNC L2MOV AL , [SI]L2: INC SIDEC CXJNZ L1MOV [2200], ALHLT如果求最小值XOR AL,AL 改为MOV AL,0FFHJNC L2 改为JC L2或者MOV [SI], ALINC SI相应MOV CX, 0063H3.统计负数正数从2100H 开始存放100个无符号数,统计有多少个正数,多少个负数。
微机原理微型计算机的程序设计

2024/9/30
43
例6.2
将内存(10050)单元旳内容拆成两段,每段4位,并将它 们分别 存入内存(10051)和(10052)单元。即(10050) 单 元 中 旳 低 4 位 放 入 ( 10051 ) 单 元 中 旳 低 4 位 , 而 (10050)单元中旳高4位放入(10052)单元中旳低4位。
INT 21H
2024/9/30
42
作业8.17 编写求输入算式’加数1+加数2’旳和并送显。
(加数及其和均为4位(即指压缩)BCD数,P262)
分析:要求先有屏幕显示输出‘加数1+加 数2:’,然后从键盘输入两个4个字节旳 BCD数,加完后送显。
用到旳变量:W1和W2因为从键盘输入,均 不拟定是几位十进制,故需拟定其最大位 数不超出要用
2024/9/30
12
MOV AX, W1
;AX=0809H,W2为0607H
ADD AL, BYTE PTR W2 ;AL=10H, CF=0,AF=1
AAA ; 属于第一种情况,故
; AL为(AL+06H)&0FH=10H+06H )&0FH
;
=16H&0FH=06H=AL;
;AH加1且CF置CF=1,所以AH=08H+1=09H,则AX=0906H
2024/9/30
34
2024/9/30
35
2024/9/30
36
2024/9/30
37
2024/9/30
38
作业8.4 编写求两个4位非压缩BCD数之和,
将和送显示屏显示旳程序。(P261)
分析:两加数各要4个字节单元,可觉得DD 类型;考虑到进位,和要5个字节单元,另 外,输出到显示器旳结束符号’$’需要一 个单元存放,故共需6个字节。 所以,数据段定义为:
微机原理第五章 程序设计-dsh

INT
COSEG
21H
ENDS END START
第三节 分支程序
计算机可根据不同条件进行逻辑判断,从而选择不同 的程序流向。程序的流向是由 CS和 IP决定的,当程序 的转移仅在同一段内进行时,只需修改偏移地址 IP的 值;如果程序的转移是在不同的段之间进行,则段基 址 CS和偏移地址 IP均需要修改。 转移指令分为无条件转移指令和条件转移指令。 在进行分支程序设计时,首先要根据处理的问题用比 较、测试的方式,或者用算术运算、逻辑运算使标志 寄存器产生相应的标志位,根据转移条件选择转移指 令。
INC INC DEC JNZ
BX BX CX LOP ; ;控制部分
修改部分
MOV YY,AX MOV AH,4CH INT CODE ENDS 21H
END
START
一.循环的基本结构
1.先执行,后判断结构
流程图如右:
入口
初始化部分
循环体
修改部分
N
循环 结束? Y 出口
例2. 编程统计数据块中正数的个数,
Y
RS END (DX)
DATA
SEGMENT
D1
COUNT RS DATA CODE
DB,-1,-3,5,7,-9,·,-6 · ·
EQU DW ENDS SEGMENT ASSUME CS:CODE,DS:DATA $-D1 ?
START:
MOV
AX,DATA
MOV
MOV MOV MOV
DS,AX
JMP JUS2
BIGD: JG JUS1 ;x>0转移 ;x=0
MOV AL, 0
JMP
JUS1: JUS2:
JUS2
微机原理加法及判断程序的编写调试实验

1 当 x>0
y=
0 当 x=0
-1 当 x<0
二、实验目的和要求
实验目的 1、写汇编语言程序的基本方法和基本框架。 2、学会编写顺序结构、分支结构和循环结构的汇编程序。 3、掌握程序中数据的产生与输入输出的方法。 三、实验要求 1、实验前准备 (1)分析题目,将程序中的原始数据、中间结果和最终结果的存取方式确定好。 (2)写出算法或画出流程图。 (3)写出源程序。 (4)对程序中结果进行分析,并准备好上机调试与用汇编程序及汇编调试的过程。 2、本实验要求在 PC 机上进行。
四、 实验设备(软、硬件)
1、 IBM PC 和(PC/XT、AT、286、386、486)
2、 H-86/51 通用微机实验培养装置
五、 仪器使用说明
1、在 EDIT 中输入原程序,即生成 .asm 文件。 2、汇编.asm 文件
C:\WINDOWS\DESKTOP\BH-86>masm Source filename [.ASM]: E1 Object filename [E1.BOJ]: E1 Source listing [NUL.LST]: E1 Cross—reference[NUL.CRF]: E1
九、 参考资料
1、《微型计算机系统原理及应用-第四版》,周明德编著,清华大学出版社,2002 年。 2、《微型机接口技术》,王承发、刘岩主编,高等教育出版社,1998 年 3、《IBM PC 宏汇编语言程序设计》,张怀莲编,电子工业出版社,1989 年
十、思考题
程序中的原始数据是以怎样的形式存放在数据区中?请用 DEBUG 调试程序进行观察,
(5)、用 T 命令做单步跟踪执行程序。
附:DOS 调用程序
1、在显示器上显示一个字符 调用 02H 功能调用号,发 21H 号中断,将要显示的字符的 ASCII 码送入 DL,
微机原理实验参考程序

T1a.asm;4000H起256个字节清0Block equ 4000hmov dptr, #Block ; 起始地址mov r0, #0 ; 清 256 字节clr aLoop: movx @dptr, ainc dptr ; 指向下一个地址 djnz r0, Loop ; 记数减一ljmp $endT1a.c;4000H起256个字节清0xdata unsigned char Buffer[256] _at_ 0x4000; void main(){unsigned int index;unsigned char xdata * ptr;ptr = &Buffer; // 起始地址for (index = 0; index <= 255; index++) {*ptr++ = 0; // 清0, 地址加一}}T1b.asm;3000H起长度256字节的存储块移到4000Hmov r0, #30hmov r1, #00hmov r2, #40hmov r3, #00hmov r7, #0Loop: mov dph, r0mov dpl, r1movx a, @dptrmov dph, r2mov dpl, r3movx @dptr, acjne r1, #0ffh, Goon1inc r0Goon1: inc r1cjne r3, #0ffh, Goon2inc r2Goon2:inc r3djnz r7, Loopljmp $endT1b.c;3000H起长度256字节的存储块移到4000Hxdata unsigned char Buffer1[256] _at_ 0x3000;xdata unsigned char Buffer2[256] _at_ 0x4000;void main(){unsigned int index;unsigned char xdata * ptr1;unsigned char xdata * ptr2;ptr1 = &Buffer1;ptr2 = &Buffer2;for (index=0; index <= 255; index++) {*ptr2++ = *ptr1++;}}T2.ASM 8255输入输出实验mode equ 082h ; 方式0,PA,PC输出,PB输入1000,0010 PortA equ 8000h ; Port APortB equ 8001h ; Port BPortC equ 8002h ; Port CCAddr equ 8003h ; 控制字地址org 0hmov a, #modemov dptr, #CAddrmovx @dptr,a ; 输出控制字;实验1:PA口作输出,驱动LED,实现单个LED循环点亮。
微机原理实验程序 中国石油大学(华东)

实验3 循环程序设计实验内容:1.数组X,Y,Z,。
X=32,-43,76,95,-1;Y=-78,127,-128,-125,88。
计算两数之和,送入数组S。
DATA SEGMENTX DB 32,-43,76,95,-1Y DB -78,127,-128,-125,88S DB 5 DUP(0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX ,DATAMOV DS,AXMOV CX,5MOV SI,0FOR:MOV AL,X[SI]ADD AL,Y[SI]MOV S[SI],ALINC SILOOP FORCODE ENDSEND START2.两个多位十进制数,X=1357902468,Y=5790123467。
计算两数之和(BCD码)。
DATA SEGMENTX DB 68H,24H,90H,57H,13HY DB 67H,34H,12H,90H,57HS DB 5 DUP(0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX ,DATAMOV DS,AXMOV CX,5MOV SI,0CLCFOR:MOV AL,X[SI]ADD AL,Y[SI]DAAMOV S[SI],ALINC SILOOP FORCODE ENDSEND START实验4 子程序调用变成设计实验内容:用子程序调用方法,现有数组X=32,-43,76,95,-1,-78,127,-128,-125,88 编程按递增顺序排序输出。
DATA SEGMENTX DB 32,-43,76,95,-1,-78,127,-128,-125,88ENDS SEGMENTCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX ,DATAMOV DS,AXCALL SUB1MOV AH,4CHINT 21HSUB1 PROC NEARMOV CX,9LP1:MOV BX,0MOV DX,CXLP2;MOV AL,X[BX]CMP AL,X[BX+1]JLE NEXTXCHG AL,X[BX+1]NEXT:INC BXDEC DXJNE LP2LOOP LP1RETSUB1 ENDPCODE ENDSEND START实验5 DOS功能调用实验内容:1.从键盘连续输入五个单个字符,然后再反向输出这5个字符。
微机原理必备程序段

1.数据传送:问题描述:设在DS=3000H,偏移地址为0100H的内存中顺序存放着100个字节的数据。
要求传送到以2000H为起始偏移地址的区域。
代码:利用寄存器间接寻址来寻找操作数可以编程如下:mov ax,3000hmov ds,ax ;建立数据段mov si,0100h ;建立源数据指针mov di,2000h ;建立目的地指针mov cx,100 ;设置计数器nt:mov al,[si] ;取数mov [di],al ;送数inc si ;调整指针inc didec cx ;计数器减1jne nt ;CX-1≠0转nt 标号另一种方法:提示:若将倒数第2、3行用 REP MOVSB代替,则可进一步简化。
MOV AX,3000HMOV DS,AXMOV ES,AXMOV SI,0100HMOV DI,0200HMOV CX,100CLDNT:MOVSBLOOP NTINT 20H2.多字节的加法:问题描述:有两个4字节的无符号数相加,这两个数分别放在2000H和3000H开始的存储单元中,低位在前,高位在后。
运算后,得到的和放在2000H开始的内存单元中。
代码:MOV SI,2000H ;取第一个数的首地址MOV AX,[SI] ;将第一个数的低16位取到AXMOV DI,3000H ;取第二个数的首地址ADD AX,[DI] ;两个数的低16位相加。
MOV [SI],AX ;低16位相加的结果送到2000H和2001H单元MOV AX,[SI+2] ;取第一个数的高16位送到AX中ADC AX,[DI+2] ;两个数的高16位连同CF相加MOV [SI+2],AX ;高16位相加的结果送到2002H,2003H单元。
3.多字节组合BCD码十进制加法问题描述:设第一个数据在1000H开始的8个内存单元中,第二个数据在2000H开始的8个内存单元中,要求相加之后将结果放在2000H开始的内存区域。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二:循环程序设计2.DA TA SEGMENTx db -78,127,-128,-125,88y db 32,-43,76,95,1S db 5 dup(?)data endsCode segmentAssume cs:code,ds:data Start:mov ax,dataMov ds,axMov cx,5Mov bx,0L1:mov al,x[bx]Add al,y[bx]Inc bxLoop L1MOV AH,4CHINT 21HCODE ENDSEND START3.DA TA SEGMENTY DB 68H,24H,90H,57H,13H HX DB 67H,34H,12H,90H,57H S DB 5 DUP(?)DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA START:MOV AX,DATAMOV DS,AXMOV CX,5MOV SI,OFFSET XMOV DI,OFFSET YLP:MOV AL,[SI]MOV AH,[DI]ADC AL,AHDAAMOV S[SI],ALINC SIINC DILOOP LPMOV AH,4CHINT 21HEND START4.DA TA SEGMENTLIST DB 0,1,2,3,4,5,6,7,8,9COUNT EQU $-LISTDA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOV AX,DATAMOV DS,AXMOV CX,COUNT-1LOOP1:MOV DX,CXMOV BX,0LOOP2:MOV AX,LIST[BX]CMP AX,LIST[BX+1]MOV LIST[BX],AXLOOP3:INC BXLOOP LOOP2MOV CX,DXLOOP LOOP1MOV AX,4CHINT 21HCODE ENDSEND START实验三:子程序调用程序设计DA TA SEGMENTNUM DB 85,77,126,-1,-43,37,-128,11,-19,13 DA TA ENDSADDITION SEGMENTNUM1 DB 10 DUP(?)ADDITION ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,ES:ADDITION START:AX,DATAMOV DS,AXMOV AX,ADDITIONMOV ES,AXCALL ORDERCALL COPYMOV AH,4CHINT 21HORDER PROCMOV CX,9MOV DX,CXLP1:MOV AL,NUM[BX]CMP AL,NUM[BX+1]JLE NEXTXCHG AL,NUM[BX+1]MOV NUM[BX],ALNEXT:ADD BX,1DEC DXJNZ LP1LOOP LP2RETORDER ENDPCOPY PROCMOV CX,10MOV BX,0LP:MOV AL,NUM[BX]MOV ES:NUM1[BX],ALINC BXLOOP LPRETCOPY ENDPCODE ENDSEND START实验四:DOS功能系统调用1.DA TA SEGMENTDUF DB 10 DUP(?)DA TA ENDSSTACK SEGMENTSA DB 100 DUP(?)TOP LABEL WORDSTACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACK START:MOV AX,STACKMOV SS,AXMOV SP,OFFSET TOPPUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV CX,05HS1:MOV AH,1INT 21HPUSH AXLOOP S1MOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21HMOV CX,05HMOV BX,4S2:POP AXMOV DUF[BX],ALDEC BXLOOP S2MOV BX,0MOV CX,05HS3:MOV DL,DUF[BX]INC BXMOV AH,2INT 21HLOOP3INC ALMOV AH,4CHINT 21HCODE ENDSEND START2.DA TA SEGMENTBUFF DB 50DB ‘?’LETTER DB 50 DUP(‘?’)DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA START:MOV AX,DATAMOV DS,AXLEA DX,BUFFMOV AH,0AHINT 21HMOV DL,0DHMOV AH,02HMOV DL,OAHMOV AH,02HINT 21HLEA DX,LETTERMOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START第五次实验:接口预备知识DA TA SEGMENTOUTBUF DB’5’,’4’,’3’,’2’,’1’COUNT EQU $-COUNTDA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA START:MOV AX,DATAMOV DS,AXMOV SI,OFFSET OUTBUF MOV DI,COUNTNEXT:MOV DL,[SI]MOV AH,02HINT 21HCALL DELAYINC SIDEC DIJNZ NEXTMOV AH,4CHINT 21HDELAY PROC NEARPUSH CXMOV BX,299HFOR1:MOV CX,0FFFFHFOR2:LOOP FOR2DEC BXJNZ FOR1POP CXRETDELAY ENDPCODE ENDSEND START第六次实验:简单的输出接口1.CODE SEGMENT ASSUME CS:CODE start:mov di ,2l1:mov al ,02hmov dx,280hout dx,alcall delaymov al ,00hmov dx,280hout dx,alcall delaymov si,3l2:mov al,04hmov dx,280hout dx,alcall delaymov al,00hmov dx,280hout dx,alcall delaydec sijnz l2mov al,08hmov dx,280hout dx,alcall delaymov al ,00hmov dx,280hout dx,alcall delaydec dijnz l1MOV AH,4CHINT 21HDELAY PROC NEAR PUSH CXMOV BX,100HFOR1:MOV CX,0FFFFH FOR2:LOOP FOR2 DEC BXJNZ FOR1POP CXRETDELAY ENDPCODE ENDSEND START2.CODE SEGMENT ASSUME CS:CODE START:MOV CX,2AA:MOV BX,8PUSH CXMOV DX,280HMOV AL,01HBB:OUT DX,ALCALL DELAYMOV DX,280HROl AL,1OUT DX,ALDEC BXJNZ BBPOP CXMOV DX,280Hmov AL,00hOUT DX,ALLOOP AAMOV AH,4CHINT 21HDELAY PROC NEAR PUSH BXPUSH CXMOV BX,299HFOR:MOV CX,0FFFFH FOR1:LOOP FOR1DEC BXJNZ FORPOP CXPOP BXRETDELAY ENDPCODE ENDSEND START第七次实验:简单的输入接口1.data segmentx db'end$'data endscode segmentassume cs:code,ds:data start:mov ax,datamov ds,axmov cx,6mov dl,31hlp: push dxmov dx,280hin al,dxand al,10hmov bl,allp1: in al,dxand al,10hcmp bl,aljz lp1mov dl,0ahmov ah,02hint 21hmov dl,0dhint 21hpop dxint 21hinc dxloop lpmov dl,0ahint 21hmov dl,0dhint 21hmov dx,offset xmov ah,09hint 21hmov ah,4chint 21hcode endsend start2.data segmentx db'end$'data endscode segmentassume cs:code,ds:data start:mov ax,datamov ds,axmov cx,6mov dl,31hlp: push dxmov dx,280hin al,dxpush cxmov cx,2lp1: and al,10hmov bl,allp2: in al,dxand al,10hcmp bl,aljz lp2loop lp1pop cxmov dl,0ahmov ah,02hint 21hmov dl,0dhint 21hpop dxint 21hinc dxloop lpmov dl,0ahint 21hmov dl,0dhint 21hmov dx,offset xmov ah,09hint 21hmov ah,4chint 21hcode endsend start第八次实验:数码管动态显示实验1.CODE SEGMENTASSUME CS:CODE START:MOV CX,03FFHL1: MOV DX,280HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,76H ;HOUT DX,ALMOV DX,282HMOV AL,02HOUT DX,ALCALL DONGMOV DX,282HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,73H;POUT DX,ALMOV DX,280HMOV AL,01HOUT DX,ALCALL DONGLOOP L1MOV DX,280HMOV AL,00HOUT DX,ALMOV AH,4CHINT 21HDONG PROC NEARPUSH CXPUSH BXMOV BX,0100H FOR1: MOV CX,0100H FOR2: LOOP FOR2DEC BXJNZ FOR1POP BXPOP CXRETDONG ENDPCODE ENDSEND START2.CODE SEGMENTASSUME CS:CODE START:MOV CX,01FFHL1: MOV DX,280HMOV AL,00HOUT DX,ALMOV AL,3FH ;0OUT DX,ALMOV DX,282HMOV AL,02HOUT DX,ALCALL DONGMOV DX,282HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,06H;1OUT DX,ALMOV DX,280HMOV AL,01HOUT DX,ALCALL DONGLOOP L1MOV CX,01FFHL2: MOV DX,280HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,5BH ;2OUT DX,ALMOV DX,282HMOV AL,02HOUT DX,ALCALL DONGMOV DX,282HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,4FH;3OUT DX,ALMOV DX,280HMOV AL,01HOUT DX,ALCALL DONGLOOP L2MOV CX,010FHL3: MOV DX,280HMOV AL,00HOUT DX,ALMOV AL,66H ;4OUT DX,ALMOV DX,282HMOV AL,02HOUT DX,ALCALL DONGMOV DX,282HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,6DH;5OUT DX,ALMOV DX,280HMOV AL,01HOUT DX,ALCALL DONGLOOP L3MOV CX,010FHL4: MOV DX,280HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,7DH ;6OUT DX,ALMOV DX,282HMOV AL,02HOUT DX,ALCALL DONGMOV DX,282HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,07H;7OUT DX,ALMOV DX,280HMOV AL,01HOUT DX,ALCALL DONGLOOP L4MOV CX,010FHL5: MOV DX,280HMOV AL,00HMOV DX,290HMOV AL,7FH ;8OUT DX,ALMOV DX,282HMOV AL,02HOUT DX,ALCALL DONGMOV DX,282HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,6FH;9OUT DX,ALMOV DX,280HMOV AL,01HOUT DX,ALCALL DONGLOOP L5MOV DX,280HMOV AL,00HOUT DX,ALMOV AH,4CHINT 21HDONG PROC NEARPUSH CXPUSH BXMOV BX,0100HFOR1: MOV CX,0100HFOR2: LOOP FOR2DEC BXJNZ FOR1POP BXPOP CXRETDONG ENDPCODE ENDSEND START第九次实验:可编程并行接口8255实验1.code segmentassume cs:codestart:mov dx,283hmov al,90hout dx,almov dx,280hin al,dxand al,01hcmp al,01Hmov cx,3mov dx,281hjnz l2l1:mov al,01hout dx,alcall delaymov al,02hout dx,alcall delaymov al,04hout dx,alcall delaymov al,08hout dx,alcall delayloop l1mov al,00hout dx,aljmp l3l2:mov al,0f0hout dx,alcall delaymov al,000hout dx,alcall delayloop l2mov al,00hout dx,all3:mov ah,4chint 21hdelay proc nearPUSH CXPUSH BXMOV BX,0200H FOR3:MOV CX,0FFFFH FOR4:LOOP FOR4DEC BXJNZ FOR3POP BXPOP CXRETdelay endpcoed endsend start2.CODE SEGMENTASSUME CS:CODESTART:MOV AL,10110100BMOV DX,283HOUT DX,ALL1: MOV DX,282H ;C口端口号,检验C口的pc4是否为高电平,高电平则输入IN AL,DXAND AL,20HJZ L1MOV DX,280H ; A口端口号,读入数据IN AL,DXCALL DELAYMOV DX,281H ; B口端口号,输出至A口OUT DX,ALL2: MOV DX,282HIN AL,DXAND AL,02H ; 判断输出缓冲器是否满,满就等待,不满程序结束JZ L2JMP L3LOOP STARTL3:MOV AL,00MOV DX,280HOUT DX,ALMOV AH,4CHINT 21HDELAY PROC NEARPUSH CXMOV BX,0f00HFOR1:MOV CX,0FFFFHFOR2:LOOP FOR2DEC BXJNZ FOR1POP CXRETDELAY ENDPCODE ENDSEND START实验十:可编程计数器/定时器8253实验1.CODE SEGMENTASSUME CS:CODESTART:mov dx,283hmov al,10hout dx,almov dx,280hmov al,04hout dx,alcall delaymov dx,280hin al,dxmov dl,aladd dl,30hmov ah,2int 21h;jmp startmov ah,4chint 21hdelay proc nearpush cxmov bx,1000hfor1:mov cx,0ffffhfor2:loop for2dec bxjnz for1pop cxretdelay endsend startcode ends2.CODE SEGMENTASSUME CS:CODESTART:mov al,52hout dx,almov dx,281hmov al,05hout dx,almov ah,4chint 21hend startcode ends实验十一:DATA SEGMENTABC DB'ARE YOU READY?',0DH,0AH,'$'CCC DB'IRQ10 INTERRUPT NOW !',0DH,0AH,'$' DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART:MOVAX,CSMOVDS,AXMOVDX,OFFSET ZD10MOVAX,2572HINT 21HCLIIN AL,21HAND AL,0FBHOUT 21H,ALIN AL,0A1HAND AL,0FBHOUT 0A1H,ALSTIMOVCX,20LOOP1: PUSHCXMOVAX,DATAMOVDS,AXLEA DX,ABCMOVAH,9INT 21HCALL DELAYPOP CXLOOP LOOP1MOVDX,21HIN AL,DXOR AL,4MOVDX,0A1HIN AL,DXOR AL,4OUT 0A1H,ALMOVAH,4CHINT 21HZD10 PROC NEAR PUSHAXPUSHBXPUSHCXPUSHDXMOVCX,5AGAIN:PUSHCXLEA DX,CCCMOVAH,9INT 21HCALL DELAYPOP CXLOOP AGAINPOP DXPOP CXPOP BXPOP AXMOVAL,20HOUT 20H,ALMOVAL,20HOUT 0A0H,ALIRETZD10 ENDPDELAY PROC NEAR MOVBX,02FFHFOR1: MOVCX,0FFFFH FOR2: LOOP FOR2DEC BXJNZ FOR1RETDELAY ENDPCODE ENDSEND START2、DATA SEGMENTABC DB'ARE YOU READY?',0DH,0AH,'$' DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOVAX,CSMOVDS,AXMOVDX,OFFSET ZD10MOVAX,2572HINT 21HCLIIN AL,21HAND AL,0FBHOUT 21H,ALIN AL,0A1HAND AL,0FBHOUT 0A1H,ALSTIMOVCX,20LOOP1: PUSHCXMOVAX,DATAMOVDS,AXLEA DX,ABCMOVAH,9INT 21HCALL DELAYPOP CXLOOP LOOP1MOVDX,21HIN AL,DXOR AL,4OUT 21H,ALMOVDX,0A1HIN AL,DXOR AL,4OUT 0A1H,ALMOVAH,4CHINT 21HZD10 PROC NEARPUSHAXPUSHBXPUSHCXPUSHDXMOVCX,3AGAIN: PUSHCXMOVDX,280HMOVAL,0FHOUT DX,ALCALL DELAYMOVDX,280HMOVAL,00HOUT DX,ALCALL DELAYPOP CXLOOP AGAINPOP DXPOP CXPOP BXPOP AXMOVAL,20HOUT 20H,ALMOVAL,20HOUT 0A0H,ALIRETZD10 ENDPDELAY PROC NEAR MOVBX,02FFHFOR1: MOVCX,0FFFFH FOR2: LOOP FOR2DEC BXJNZ FOR1RETDELAY ENDPCODE ENDSEND START。