微机原理程序
- 格式:pdf
- 大小:29.11 KB
- 文档页数:20
微机原理及程序设计微机原理及程序设计是一门结合了计算机硬件基础和软件编程技能的课程,它对于理解现代计算机系统的工作方式至关重要。
本课程旨在教授学生微机的基本组成原理、指令系统、存储结构以及程序设计的基本方法。
微机原理概述微机,即微型计算机,是一种体积小、价格低廉、功能相对单一的计算机系统。
它们广泛应用于个人计算、嵌入式系统、工业控制等领域。
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个无符号数,统计有多少个正数,多少个负数。
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二、设计内容···································1三、设计要求···································1四、主要仪器设备及软件·························2五、设计原理···································2六、程序流程图·································3七、程序代码···································3八、程序及硬件系统调试情况·····················9九、设计总结与体会·····························11十、参考文献···································12一、设计目的1)、课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节。
微机原理求最大值最小值程序求最大值和最小值的程序可以通过比较输入的数值来实现。
以下是一个简单的微机原理程序示例:ORG 100H ; 程序起始地址。
MOV CX, 5 ; 循环计数器,假设要比较5个数。
MOV AH, 01H ; 输入操作的功能码。
; 初始化最大值和最小值。
MOV BX, 0 ; BX 寄存器存储最大值。
MOV DX, 0FFFFH ; DX 寄存器存储最小值。
LOOP_START:INT 21H ; 调用DOS中断21H读取一个字符。
SUB AL, 30H ; 将字符转换为数字。
; 比较当前输入的数值和最大值。
CMP AL, BL.JLE CHECK_MIN.MOV BL, AL ; 更新最大值。
CHECK_MIN:; 比较当前输入的数值和最小值。
CMP AL, DL.JGE LOOP_END.MOV DL, AL ; 更新最小值。
LOOP_END:LOOP LOOP_START.; 输出最大值和最小值。
MOV AH, 02H ; 输出操作的功能码。
MOV DL, BL ; 输出最大值。
ADD DL, 30H ; 将数字转换为字符。
INT 21H.MOV DL, ' ' ; 输出一个空格。
INT 21H.MOV DL, DL ; 输出最小值。
ADD DL, 30H ; 将数字转换为字符。
INT 21H.MOV AH, 4CH ; 程序结束的功能码。
INT 21H.END ; 程序结束。
以上程序使用DOS中断21H来进行输入和输出操作。
通过循环比较输入的数值,更新最大值和最小值,并最后输出它们。
请注意,这只是一个简单的示例程序,实际应用中可能需要根据具体需求进行修改和扩展。
实验二:循环程序设计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。