微机原理实验代码与截图
华南理工大学微机与接口实验报告(四实验,题目原理流程图代码截图完整版)
微机原理实验报告班 级:2012级电子科学与技术卓工班级电子科学与技术卓工班姓 名: 黄中一黄中一 学 号: 201236460273序 号:评阅分数:评阅分数:实验一一、实验目的1、学会如何建立汇编源文件ASM2、学会调用MASM 宏汇编程序对源文件进行汇编,获得目标程序宏汇编程序对源文件进行汇编,获得目标程序 OBJ 及LST 列表文件列表文件3、学会调用LINK 连接程序汇编后的目标文件OBJ 连接成可执行的文件连接成可执行的文件EXE 4、学会使用DEBUG 调试程序把可执行文件装入内存并调试运行,用D 命令显示目标程序,用U 命令对可执行文件反汇编,用G 命令运行调试。
命令运行调试。
二、实验设备装有MASM 软件的IBM PC 机三、实验内容1、汇编程序对源程序进行编译,生成扩展名为OBJ 的目标文件;连接程序是将目标程序和库文件进行连接、定位,生成扩展名为EXE 的可执行文件;调试程序是对目标文件进行调试,验证它的正确性。
是对目标文件进行调试,验证它的正确性。
2、DEBUG 程序各种命令的使用方法程序各种命令的使用方法功能功能命令格式命令格式 使用说明使用说明显示内存单元内容显示内存单元内容D 地址地址从指定地址开始显示40H 个字节或80H 个字节个字节 修改内存单元内容修改内存单元内容 E 地址地址先显示地址和单元内容等待输入修改的内容输入修改的内容检查和修改寄检查和修改寄存器的内容存器的内容R 显示全部寄存器和标志位及下条指令单元十六进制数码和反汇编格式和反汇编格式反汇编反汇编U 地址地址从指定地址开始反汇编16个或32个字节个字节 汇编汇编 A 地址地址从指定地址直接输入语句并从指定指定汇编装入内存从指定指定汇编装入内存跟踪跟踪 T =地址=地址 从指定地址开始逐条跟踪指令运行运行 G =地址=地址无断点,执行正在调试的指令执行正在调试的指令 退出退出Q退出DEBUG 返回DOS3、实验过程①、在edit 环境,写字板,记事本等中输入源程序。
微机原理程序代码
微机原理程序代码微机原理⼤作业题⽬及程序代码1、将AX寄存器中16位数分成4组,每组四位,然后把这四位数分别放在AL、BL、CL和DL中。
code segmentassume cs:codestart: mov ax,1234h;测试数据mov cl,4mov dx,axand dl,0fhand dh,0fhmov bl,dhmov bh,alror bh,cland bh,0fhmov ch,bhror ah,cland ah,0fhmov al,ahmov cl,chmov ah,4chint 21hcode endsend start1、试编写⼀程序,要求⽐较两个字符串STRING1和STRING2所含字符是否相同,若相同则显⽰“MATCH”,若不相同则显⽰“NOMATCH”。
DATA SEGMENTSTRING1 DB 'HELLO.'C1 EQU $-STRING1STRING2 DB 'HELLO!'C2 EQU $-STRING2S1 DB 'MATCH$'S2 DB 'NOMATCH$'ASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV SI,C1CMP SI,C2JNZ N_MMOV BX,0L1: MOV AL,STRING1[BX]CMP AL,STRING2[BX]JNZ N_MINC BXDEC SIJNZ L1MOV DX,OFFSET S1JMP EXITN_M: MOV DX,OFFSET S2EXIT: MOV AH,9INT 21HMOV AH,4CHINT 21HCODE ENDSEND START2、试编写⼀程序,要求能从键盘接收⼀个个位数N,然后响铃N 次。
CODE SEGMENTASSUME CS:CODESTART: ;MOV DL,7;MOV AH,2;INT 21HMOV AH,1INT 21HCMP AL,30HJBE EXITMOV CL,ALL1: MOV DL,07HMOV AH,2INT 21HMOV BX,1FFFH;延时L3: MOV DX,0FFFFHL2: DEC DXJNZ L2DEC BXJNZ L3DEC CLJNZ L1EXIT: MOV AH,4CHINT 21HCODE ENDSEND START3、编写程序,将⼀个包含有20个数据的数组M分成两个数组:正数数组P和负数数组N,并分别把这两个数组中数据的个数显⽰出来。
西南交大微机原理实验代码与截图(ALL)
2-1DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV SI,3500H ;设置待转换数据区的地址指针MOV DI,3510H ;设置结果数据区的地址指针MOV BX,000AH ;乘数10MOV CX,0004H ;循环4 次MOV AH,00HMOV AL,[SI] ;取第一位ASCⅡ码SUB AL,30H ;转换成二进制数A1:IMUL BX ;乘10ADD AL,[SI+01] ;加次位SUB AL,30HINC SI ;修改地址指针LOOP A1 ;循环MOV [DI],AX ;保存结果INT 3H;此处输入代码段代码MOV AH,4CHINT 21HCODES ENDSEND START2-2DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV CX,0005H ;循环计数器赋初值MOV DI,3500H ;ASCⅡ码首址A1:MOV BL,0FFH ;将错误标志送入BLMOV AL,[DI] ;送ASCⅡ码至ALCMP AL,3AH ;比较AL 与3AJNB A2 ;不低于3A 则转A2SUB AL,30H ;低于3A 则取ASCⅡ码低4 位 JB A2 ;低于30 则转A2MOV BL,AL ;否则AL 内容送入BL,取代FF A2:MOV AL,BL ;结果或错误标志送入ALMOV [DI+0AH],ALINC DILOOP A1INT 3HCODES ENDSEND START2-5DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,0B07HMOV DS,AXMOV DI,3000HMOV DX,9111HMOV CX,2222HTEST DH,80HJZ LPXOR DX,7FFFHNOT CXADC CX,1ADC DX,0LP:MOV [DI],CLMOV [DI+1],CHMOV [DI+2],DLMOV [DI+3],DHINT 3INT 3HCODES ENDSEND START3DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV CX,10HMOV SI,3000HMOV DI,3010HCMP SI,DIJA A2ADD SI,CXADD DI,CXDEC SIDEC DIA1:MOV AL,[SI]MOV [DI],ALDEC SIDEC DIDEC CXJNE A1JE A3A2:MOV AL,[SI]MOV [DI],ALINC SIINC DIDEC CXJNE A2A3:INT 3HCODES ENDSEND START4-1DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV DX,01HMOV BL,02HA1:MOV AL,BLINC BLMUL BLADD DX,AXCMP AX,0C8HJBE A1INT 3HCODES ENDSEND START4-2DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV DI,3000HMOV CX,[DI]MOV CH,00HMOV BL,00HINC DIA1:MOV AX,[DI]CMP AX,0000HJGE A2INC BLA2:INC DILOOP A1MOV [DI],BLINT 3HCODES ENDSEND START5-1DATAS SEGMENTAA DB 0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9H;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAS,SS:STACKS SUB1 PROC NEARCMP CX,0JE A4DEC CXMOV BH,[SI]MOV BL,BHA1:INC SIMOV AL,[SI]CMP AL,BHJAE A2CMP AL,BLJBE A3JMP A4A2:MOV BH,ALJMP A4A3:MOV BL,ALA4:LOOP A1RETSUB1 ENDPSTART:MOV AX,DATASMOV DS,AXMOV SI,OFFSET AAMOV CX,0008HCALL NEAR PTR SUB1MOV AH,BHMOV AL,BLINT 3CODE ENDSEND START实验6DATAS SEGMENTORG 3000HVAR DB 11H,0d3H,77H,6bH,0BH,33H,0aaH,21H,0ffH,67H ;此处输入数据段代码DATAS ENDSSTACKS SEGMENTDW 100 DUP(?);此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV CX,000AHMOV SI,300AHMOV BL,0FFHA1: CMP BL,0FFHJNE A4MOV BL,00HDEC CXCMP CX,0JE A4PUSH SIPUSH CXA2: DEC SIMOV AL,[SI]MOV DL,[SI-1]CMP AL,DLJA A3MOV [SI-1],ALMOV [SI],DLMOV BL,0FFHA3: LOOP A2POP CXPOP SIJMP A1A4: INT 3;此处输入代码段代码MOV AH,4CHINT 21HCODES ENDSEND START实验七DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTSTART:MOV AL,0MOV BH,0AH ;表示前景、背景颜色MOV AH,6HMOV CX,0MOV DH,24MOV DL,79INT 10H ;清屏幕MOV AH,2MOV BH,0MOV DH,10HMOV DL,10HINT 10H ;光标设置在第10行第10列MOV CX,001AH ;共26个字母,所以循环次数为26MOV DL,'Z'LP:MOV AL,DLMOV BH,0MOV BL,2FH ;设置显示的A到Z的底色和字色MOV AH,9INT 10HDEC DLLOOP LPINT 3CODES ENDSEND START实验八.486pd8255 macro port,data1mov dx,portmov eax,data1out dx,eaxnopnopendmdata segment at 0 use16org1*4v1 dw 2 dup(?)org2*4v2 dw 2 dup(?)org3*4v3 dw 2 dup(?)org1000httt db?stackp equ2000hP255CW equ20CHP255A equ200HP255B equ204HP255C equ208Hdata endscode segment use16assume cs:code,ds:data,ss:dataorg1100hstart: nopmov ax,0mov ds,axmov ss,axmov sp,stackpiniti: mov eax,60000000hmov cr0,eaxmov ax,datamov ds,axmov ss,axmov sp,stackpmov cx,1000i0: dec cxjnz i0d8255 P255CW,80808080hi1: d8255 P255A,0c099c099hd8255 P255B,0c0c0c0c0h ;40004000 d8255 P255C,0fafafafah ;绿call del1d8255 P255C,0f5f5f5f5h ;红call del1d8255 P255C,0f0f0f0f0h ;黄call del1d8255 P255C,0ffffffffh ;灭call del1d8255 P255A,8ef8c0c0hd8255 P255B,8E8ec0c0h ;00007FFFd8255 P255C,0fafafafahcall del1d8255 P255C,0f5f5f5f5hcall del1d8255 P255C,0f0f0f0f0hcall del1d8255 P255C,0ffffffffhcall del1mov ax,4000hmov es,axmov eax,0chk: mov bx,0000h ;从4000:0000单元开始写mov es:[bx],eaxmov dx,P255Aout dx,eaxnopnopmov dx,P255Bout dx,eaxnopnoppush eax ;写入的数据入栈mov eax,0fafafafahmov dx,P255C ;绿色out dx,eaxcall del1pop eax ;出栈chk1: add bx,4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;cmp bx,8000hjz chk2 ;写满8000H个内存单元mov es:[bx],eaxjmp chk1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;chk2: mov bx,0fffchchk3: add bx,4cmp bx,8000hjz chk0cmp eax,es:[bx] ;把每个单元的数据读出与写入的jz chk3mov ecx,eax ;数据比较,是否正确mov eax,0f5f5f5f5hmov dx,P255C ;不正确,颜色变成红色out dx,eaxmov eax,ecxcall del1 ;延时chk0: add eax,01010101h ;;;;;;;;;;;;;;;;;;;;;;;;;;;cmp eax,0ffffffffh ;下一个写入的数据jz chk4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;jmp chkchk4: jmp i1del1 proc ;延时mov ecx,8ffffhi2: dec ecxjnz i2retendpcode endsend start实验10.1:(以key为原本改进).486DA TA SEGMENT AT 0 USE16ORG 1000HDA TA ENDSCODE SEGMENT USE16ASSUME CS:CODEORG 3000HBEG: JMP STARTTAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FHDPORT1 EQU 360HDPORT2 EQU 380HNUM DB 0001HCOUNT DD 00000FFFFH START: MOV AX,DA TAMOV DS,AXMOV CL,5KK: MOV AL,CLMOV BX,OFFSET TAB XLAT TABMOV DX,DPORT2OUT DX,ALNOPMOV DX,DPORT1MOV AL,NUMOUT DX,ALNOPNOPROL NUM,1MOV COUNT,00000FFFFH DELAY:NOPDEC COUNTJNZ DELAYJMP KKCODE ENDSEND BEG实验10.2使显示20115158.486DA TA SEGMENT AT 0 USE16ORG 2000HBUF D D ?COUNT DB ?DB ?DA TA ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATAORG 01000HBEG: JMP STARTTAB1 DB 0A4H,0F9H,92H,92HTAB2 DB 0C0H,0F9H,0F9H,80HRG DD 050A050AHGR DD 0A050A05HRY DD 05000500HYR DD 00050005HRRRR DD 05050505HRGYR DD 050A0005H START: MOV AX,DA TAMOV DS,AXMOV DX,20CHMOV EAX,80808080HOUT DX,EAXNOPNOPL1:MOV DX,200HMOV EAX,DWORD PTR TAB1OUT DX,EAXMOV BP,200L2: DEC BPJNZ L2MOV DX,204HMOV EAX,DWORD PTR TAB2OUT DX,EAXMOV BP,200L3: DEC BPJNZ L3MOV DX,208HMOV EAX,RGYROUT DX,EAXMOV BP,200L4: DEC BPJNZ L4HLTJMP L1CODE ENDSEND BEG三连实验9;i8259.asm.486DA TA SEGMENT USE16 AT 0ORG 40H*4V40H DW ?,? ;保存中断向量的变量OPORT EQU 3A0H ;8259的偶地址JPORT EQU 3A8H ;8259的奇地址TR8255 EQU 20CH ;8255控制口地址A8255 EQU 200H ;8255A口地址B8255 EQU 204H ;8255B口地址C8255 EQU 208H ;8255C口地址ORG 1000HMM DD ?DA TA ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DA TAORG 2000HBEG: CLIJMP STARTSTART: MOV AX,DA TAMOV DS,AXMOV AX,0MOV SS,AXMOV SP,1000HMOV MM,0F5F5F5F5HMOV AL,80H ;初始化8255MOV DX,TR8255OUT DX,ALMOV AL,99HMOV DX,A8255OUT DX,ALMOV AL,5MOV DX,C8255OUT DX,ALCALL WRITEVERLLL: MOV AL,00010011B ;写ICW1MOV DX,OPORTOUT DX,ALNOPNOPMOV AL,01000000B ;写ICW2MOV DX,JPORTOUT DX,ALNOPNOPMOV AL,00000001B ;写ICW4MOV DX,JPORTOUT DX,ALNOPNOPMOV AL,11111100B ;写IMRMOV DX,JPORTOUT DX,ALSTI;---------------------------------------LL: MOV SI,1 ;等待中断LL1: MOV CX,10000LL2: NOPLOOP LL2DEC SIJNZ LL1NOPNOPNOPNOPNOPNOPNOPNOPNOPJMP LL;--------------------------------------WRITEVER PROC ;写中断向量PUSHAMOV BX, OFFSET SERVERMOV V40H,BXMOV AX,CSMOV V40H+2,AXPOPARETWRITEVER ENDP;-------------------------------------SERVER PROC ;中断服务程序,显示-SUCCESS MOV EAX,92C6C1BFHMOV DX,A8255OUT DX,EAXMOV EAX,9286C692HMOV DX,B8255OUT DX,EAXMOV EAX,MMMOV DX,C8255OUT DX,EAXNOT EAXMOV MM,EAXMOV AL,20HMOV DX,OPORTOUT DX,ALIRETSERVER ENDP;-------------------------------------CODE ENDSEND BEG实验11.486CODE SEGMENT USE16A SSUME CS:CODEO RG 1000HBEG: J MP STARTCCONPORT E QU 30CHCCONBIT1 EQU 00010110BCCONBIT2 EQU 01010100BCCONBIT3 EQU 10010110BCDPORT1 EQU 300HCDPORT2 EQU 304HCDPORT3 EQU 308HCHDBIT1 EQU 08HCHDBIT2 EQU 04HSTART: N OP ;启动延时NOPMOV DX,CCONPORT ;写入控制字MOV AL,CCONBIT1O UT DX,ALNOPNOPMOV DX,CDPORT1 ;写入初值MOV AL,CHDBIT1OUT DX,ALNOPNOPMOV DX,CCONPORT ;写入控制字MOV AL,CCONBIT2OUT DX,ALNOPNOPMOV DX,CDPORT2 ;写入初值MOV AL,CHDBIT1OUT DX,ALNOPNOPWT1: M OV DX,CCONPORT ;写入控制字M OV AL,CCONBIT3O UT DX,ALNOPNOPMOV DX,CDPORT3 ;写入初值MOV AL,CHDBIT2OUT DX,ALWT: NOPJMP WTCODE ENDSEND BEG实验13.486DA TA SEGMENT AT 0 USE16 ORG 1000HMM DB ?DA TA ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATAORG 2000HBEG: JMP STARTTAB DB 0C0H,0F9HLENS EQU $-TABC8251 EQU 330HD8251 EQU 320H CCONPORT EQU 30CHCCONBIT1 EQU 00010110B CCONBIT2 EQU 01010110B CCONBIT3 EQU 10010110B CDPORT1 EQU 300H CDPORT2 EQU 304H CDPORT3 EQU 308H CHDBIT1 EQU 9CHCHDBIT2 EQU 9CHC8255 EQU 20CHA8255 EQU 200HB8255 EQU 204HSTART: MOV AX,DA TAMOV DS,AXCALL I8254CALL I8251MOV DX,C8251IN AL,DXCALL I8255AGAIN: MOV MM,05HMOV CL,LENSMOV BX,OFFSET TABTSCAN: MOV DX,A8255MOV EAX,0FFFFFFFFHOUT DX,EAXMOV DX,B8255OUT DX,EAXMOV DX,C8251IN AL,DXTEST AL,01HJZ TSCANSEND: MOV AL,[BX]MOV DX,D8251OUT DX,ALMOV SI,0RSCAN: MOV DX,C8251IN AL,DXTEST AL,02HJNZ RECIEVEDEC SIJNZ RSCANJMP NEXTRECIEVE: MOV DX,D8251 IN AL,DXMOV DX,A8255OUT DX,ALMOV DX,B8255OUT DX,ALMOV AL,MMNOT ALMOV DX,208HOUT DX,ALMOV MM,ALMOV BP,1000HDELAY: NOPDEC BPJNZ DELAYINC BXDEC CLJNZ TSCANJMP AGAINNEXT: MOV EAX,88F9A4BFH MOV DX,A8255OUT DX,EAXMOV EAX,0A1839280HMOV DX,B8255OUT DX,EAXJMP AGAINI8254 PROCNOPNOPNOPNOPNOPNOPNOPNOPMOV DX,CCONPORTMOV AL,CCONBIT1OUT DX,ALNOPNOPMOV DX,CDPORT1MOV AL,CHDBIT1OUT DX,ALNOPNOPMOV DX,CCONPORTMOV AL,CCONBIT3OUT DX,ALNOPNOPMOV DX,CDPORT3MOV AL,CHDBIT2OUT DX,ALNOPNOPWT1: MOV DX,CCONPORT MOV AL,CCONBIT2OUT DX,ALNOPNOPMOV DX,CDPORT2MOV AL,CHDBIT2OUT DX,ALRETI8254 ENDPI8251 PROCMOV CX,3AGA: MOV AL,0MOV DX,C8251OUT DX,ALLOOP AGAMOV BP,5HD1: DEC BPJNZ D1MOV AL,40HOUT DX,ALMOV BP,5HD2: DEC BP JNZ D2MOV AL,4EHOUT DX,ALMOV BP,5HD3: DEC BP JNZ D3MOV AL,15HOUT DX,ALRETI8251 ENDPI8255 PROCMOV DX,C8255MOV EAX,80808080HOUT DX,EAXRETI8255 ENDPCODE ENDSEND BEG。
北京理工大学微机原理实验报告四
本科实验报告实验名称:A/D和D/A转换课程名称:实验时间:任课教师:实验地点:实验教师:实验类型:□原理验证■综合设计□自主创新学生姓名:学号/班级:组号:学院:同组搭档:专业:成绩:实验四 A/D和D/A转换一、实验目的1、了解A/D 转换的基本原理,掌握ADC0809 的使用方法。
2、了解D/A 转换的基本原理,掌握DAC0832 芯片的使用方法。
3、了解直流电机控制的基本方法。
二、实验内容与步骤(一)A/D 转换部分1、接线:2、实验电路原理图下图通过实验台左下角电位器RW1 输出0~5V直流电压送入ADC0809 通道0(IN0),利用debug 的输出命令启动A/D转换器,输入命令读取转换结果,验证输入电压与转换后数字的关系。
启动IN0开始转换: Out 298H读取转换结果: In 298H3、用万用表测量CLOCK、ADD-C、ADD-B、ADD-A 在实验系统上如何联系的。
4、编程按中断方式采集IN0 输入的电压,在屏幕上显示出转换后的数据(用16 进制数)。
5、考虑如果采用IN7 输入的电压,启动开始转换和读取转换结果的地址应该是多少。
6、按查询方式采集IN0 输入的电压,软硬件如何实现。
编程方案1、ADC0809 的IN0 口地址为298H。
2、IN0 单极性输入电压与转换后数字的关系为:其中Ui 为输入电压,UREF 为参考电压,这里的参考电压为+5V电源。
3、一次A/D 转换的程序可以为MOV DX, PortOUT DX,AL ;启动转换;延时IN AL,DX ;读取转换结果放在AL 中(二) D/A 转换部分1、接线:CS /0832 接 Y2 /IO 地址用万用表测量 WR2 和XFER 在实验系统上如何联系的。
2、实验电路原理如图2,DAC0832 采用单缓冲方式,具有单双极性输出端(图中的Ua、Ub),利用debug 输出命令(Out 290 数据)输出数据给DAC0832,用万用表测量单极性输出端Ua 及双极性输出端Ub 的电压,验证数字与电压之间的线性关系。
微机原理上机实验(三+五)实验报告 简单IO(16位)实验 8255控制交通灯信号实验
微机原理上机实验(三+五)实验报告实验三:简单I/O(16位)实验一、实验目的1、了解外设的扩展方法,掌握外设的读写时序。
2、了解74HC273、74HC244的功能,掌握它们的使用方法。
3、掌握CPU对16位外设的访问方法4、认真预习本节实验内容,尝试自行编写程序,填写实验报告。
二、实验内容1、说明:二片74HC244组成16位的只读外设,二片74HC273组成16位的只写外设,它们都可以按字节或字方式操作。
实验仪具有16位数据总线D0..D15、BLE(低电平有效,选中挂在低8位数据总线上外设)、BHE(低电平有效,选中挂在高8位数据总线上外设);BLE、BHE同时有效,对外设字方式读写,BLE或BHE有效,对外设字节方式读写。
二片74HC273的输出端与F4区的16个发光二极管相连;低位74HC244的输入端与F4区的8个拨动开关相连,8个拨动开关循环左移一位后与高位74HC244的输入端相连。
2、编写程序:将B4区的二片74HC244中数据读出、写入二片74HC273中;然后逐一点亮挂在74HC273上的16个发光二级管;循环执行3、连接线路验证功能,熟悉它的使用方法。
三、实验代码IO244 EQU 0230H ;244(16位)片选信号IO273 EQU 0230H ;273(16位)片选信号_STACK SEGMENT STACKDW 100 DUP(?)_STACK ENDS_DATA SEGMENT WORD PUBLIC'DATA'_DATA ENDSCODE SEGMENTSTART PROC NEARASSUME CS:CODE, DS:_DATA, SS:_STACKMOV MOV AX,_DATA DS,AXMOV DX,IO244 ;选定244IN AX,DX ;从244读取开关数据(16位,K0 K7K6 K5 K4 K3 K2 K1 K7 K6 K5 K4K3 K2 K1 K0)MOV DX,IO273OUT DX,AX ;将244的开关数据传输至273的对应接口CALL Delay 调用Delay程序CALL DelayCALL DelayCALL DelayCALL DelayCALL DelayMOV DX,IO273MOV AX,0FFFEHSTART1: OUT DX,AX ;将273的K0置0,其余端口置1CALL DelayTEST AX,8000H ;检查AX的D15位是否为1JZ START ;若AX的D15位为1,则转向START程序ROL AX,1 ;将AX循环左移一位JMP START1 ;循环执行START1Delay PROC NEAR ;延时Delay1: XOR CX,CX ;将CX清零LOOP $ ;延时RET 返回调用处Delay ENDPSTART ENDPCODE ENDSEND START四、拓展题与拓展实验1、画出读(74HC244)写(74HC273)的时序。
《微机原理与接口技术》实训程序代码
实训1 排序程序设计六.参考代码DATA SEGMENTDW 0055H,0033H,0066H, 0077H,0099H, 0011H, 0022H, 0088H, 0044H, 0000HDATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX, DATAMOV DS, AXMOV CX, 9LOOP1: MOV DX, CXMOV BX, 0LOOP2: MOV AX, [BX]INC BXINC BXCMP AX,[BX]JLE DONE ;小于或等于转移XCHG [BX], AXDEC BXDEC BXMOV [BX], AXINC BXINC BXDONE: DEC DXJNE LOOP2LOOP LOOP1MOV AX, 4C00HINT 21HCODE ENDSEND START实训二8259A外部中断六.参考代码CS273 equ 8000HICW1 euq 00010011b ; 单片8259, 上升沿触发中断, 写ICW4 ICW2 equ 00100000b ; 中断号为20HICW4 equ 00000001b ; 工作在8086/88 方式OCW1 equ 11111110b ; 只响应IR0CS8259A equ 0A000hCS8259B equ 0A001hdata segmentCNT db 0data endscode segmentasumme cs:code,ds:dtaienter proc nearpush axpush dxmov dx, CS273inc CNTmov al, CNTout dx, al ;输出计数值mov dx, CS8259Amov al, 20hout 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 nearclimov ax, 0mov ds, axmov bx, 4*ICW2mov ax, code ;mov 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, CS273out dx, alstiLP: nop ;等待中断jmp LPstart endpcode endsend start实训三8255输入/输出七.参考代码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 proc nearStart: mov al, modemov dx, CAddrout dx, al ; 输出控制字mov al, 80Hmov cx, 08HOutA: mov dx, PortAout dx, al ; 输出PortA mov dx, PortCout dx, alshr al, 1 ; 移位mov ah,100call delay ; 延时loop OutAdelay proc nearpush axmov al,0push cxmov cx,axloop $pop cxpop axretdelay endpcode endsenf start实训4 8251A串行通讯CS8251C equ 8001hdata segmentsource db 256 dup(055h)target db 256 dup(0aah)RBuf db 0TBuf db 0data endscode segmentassume cs:code,ds:dataIInit proc near ;8251初始化mov dx, CS8251Cmov al, 01001111b;1位停止位,无校验,8位数据,波特率因子64out dx, almov al, 00010101b;清除错标志,允许发送接收retIInit endpsend proc near ;串口发送mov dx, CS8251Cmov al, 00010101bout dx, alWaitTXD:in al, dxtest al, 1 ;发送缓冲器是否为空jz WaitTXDmov al, TBuf ;取要发送的字mov dx, CS8251Dout dx, al ;发送数据retsend endpreceive proc near ;串行接收mov dx, CS8251CWaitRXD:in al, dxtest al, 2 ;是否已收到一个字je WaitRXDmov dx, CS8251Din al, dx ;读取接收的字mov RBuf , alretreceive endstart proc nearmov ax, datamov es, axmov si, offset sourcemov di, offset targetmov cx, 256mov ds, axcall IInitMLoop:mov dx, CS8251Cin al, dx ;是否接收下一个字 test al, 2jne rcvdatacmp cx, 0je MLoopmov al, [si]inc simov Tbuf, alcall sandloop MLoopjimp MLooprcvdata:call receive ;读入接收的字mov al, RBufmov [di], alinc dijmp MLoopstart endpcode endsend实训5 8253计数器七.参考代码CONTROL equ 08003hCOUNT0 equ 08000hCOUNT1 equ 08001hCOUNT2 equ 08002hcode segmentassume cs:codetart proc nearmov al, 36h; 00110110B ; 计数器0,16位,方式3,二进制 mov dx, CONTROLout dx, almov ax, 10000mov dx, COUNT0out dx, al ; 计数器低字节mov al, ahout dx, al ; 计数器高字节mov al, 76h; 01110110B ; 计数器1,16位,方式3,二进制 mov dx, CONTROLout dx, almov ax, 100mov dx, COUNT1out dx, al ; 计数器低字节mov al, ahout dx, al ; 计数器高字节jmp $start endpcode endsend start实训6 交通灯控制六.参考代码app macro yy ;控制显示宏指令mov dx, 03c1hmov al, yyout dx, almov cx, 00d0hcall delayendmfres macro xx,yy ;控制闪烁宏指令app xxapp yyendmts macro xx ;控制测试宏指令mov dx, 03c0hin al, dxtest al, xxendmcode segmnet stack ‘stack’mag db ‘out of wok!’,0ah,0dh,24hassume ds:code,cs:code,es:code,ss:codestart: mov ax, csmov ds, axmov es, axmov ss, axmov al, 90hmov dx, 3c3hout dx, al ;置8255a方式字,使A口输入,B口输出call zjdncall fjdngo: app 0ch ;主干道通行mov cx, 40hb0: push cxcall zjdncall fjdnapp 0chpop cxloop b0mov cx, 00d0hcall delaycall czf ;从主干道通行变为支通行call zjdncall fjdncall czfapp 21h ;支路通行mov cx, 20hcall zjdnapp 21hpop cxloop b2call cfz ;从支路通行变为主干道通行call zjdncall fjdncall cfzmov ah, 01hint 16hzj againjnz exit ;有键盘输入,结束运行again: jmp goexit: mov ah, 09hmov dx, offset msgint 21hmov ah, 4dhint 21hzjdn proc near ;检测主干道特种车子程序,一旦有就放行push cxts 01bjz p1mov dx, 03c1hin al, dxtest al, 21hjz s1call cfzs1: app 0chmov cx, 0200hcall delayp1: pop cxretzjdn endpfjdn proc near ;检测支路特种车子程序,如有且主干道无才放行 push cxjz ffcall zjdnff: ts 02hjz p2mov dx, 03c1hin al, dxtest al, 0chjz s2call czfs2: app 21hmov cx, 0200hcall delayp2: pop cxretfjdn endpdelay proc ;延时子程序d2: mov ax, 0100hdela: dec axjnz delaloop d2retdelay endpcfz proc nearpush cxmov bx, 03hw3: fres 11h,10hdec bxjnz w3pop cxretcfz endpczf proc near ;从主干道通行变为支路通行 push cxmov bx, 03hw1: fres oah, 02hdec bxjnz w1pop cxretczf endpdb 200dup(?) end start。
微机原理实验8237,8251,8253,8255,8259程序精华版
8237实验程序.MODEL TINYDMAaddr EQU 0E000H ;8237基地址.STACK 100.CODESTAR: MOV AX,0MOV DS,AXmov si,3000hmov al,0ffhmov cx,0800hSTAR3: mov [si],alinc sidec alloop STAR3mov al,04hmov dx,DMAaddr+8out dx,al ;禁止DMA操作mov al,00mov dx,DMAaddr+0dhout dx,al ;复位mov dx,DMAaddr+0chout dx,al ;清除先/后寄存器; mov dx,3000h ;源启始地址3000H mov dx,DMAaddr+00hout dx,almov al,30hout dx,almov al,00mov dx,DMAaddr+0chout dx,al ;清除先/后寄存器; mov dx,6000h ;目的启始地址6000Hmov dx,DMAaddr+02hout dx,almov al,60hout dx,almov al,00mov dx,DMAaddr+0chout dx,al ;清除先/后寄存器mov dx,DMAaddr+03hmov ax,7ffh ;长度0800Hout dx,almov al,ahout dx,almov dx,DMAaddr+0bhmov al,88hout dx,al ;通道0方式字mov al,85hout dx,al ;通道1方式字mov dx,DMAaddr+8mov al,41hout dx,al ;允许8237工作、存贮器方式传送star1: mov dx,DMAaddr+0fhmov al,0chout dx,al ;允许通道0、通道1mov dx,DMAaddr+09hmov al,04hout dx,al ;允许DMA操作mov dx,DMAaddr+08hNOPNOPstar2: in al,dxTEST AL,03Hjz star2 ;等待DMA结束mov dx,DMAaddr+0dhin al,dx ;读暂存寄存器mov dx,DMAaddr+0chout dx,almov dx,DMAaddr+3 ;清除先/后寄存器IN AL,DXMOV AH,ALIN AL,DXCMP AX,0FFFFHJNZ star1mov dx,DMAaddr+09hmov al,00hout dx,al ;清除DMA请求mov dx,DMAaddr+08hmov al,04hout dx,al ;禁止DMA操作mov dx,DMAaddr+0dhin al,dx ;读暂存寄存器mov si,3000hmov bx,6000hmov cx,0800hSTAR5: mov al,[si]cmp al,ds:[bx]jne falseinc siinc bxloop STAR5true: jmp $false: jmp $END STAR////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 8251实验程序.MODEL TINY;使用8253的计数器0,外接2Mhz,经26分频后,送给8251,产生4800bpsCTL_ADDR EQU 0FF01H ;控制字或状态字DA TA_ADDR EQU 0FF00H ;读写数据W_8253_T0 EQU 0BF00H ;计数器0地址W_8253_C EQU 0BF03H ;控制字.STACK 100.DATAReceive_Buffer DB 10 DUP(0) ;接受缓冲器Send_Buffer EQU Receive_Buffer ;发送缓冲器.CODESTART: MOV AX,@DA TAMOV DS,AXMOV ES,AXNOPCALL INIT_8253CALL INIT_8251START1: MOV CX,10CALL Receive_GroupMOV CX,10CALL Send_GroupJMP START1INIT_8253 PROC NEARMOV DX,W_8253_CMOV AL,37H ;定时器0,方式3OUT DX,ALMOV DX,W_8253_T0MOV AL,26H ;BCD码26(2000000/26)=16*4800OUT DX,ALMOV AL,0OUT DX,ALRETINIT_8253 ENDPINIT_8251 PROC NEARCALL RESET_8251MOV DX,CTL_ADDR;?MOV AL,7EH;? ;波特率系数为16,8个数据位OUT DX,AL;? ;一个停止位,偶校验CALL DLTIME ;延时MOV AL,15H;? ;允许接收和发送发送数据,清错误标志OUT DX,AL;?CALL DLTIMERETINIT_8251 ENDPReset_8251 PROC NEARMOV DX,CTL_ADDRMOV AL,0OUT DX,AL ;向控制口写入"0"CALL DLTIME ;延时,等待写操作完成OUT DX,AL ;向控制口写入"0"CALL DLTIME ;延时OUT DX,AL ;向控制口写入"0"CALL DLTIME ;延时MOV AL,40H ;向控制口写入复位字40HOUT DX,ALCALL DLTIMERETReset_8251 ENDP;接受一组数据,CX--接受数目Receive_Group PROC NEARLEA D I,Receive_BufferReceive_Group1: CALL Receive_ByteSTOSBLOOP Receive_Group1RETReceive_Group ENDP;接受一个字节Receive_Byte PROC NEARMOV DX,CTL_ADDRReceive_Byte1:IN AL,DX;? ;读入状态TEST AL,2;?JZ Receive_Byte1;? ;有数据吗?MOV DX,DATA_ADDR;?IN AL,DX;?RETReceive_Byte ENDP;发送一组数据,CX--发送数目Send_Group PROC NEARLEA S I,Send_BufferSend_Group1:LODSB ;?CALL Sendbyte;?LOOP Send_Group1;?RETSend_Group ENDP;发送一个字节Sendbyte PROC NEARPUSH AXMOV DX,CTL_ADDR ;读入状态Sendbyte1: IN AL,DX;?TEST AL,1;?JZ Sendbyte1;? ;允许数据发送吗?POP AX;? ;发送MOV AX,DA TA_ADDR;?OUT DX,AL;?RETSendbyte ENDP;延时DLTIME PROC NEARMOV CX,10LOOP $RETDLTIME ENDPEND START////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 8253实验程序.MODEL TINYCOM_ADDR EQU 0B003HT0_ADDR EQU 0B000HT1_ADDR EQU 0B001H.STACK 100.CODESTART: MOV DX,COM_ADDRMOV AL,35HOUT DX,AL ;计数器T0设置在模式2状态,BCD码计数MOV DX,T0_ADDRMOV AL,00HOUT DX,ALMOV AL,10HOUT DX,ALMOV DX,COM_ADDRMOV AL,77HOUT DX,ALMOV DX,T1_ADDRMOV AL,00HOUT DX,ALMOV AL,10HOUT DX,ALJMP $ ;OUT1输出频率为1S的方波END START////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 8255实验程序.MODEL TINYCOM_ADD EQU 0F003HPA_ADD EQU 0F000HPB_ADD EQU 0F001HPC_ADD EQU 0F002H.STACK 100.DATALED_Data DB 01111101B ;东西绿灯,南北红灯DB 11111101B ;东西绿灯闪烁,南北红灯DB 10111101B ;东西黄灯亮,南北红灯DB 11010111B ;东西红灯,南北绿灯DB 11011111B ;东西红灯,南北绿灯闪烁DB 11011011B ;东西红灯,南北黄灯亮.CODESTART: MOV AX,@DA TAMOV DS,AXNOPMOV DX,COM_ADDMOV AL,80H ;PA、PB、PC为基本输出模式OUT DX,ALMOV DX,PA_ADD ;灯全熄灭MOV AL,0FFHOUT DX,ALLEA B X,LED_DataSTART1: MOV AL,0XLATOUT DX,AL ;东西绿灯,南北红灯CALL DL5SMOV CX,6START2: MOV AL,1XLATOUT DX,AL ;东西绿灯闪烁,南北红灯CALL DL500msMOV AL,0XLATOUT DX,ALCALL DL500msLOOP START2MOV AL,2 ;东西黄灯亮,南北红灯XLATOUT DX,ALCALL DL3SMOV AL,3 ;东西红灯,南北绿灯XLATOUT DX,ALCALL DL5SMOV CX,6START3: MOV AL,4 ;东西红灯,南北绿灯闪烁XLATOUT DX,ALCALL DL500msMOV AL,3XLATOUT DX,ALCALL DL500msLOOP START3MOV AL,5 ;东西红灯,南北黄灯亮XLATOUT DX,ALCALL DL3SJMP START1DL500ms PROC NEARPUSH CXMOV CX,60000DL500ms1: LOOP DL500ms1POP CXRETDL500ms ENDPDL3S PROC NEARPUSH CXMOV CX,6DL3S1: CALL DL500msLOOP DL3S1POP CXRETENDPDL5S PROC NEARPUSH CXMOV CX,10DL5S1: CALL DL500msLOOP DL5S1POP CXRETENDPEND START////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 8259实验程序.MODEL TINYEXTRN Display8:NEARIO8259_0 EQU 0F000HIO8259_1 EQU 0F001H.STACK 100.DATABUFFER DB 8 DUP(?)Counter DB ?ReDisplayFlagDB 0.CODESTART: MOV AX,@DA TAMOV DS,AXMOV ES,AXNOPCALL Init8259CALL WriIntverMOV Counter,0 ;中断次数MOV ReDisplayFlag,1 ;需要显示STI ;开中断START1: CMP ReDisplayFlag,0JZ START1CALL LedDisplayMOV ReDisplayFlag,0JMP START1Init8259 PROC NEARMOV DX,IO8259_0MOV AL,13HOUT DX,ALMOV DX,IO8259_1MOV AL,08HOUT DX,ALMOV AL,09HOUT DX,ALMOV AL,0FEHOUT DX,ALRETInit8259 ENDPWriIntver PROC NEARPUSH ESMOV AX,0MOV ES,AXMOV DI,20HLEA A X,INT_0STOSWMOV AX,CSSTOSWPOP ESRETWriIntver ENDPLedDisplay PROC NEARMOV AL,CounterMOV AH,ALAND AL,0FHMOV Buffer,ALAND AH,0F0HROR AH,4MOV Buffer + 1,AHMOV Buffer + 2,10H ;高六位不需要显示MOV Buffer + 3,10HMOV Buffer + 4,10HMOV Buffer + 5,10HMOV Buffer + 6,10HMOV Buffer + 7,10HLEA S I,BufferCALL Display8RETLedDisplay ENDPINT_0: PUSH DXPUSH AXMOV AL,CounterADD AL,1DAAMOV Counter,ALMOV ReDisplayFlag,1MOV DX,IO8259_0MOV AL,20HOUT DX,ALPOP AXPOP DXIRETEND START。
微机原理实验程序 中国石油大学(华东)
实验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个字符。
(完整word版)微机原理完整实验报告+程序
实验题目8253定时/计数器实验 一、 实验目的与要求: 1. 学会8253芯片和微机接口原理和方法。
2. 掌握8253定时器/计数器的工作方式和编程原理。
二、 实验内容: 1、实验原理 本实验原理图如图 1所示,8253A 的A0、A1接系统地址总线 A0、A1,故8253A 本实验通道2 有四个端口地址,如端口地址表 1所示。
8253A 的片选地址为 48H~ 4FH 。
因此, 仪中的8253A 四个端口地址为 48H 、49H 、4AH 、4BH ,分别对应通道 0、通道1、 和控制字。
采用8253A 通道0,工作在方式3(方波发生器方式),输入时钟CLK0为 输出OUTO 要求为1KHZ 的方波,并要求用接在 GATE0引脚上的导线是接地("0" 甩空("1"电平)来观察GATE 对计数器的控制作用,用示波器观察输出波形。
2、实验线路连接 (1) 8253A 芯片的CLK0引出插孔连分频输出插孔 (2) 8253A 的 GATE0 接+5V 。
实验步骤 (1) 按图1连好实验线路(2) 运行实验程序 1. 按“调试”按钮2. 选“窗口” “进入示波器窗口” ,然后最小化3. 按“运行按钮”4.将模拟示波器窗口打开,选择“串行口 2”,再按 Ctrl + F2按钮即可看到波形 显示“ 8253-1 ”用示波器测量8253A 的OUT2输出插孔,方波输出,幅值0〜4V 三、实验代码: 1MHZ ,电平)或 3、 CODE SEGMENT ASSUME CS:CODE TCONTRO EQU 004BH TCON2 EQU 004AH CONT PORT EQU 00DFH DATA PORT EQU 00DEH DATA1 EQU 0500H START: JMP TCONT TCONT: CALL FORMATCALL LEDDIS P MOV DX,TCONTRO1MHZ 。
北邮微机原理硬件实验报告及代码
北京邮电大学微机原理硬件实验报告实验1:熟悉实验环境及IO的使用实验2:8255A并行接口应用实验3:8253计数器/定时器的应用目录实验一熟悉实验环境及IO的使用 (2)一、实验目的 (2)二、实验内容及要求 (2)三、实验结果 (2)1、程序说明 (2)2、流程图 (4)3、源代码 (6)四、实验总结 (9)实验二8255A并行接口应用 (9)一、实验目的 (9)二、实验任务及内容 (9)1、6 位数码管静态显示 (10)2、6 位数码管动态显示 (10)3、扩展部分 (10)三、实验结果1(6位数码管静态显示) (10)1、程序说明 (10)2、流程图 (11)3、源代码 (11)四、实验结果2(6位数码管动态显示) (13)1、程序说明 (13)2、流程图 (14)3、源代码 (15)五、实验结果(扩展部分) (17)1、程序说明 (17)2、流程图 (18)3、源代码 (18)六、实验总结 (22)实验三8253计数器/定时器的应用 (22)一、实验目的 (22)二、实验任务及内容 (22)1.音乐发生器 (22)2.扩展部分 (23)三、实验结果1(音乐发生器) (23)1、程序说明 (23)2、流程图 (23)3、源代码 (24)四、实验结果2(扩展部分) (29)1、程序说明 (29)2、流程图 (29)3、源代码 (30)五、实验总结 (34)实验一熟悉实验环境及IO的使用一、实验目的1 .通过实验了解和熟悉实验台的结构,功能及使用方法。
2 .通过实验掌握直接使用Debug 的I、O 命令来读写IO端口。
3 .学会Debug 的使用及编写汇编程序二、实验内容及要求1 .学习使用Debug 命令,并用I、O 命令直接对端口进行读写操作,2 .用汇编语言编写跑马灯程序。
(使用EDIT编辑工具)实现功能A.通过读入端口状态(ON为低电平),选择工作模式(灯的闪烁方式、速度等)。
B.通过输出端口控制灯的工作状态(低电平灯亮三、实验结果1、程序说明跑马灯程序共实现:16种灯型、4种速度、暂停、退出等功能。
微机原理实验指导书(反编译码)
微机原理实验指导书商丘师范学院物理与信息工程系编实验一二进制多位加法运算实验 ............................................................... 错误!未定义书签。
一、实验目的 ................................................................................................... 错误!未定义书签。
二、实验仪器 ................................................................................................... 错误!未定义书签。
三、实验原理 ................................................................................................... 错误!未定义书签。
四、实验步骤 ................................................................................................... 错误!未定义书签。
五、问题思考 ................................................................................................... 错误!未定义书签。
实验二数码显示实验 ..................................................................................... 错误!未定义书签。
一、实验目的 ................................................................................................... 错误!未定义书签。
微机原理实验室展板1
8255并行接口应用实验实验目的:采用TDN86/51或TDN86/88教学实验系统,学习并掌握8255A的各种工作方式及其应用,学习在系统接口实验单元上构造实验电路。
图1 微机原理实验室图2 TDN86/51教学实验平台实验原理8255A的数据线片选信号线、地址线、读写控制线等分别与系统总线相连,其中A、B、C三个端口以排线形式引出,供8255A实验使用,其线路如图3所示,端口地址如表1所示,接口实验单元中的开关和发光二极管电路如图4所示。
图3 系统中的8255A线路图4 拨动开关和发光二极管电路表1 8255的端口地址实验内容及步骤1.8255A接口应用实验(1)1)实验内容按图5所示实验线路编写程序,使8255A端口A工作在方式0并作为输出口,端口B工作在方式0并作为输入口。
用一组开关信号接入端口B,端口A输出线接至一组发光二极管上,然后通过对8255A芯片编程来实现输入/出功能。
图5 8255A接口应用实验(1)线路图2)程序框图图6 8255A接口应用实验(1)程序框图3)实验步骤(1)按图接线。
(2)输入程序并检查无误,经汇编、连接后装入系统。
(3)运行程序,拨动开关组,观察发光二极管应一一对应。
2.8255A接口应用实验(2)1)实验内容按图7所示接线,编写程序,使8255A端口A工作在方式0并作为输出口,端口B工作于方式1并作为输入口,则端口C的PC2成为选通信号输入端STB B.PC0成为中断请求信号输出端INTR B.当B口数据就绪后,通过发STB B 信号来请求CPU读取端口B数据并送端口A输出显示.KK UNIT图7 8255A 接口应用实验(2)接线图(KK1-初态为“1”)2)程序框图图8 8255A 接口应用实验(2)程序框图3) 实验步骤(1) 按图7连接实验线路.(2) 输入源程序并检查无误,经汇编、连接后装入系统。
(3) 运行实验程序,然后拨动开关组K0~K7,准备好后,按动开关kk1,观察发光二极管组,应与开关组信号对应。
微机实验电子稿
实验一数据传送一.实验目的:1、熟悉8086指令系统的数据传送指令及8086寻址方式2、利用Turbo Debugger调试工具来条数汇编语言程序二、实验内容:1、用一下程序将一组数据压入(PUSH)堆栈区,然后通过三种不同的出栈方式出栈,看出栈后数据的变化情况,并把结果填入表内。
程序段如下:MOV AX,0102HMOV BX,0304HMOV CX,0506HMOV DX,0708HPUSH AXPUSH BXPUSH CXPUSH DX第一种出栈方式如下:POP DXPOP CXPOP BXPOP AX第二种出栈方式如下:POP AXPOP BXPOP CXPOP DX第三种出栈方式如下:POP CXPOP DXPOP AXPOP BX调试过程:第一种出栈方式第二种出栈方式第三种出栈方式实验结果:第一种出栈方式第二种出栈方式第三种出栈方式AX= 0102H 0708H 0304HBX= 0304H 0506H 0102HCX= 0506H 0304H 0708HDX= 0708H 0102H 0506H2、指出下列指令的错误并加之改正,上机验证之。
(1)MOV [BX],[SI] MOV指令不允许两个操作数同时为存储器操作数其一改法:MOV AX,[SI]MOV [BX],AX上机验证:(2)MOV AH,BX 两操作数字长不相等其一改法:MOV AX,BX上机验证:(3)MOV AX,[SI][DI] 在间接寻址中不允许两个间址寄存器同时为变址寄存器其一改法:MOV AX,[BX][SI]上机验证:(4)MOV BYTE PTR[BX],2000H其一改法:MOV WORD PTR[BX],2000H上机验证:(5)MOV CS,AX其一改法:MOV DS,AX上机验证:(6)MOV DS,2000H 不能用立即数直接给段寄存器赋值其一改法:MOV AX,2000HMOV DS,AX上机验证:3、设置各寄存器及存储单元的内容如下:BX=0100H,SI=0001H[10010H]=12H,[10011H]=34H,[10012H]=56H,[10013H]=78H[10120H]=0ABH,[10121H]=0CDH,[10122H]=0EFH设DS=1000H,ds=0010H说明下列各条指令执行完后AX寄存器中的内存,并上机验证。
微机原理课堂演示代码
分支机构分支程序举例:CCTV幸运52有个猜商品价格的游戏,这里简化成猜数游戏。
根据提示信息输入你所猜的数,计算机经过与谜底比较后提示你高了或低了,如果猜中则恭喜你答对了。
;Guess numberdata segment ;段定义伪指令msg1 db 10,13,'Guess a number: $'msg2 db 10,13,'your number is lower! guess again: $'msg3 db 10,13,'your number is higher! guess again: $'msg4 db 10,13,'Congratulate you! your number is right!$'key db 34hdata ends ;段定义伪指令code segment ;段定义伪指令assume cs:code,ds:data ;段基假设begin: mov ax,data ;段基装填mov ds,axmov ah,9 ;显示一个字符串mov dx,offset msg1int 21h ;DOS功能调用input: mov ah,1 ;从键盘上输入一个数字符到ALint 21h ;DOS功能调用cmp al,key ;输入字符与谜底比较je right ;相等ja higher ;高了mov dx,offset msg2 ;低了mov ah,9int 21h ;DOS功能调用jmp inputhigher: mov dx,offset msg3mov ah,9int 21h ;DOS功能调用jmp inputright: mov dx,offset msg4mov ah,9int 21h ;DOS功能调用mov ah,4ch ;结束程序,返回DOSint 21hcode ends ;段定义伪指令end begin ;结束汇编循环程序1、先执行后判断结构例1:(先执行后判断循环)已知从BLOCK开始有N个带符号字节数据,试编程找出其中数值最大的数存入MAX单元。
北京工业大学-微机原理-实验十二-交通灯控制实验-实验报告
微机原理实验报告——实验九交通灯控制实验姓名:学号:一、实验要求用8255、8253芯片模拟实现交通灯控制,要求亮灯时间用8253控制二、延时置数设计提供的时钟频率为1MHz,而8253最大工作频率为2MHz,所以无需分频。
延时5秒对应的计数初值为N=5秒/1MHz=5000000,因为8253有3个16位计数器,每个计数器最大计数初值为:65535<5000000,所以将两个计数器串联使用。
计数器0计数初值为1000,计数器1计数初值为5000。
三、实验内容1.实验电路原理图2.实际电路图2.实验流程图3.实验代码IOPORT EQU 5400H-280H ;定义CPU输出地址CODE SEGMENTASSUME CS:CODESTART: MOV AL, 00100101B ;设置8253用计数器0,只读高字节,方式2(自动重复),10进制MOV DX, IOPORT+293HOUT DX, ALMOV AL, 10H ;给计数器0置数1000(0001 0000 0000 0000)MOV DX, IOPORT+290HOUT DX, ALMOV AL, 10010000B ;初始化8255,1--控制字,A口方式0输入,C口输出,B口输出MOV DX, IOPORT+28BHOUT DX, ALINOUT: MOV AL, 00100100B ;南北路口绿灯亮,东西路口红灯亮MOV DX, IOPORT+28AH ;C口0方式输出,所以可以直接控制PC0~PC7的输出电平OUT DX, ALMOV AL, 01100001B ;设置8253通道1,只读高字节,方式0(不自动重复),10进制MOV DX, IOPORT+293HOUT DX, ALMOV AL, 50H ;置数5000,与计数器0串联即:延时5秒MOV DX, IOPORT+291HOUT DX, ALLOP1: MOV DX, IOPORT+288H ;A口查询,判断延时是否结束IN AL, DXCMP AL, 0JE LOP1 ;延时结束,顺序执行,否则继续查询MOV AL, 01000100B ;南北路口黄灯亮,东西路口红灯亮MOV DX, IOPORT+28AH ;C口0方式输出,所以可以直接控制PC0~PC7的输出电平OUT DX, ALMOV AL, 01100001B ;设置8253通道MOV DX, IOPORT+293HOUT DX, ALMOV AL, 30H ;延时3秒(1000*3000),原理与延时5秒一致MOV DX, IOPORT+291HOUT DX, ALLOP2: MOV DX, IOPORT+288H ;A口查询,判断延时是否结束IN AL, DXCMP AL, 0JE LOP2 ;延时结束,顺序执行,否则继续查询MOV AL, 10000001B ;南北路口红灯亮,东西路口绿灯亮MOV DX, IOPORT+28AH ;C口0方式输出,所以可以直接控制PC0~PC7的输出电平OUT DX, ALMOV AL, 01100001B ;设置8253通道1MOV DX, IOPORT+293HOUT DX, ALMOV AL, 50H ;延时5秒MOV DX, IOPORT+291HOUT DX, ALLOP3: MOV DX, IOPORT+288HIN AL, DXCMP AL, 0JE LOP3MOV AL, 10000010B ;南北路口红灯亮,东西路口黄灯亮MOV DX, IOPORT+28AHOUT DX, ALMOV AL, 01100001B ;设置8253通道1MOV DX, IOPORT+293HOUT DX, ALMOV AL, 30H ;延时3秒MOV DX, IOPORT+291HOUT DX, ALLOP4: MOV DX, IOPORT+288HIN AL, DXCMP AL, 0JE LOP4MOV AH, 0BH ;检查键盘状态(不等待),AL=FFH 表示有键入,AL=00H表示无键入INT 21HCMP AL,0FFH ;有键入,程序退出JNZ INOUTMOV AH, 4CHINT 21HCODE ENDSEND START四、实验中遇到的问题地址书上要求定义的范围是从280H开始的,而我们在编写程序的时候是从288H开始使用的,再连线的时候,忘记了这一点,而致使结果一直出不来,后来再检查连线的时候发现了这个问题,即使进行了改正,出现了预计效果,试验成功。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2-1DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV SI,3500H ;设置待转换数据区的地址指针MOV DI,3510H ;设置结果数据区的地址指针MOV BX,000AH ;乘数10MOV CX,0004H ;循环4 次MOV AH,00HMOV AL,[SI] ;取第一位ASCⅡ码SUB AL,30H ;转换成二进制数A1:IMUL BX ;乘10ADD AL,[SI+01] ;加次位SUB AL,30HINC SI ;修改地址指针LOOP A1 ;循环MOV [DI],AX ;保存结果INT 3H;此处输入代码段代码MOV AH,4CHINT 21HCODES ENDSEND START2-2DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV CX,0005H ;循环计数器赋初值MOV DI,3500H ;ASCⅡ码首址A1:MOV BL,0FFH ;将错误标志送入BLMOV AL,[DI] ;送ASCⅡ码至ALCMP AL,3AH ;比较AL 与3AJNB A2 ;不低于3A 则转A2SUB AL,30H ;低于3A 则取ASCⅡ码低4 位 JB A2 ;低于30 则转A2MOV BL,AL ;否则AL 内容送入BL,取代FF A2:MOV AL,BL ;结果或错误标志送入ALMOV [DI+0AH],ALINC DILOOP A1INT 3HCODES ENDSEND START2-5DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,0B07HMOV DS,AXMOV DI,3000HMOV DX,9111HMOV CX,2222HTEST DH,80HJZ LPXOR DX,7FFFHNOT CXADC CX,1ADC DX,0LP:MOV [DI],CLMOV [DI+1],CHMOV [DI+2],DLMOV [DI+3],DHINT 3INT 3HCODES ENDSEND START3DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV CX,10HMOV SI,3000HMOV DI,3010HCMP SI,DIJA A2ADD SI,CXADD DI,CXDEC SIDEC DIA1:MOV AL,[SI]MOV [DI],ALDEC SIDEC DIDEC CXJNE A1JE A3A2:MOV AL,[SI]MOV [DI],ALINC SIINC DIDEC CXJNE A2A3:INT 3HCODES ENDSEND START4-1DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV DX,01HMOV BL,02HA1:MOV AL,BLINC BLMUL BLADD DX,AXCMP AX,0C8HJBE A1INT 3HCODES ENDSEND START4-2DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV DI,3000HMOV CX,[DI]MOV CH,00HMOV BL,00HINC DIA1:MOV AX,[DI]CMP AX,0000HJGE A2INC BLA2:INC DILOOP A1MOV [DI],BLINT 3HCODES ENDSEND START5-1DATAS SEGMENTAA DB 0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9H;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAS,SS:STACKS SUB1 PROC NEARCMP CX,0JE A4DEC CXMOV BH,[SI]MOV BL,BHA1:INC SIMOV AL,[SI]CMP AL,BHJAE A2CMP AL,BLJBE A3JMP A4A2:MOV BH,ALJMP A4A3:MOV BL,ALA4:LOOP A1RETSUB1 ENDPSTART:MOV AX,DATASMOV DS,AXMOV SI,OFFSET AAMOV CX,0008HCALL NEAR PTR SUB1MOV AH,BHMOV AL,BLINT 3CODE ENDSEND START实验6DATAS SEGMENTORG 3000HVAR DB 11H,0d3H,77H,6bH,0BH,33H,0aaH,21H,0ffH,67H ;此处输入数据段代码DATAS ENDSSTACKS SEGMENTDW 100 DUP(?);此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV CX,000AHMOV SI,300AHMOV BL,0FFHA1: CMP BL,0FFHJNE A4MOV BL,00HDEC CXCMP CX,0JE A4PUSH SIPUSH CXA2: DEC SIMOV AL,[SI]MOV DL,[SI-1]CMP AL,DLJA A3MOV [SI-1],ALMOV [SI],DLMOV BL,0FFHA3: LOOP A2POP CXPOP SIJMP A1A4: INT 3;此处输入代码段代码MOV AH,4CHINT 21HCODES ENDSEND START实验七DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTSTART:MOV AL,0MOV BH,0AH ;表示前景、背景颜色MOV AH,6HMOV CX,0MOV DH,24MOV DL,79INT 10H ;清屏幕MOV AH,2MOV BH,0MOV DH,10HMOV DL,10HINT 10H ;光标设置在第10行第10列MOV CX,001AH ;共26个字母,所以循环次数为26MOV DL,'Z'LP:MOV AL,DLMOV BH,0MOV BL,2FH ;设置显示的A到Z的底色和字色MOV AH,9INT 10HDEC DLLOOP LPINT 3CODES ENDSEND STARTDATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTSTART:MOV AL,0MOV BL,40HMOV AH,6MOV CX,0MOV DH,24MOV DL,79INT 10HMOV DH,0MOV AL,'A'Q1:INC DHMOV DL,0Q2:MOV AH,2MOV BH,0INT 10HMOV CX,1MOV BH,0MOV BL,97HMOV AH,9INT 10HINC ALINC DLCMP DL,10JB Q2CMP DH,11JB Q1INT 3CODES ENDSEND START实验八.486pd8255 macro port,data1mov dx,portmov eax,data1out dx,eaxnopnopendmdata segment at 0 use16 org1*4v1 dw 2 dup(?)org2*4v2 dw 2 dup(?)org3*4v3 dw 2 dup(?)org1000httt db?stackp equ2000hP255CW equ20CHP255A equ200HP255B equ204HP255C equ208Hdata endscode segment use16assume cs:code,ds:data,ss:dataorg1100hstart: nopmov ax,0mov ds,axmov ss,axmov sp,stackpiniti: mov eax,60000000hmov cr0,eaxmov ax,datamov ds,axmov ss,axmov sp,stackpmov cx,1000i0: dec cxjnz i0d8255 P255CW,80808080hi1: d8255 P255A,0c099c099hd8255 P255B,0c0c0c0c0h ;40004000 d8255 P255C,0fafafafah ;绿call del1d8255 P255C,0f5f5f5f5h ;红call del1d8255 P255C,0f0f0f0f0h ;黄call del1d8255 P255C,0ffffffffh ;灭call del1d8255 P255A,8ef8c0c0hd8255 P255B,8E8ec0c0h ;00007FFFd8255 P255C,0fafafafahcall del1d8255 P255C,0f5f5f5f5hcall del1d8255 P255C,0f0f0f0f0hcall del1d8255 P255C,0ffffffffhcall del1mov ax,4000hmov es,axmov eax,0chk: mov bx,0000h ;从4000:0000单元开始写mov es:[bx],eaxmov dx,P255Aout dx,eaxnopnopmov dx,P255Bout dx,eaxnopnoppush eax ;写入的数据入栈mov eax,0fafafafahmov dx,P255C ;绿色out dx,eaxcall del1pop eax ;出栈chk1: add bx,4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;cmp bx,8000hjz chk2 ;写满8000H个内存单元mov es:[bx],eaxjmp chk1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;chk2: mov bx,0fffchchk3: add bx,4cmp bx,8000hjz chk0cmp eax,es:[bx] ;把每个单元的数据读出与写入的jz chk3mov ecx,eax ;数据比较,是否正确mov eax,0f5f5f5f5hmov dx,P255C ;不正确,颜色变成红色out dx,eaxmov eax,ecxcall del1 ;延时chk0: add eax,01010101h ;;;;;;;;;;;;;;;;;;;;;;;;;;;cmp eax,0ffffffffh ;下一个写入的数据jz chk4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;jmp chkchk4: jmp i1del1 proc ;延时mov ecx,8ffffhi2: dec ecxjnz i2retendpcode endsend start实验10.1:(以key为原本改进).486DA TA SEGMENT AT 0 USE16ORG 1000HDA TA ENDSCODE SEGMENT USE16ASSUME CS:CODEORG 3000HBEG: JMP STARTTAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FHDPORT1 EQU 360HDPORT2 EQU 380HNUM DB 0001HCOUNT DD 00000FFFFHSTART: MOV AX,DA TAMOV DS,AXMOV CL,5KK: MOV AL,CLMOV BX,OFFSET TABXLAT TABMOV DX,DPORT2OUT DX,ALNOPMOV DX,DPORT1MOV AL,NUMOUT DX,ALNOPNOPROL NUM,1MOV COUNT,00000FFFFH DELAY:NOPDEC COUNTJNZ DELAYJMP KKCODE ENDSEND BEG实验10.2使显示20115158.486DA TA SEGMENT AT 0 USE16ORG 2000HBUF D D ?COUNT DB ?DB ?DA TA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,DS:DATAORG 01000H BEG: JMP STARTTAB1 DB 0A4H,0F9H,92H,92H TAB2 DB 0C0H,0F9H,0F9H,80H RG DD 050A050AHGR DD 0A050A05HRY DD 05000500HYR DD 00050005HRRRR DD 05050505HRGYR DD 050A0005H START: MOV AX,DA TAMOV DS,AXMOV DX,20CHMOV EAX,80808080HOUT DX,EAXNOPNOPL1:MOV DX,200HMOV EAX,DWORD PTR TAB1OUT DX,EAXMOV BP,200L2: DEC BPJNZ L2MOV DX,204HMOV EAX,DWORD PTR TAB2OUT DX,EAXMOV BP,200L3: DEC BPJNZ L3MOV DX,208HMOV EAX,RGYROUT DX,EAXMOV BP,200L4: DEC BPJNZ L4HLTJMP L1CODE ENDSEND BEG三连实验9;i8259.asm.486DA TA SEGMENT USE16 AT 0ORG 40H*4V40H DW ?,? ;保存中断向量的变量OPORT EQU 3A0H ;8259的偶地址JPORT EQU 3A8H ;8259的奇地址TR8255 EQU 20CH ;8255控制口地址A8255 EQU 200H ;8255A口地址B8255 EQU 204H ;8255B口地址C8255 EQU 208H ;8255C口地址ORG 1000HMM DD ?DA TA ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DA TAORG 2000HBEG: CLIJMP STARTSTART: MOV AX,DA TAMOV DS,AXMOV AX,0MOV SS,AXMOV SP,1000HMOV MM,0F5F5F5F5HMOV AL,80H ;初始化8255MOV DX,TR8255OUT DX,ALMOV AL,99HMOV DX,A8255OUT DX,ALMOV AL,5MOV DX,C8255OUT DX,ALCALL WRITEVERLLL: MOV AL,00010011B ;写ICW1MOV DX,OPORTOUT DX,ALNOPNOPMOV AL,01000000B ;写ICW2MOV DX,JPORTOUT DX,ALNOPNOPMOV AL,00000001B ;写ICW4MOV DX,JPORTNOPNOPMOV AL,11111100B ;写IMRMOV DX,JPORTOUT DX,ALSTI;---------------------------------------LL: MOV SI,1 ;等待中断LL1: MOV CX,10000LL2: NOPLOOP LL2DEC SIJNZ LL1NOPNOPNOPNOPNOPNOPNOPNOPNOPJMP LL;--------------------------------------WRITEVER PROC ;写中断向量PUSHAMOV BX, OFFSET SERVERMOV V40H,BXMOV AX,CSMOV V40H+2,AXPOPARETWRITEVER ENDP;-------------------------------------SERVER PROC ;中断服务程序,显示-SUCCESS MOV EAX,92C6C1BFHMOV DX,A8255OUT DX,EAXMOV EAX,9286C692HMOV DX,B8255OUT DX,EAXMOV EAX,MMMOV DX,C8255NOT EAXMOV MM,EAXMOV AL,20HMOV DX,OPORTOUT DX,ALIRETSERVER ENDP;-------------------------------------CODE ENDSEND BEG实验11.486CODE SEGMENT USE16A SSUME CS:CODEO RG 1000HBEG: J MP STARTCCONPORT E QU 30CHCCONBIT1 EQU 00010110BCCONBIT2 EQU 01010100BCCONBIT3 EQU 10010110BCDPORT1 EQU 300HCDPORT2 EQU 304HCDPORT3 EQU 308HCHDBIT1 EQU 08HCHDBIT2 EQU 04HSTART: N OP ;启动延时NOPMOV DX,CCONPORT ;写入控制字MOV AL,CCONBIT1O UT DX,ALNOPNOPMOV DX,CDPORT1 ;写入初值MOV AL,CHDBIT1OUT DX,ALNOPNOPMOV DX,CCONPORT ;写入控制字MOV AL,CCONBIT2OUT DX,ALNOPNOPMOV DX,CDPORT2 ;写入初值MOV AL,CHDBIT1OUT DX,ALNOPNOPWT1: M OV DX,CCONPORT ;写入控制字M OV AL,CCONBIT3O UT DX,ALNOPNOPMOV DX,CDPORT3 ;写入初值MOV AL,CHDBIT2OUT DX,ALWT: NOPJMP WTCODE ENDSEND BEG实验13.486DA TA SEGMENT AT 0 USE16ORG 1000HMM DB ?DA TA ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATAORG 2000HBEG: JMP STARTTAB DB 0C0H,0F9HLENS EQU $-TABC8251 EQU 330HD8251 EQU 320H CCONPORT EQU 30CH CCONBIT1 EQU 00010110B CCONBIT2 EQU 01010110B CCONBIT3 EQU 10010110B CDPORT1 EQU 300H CDPORT2 EQU 304H CDPORT3 EQU 308H CHDBIT1 EQU 9CH CHDBIT2 EQU 9CH C8255 EQU 20CHA8255 EQU 200HB8255 EQU 204H START: MOV AX,DA TAMOV DS,AXCALL I8254CALL I8251MOV DX,C8251IN AL,DXCALL I8255AGAIN: MOV MM,05HMOV CL,LENSMOV BX,OFFSET TAB TSCAN: MOV DX,A8255 MOV EAX,0FFFFFFFFHOUT DX,EAXMOV DX,B8255OUT DX,EAXMOV DX,C8251IN AL,DXTEST AL,01HJZ TSCANSEND: MOV AL,[BX]MOV DX,D8251OUT DX,ALMOV SI,0RSCAN: MOV DX,C8251IN AL,DXTEST AL,02HJNZ RECIEVEDEC SIJNZ RSCANJMP NEXTRECIEVE: MOV DX,D8251 IN AL,DXMOV DX,A8255OUT DX,ALMOV DX,B8255OUT DX,ALMOV AL,MMNOT ALMOV DX,208HOUT DX,ALMOV MM,ALMOV BP,1000HDELAY: NOPDEC BPJNZ DELAYINC BXDEC CLJNZ TSCANJMP AGAINNEXT: MOV EAX,88F9A4BFH MOV DX,A8255OUT DX,EAXMOV EAX,0A1839280HMOV DX,B8255OUT DX,EAXJMP AGAINI8254 PROCNOPNOPNOPNOPNOPNOPNOPNOPMOV DX,CCONPORTMOV AL,CCONBIT1OUT DX,ALNOPNOPMOV DX,CDPORT1MOV AL,CHDBIT1OUT DX,ALNOPNOPMOV DX,CCONPORTMOV AL,CCONBIT3OUT DX,ALNOPNOPMOV DX,CDPORT3MOV AL,CHDBIT2OUT DX,ALNOPNOPWT1: MOV DX,CCONPORT MOV AL,CCONBIT2OUT DX,ALNOPNOPMOV DX,CDPORT2MOV AL,CHDBIT2OUT DX,ALRETI8254 ENDPI8251 PROCMOV CX,3AGA: MOV AL,0MOV DX,C8251OUT DX,ALLOOP AGAMOV BP,5HD1: DEC BPJNZ D1MOV AL,40HOUT DX,ALMOV BP,5HD2: DEC BPJNZ D2MOV AL,4EHOUT DX,ALMOV BP,5HD3: DEC BPJNZ D3MOV AL,15HOUT DX,ALRETI8251 ENDPI8255 PROCMOV DX,C8255MOV EAX,80808080HOUT DX,EAXRETI8255 ENDPCODE ENDSEND BEG。