微机原理及接口技术——实验代码

合集下载

《微机原理与接口技术》实验指导书

《微机原理与接口技术》实验指导书

《微机原理与接口技术》课程实验指导书实验内容EL-8086-III微机原理与接口技术教学实验系统简介使用说明及要求✧实验一实验系统及仪器仪表使用与汇编环境✧实验二简单程序设计实验✧实验三存储器读/写实验✧实验四简单I/0口扩展实验✧实验五8259A中断控制器实验✧实验六8253定时器/计数器实验✧实验七8255并行口实验✧实验八DMA实验✧实验九8250串口实验✧实验十A/D实验✧实验十一D/A实验✧实验十二8279显示器接口实验EL-8086-III微机原理与接口技术教学实验系统简介使用说明及要求EL-8086-III微机原理与接口技术教学实验系统是为微机原理与接口技术课程的教学实验而研制的,涵盖了目前流行教材的主要内容,该系统采用开放接口,并配有丰富的软硬件资源,可以形象生动地向学生展示8086及其相关接口的工作原理,其应用领域重点面向教学培训,同时也可作为8086的开发系统使用。

可供大学本科学习《微机原理与接口技术(8086)》,《单片机应用技术》等课程提供基本的实验条件,同时也可供计算机其它课程的教学和培训使用。

为配合使用EL型微机教学实验系统而开发的8086调试软件,可以在WINDOWS 2000/XP等多种操作系统下运行。

在使用本软件系统调试程序时,可以同时打开寄存器窗口、内存窗口、反汇编窗口、波形显示窗口等等,极大地方便了用户的程序调试。

该软件集源程序编辑、编译、链接、调试与一体,每项功能均为汉字下拉菜单,简明易学。

经常使用的功能均备有热键,这样可以提高程序的调试效率。

一、基本特点EL型微机教学实验系统是北京精仪达盛科技有限公司根据广大学者和许多高等院校实验需求,结合电子发展情况而研制的具有开发、应用、实验相结合的高科技实验设备。

旨在尽快提高我国电子科技发展水平,提高实验者的动手能力、分析解决问题能力。

系统具有以下特点:1、系统采用了模块化设计,实验系统功能齐全,涵盖了微机教学实验课程的大部分内容。

微机原理与接口技术实验报告_5

微机原理与接口技术实验报告_5

实验二初级程序的编写与调试实验一、实验目的1、熟练掌握DEBUG的常用命令,学会用DEBUG调试程序.2、深入了解数据在存储器中的存取方法,及堆栈中数据的压入与弹出.3、掌握各种寻址方法以及简单指令的执行过程.二、实验内容1.设堆栈指针SP=2000H,AX=3000H,BX=5000H,请编一程序段将AX的内容和BX的内容进行交换.请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试.程序:MOV AX,3000MOV BX,5000MOV SP,2000PUSH AXPUSH BXPOP AXPOP BXHLT2.设DS=当前段地址,BX=0300H,SI=0002H请用DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装入OAH,OBH,OCH,ODH,OEH.在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程?当数据传送完毕时,AX中的内容是什么?-E 300 0A,0B,0C,0D,0E-AMOV BX,0300MOV SI,0002MOV AX,BXMOV AX,0304MOV AX,[0304]MOV AX,[BX]MOV AX,0001[BX]MOV AX,[BX][SI]MOV AX,0001[BX][SI] HLT3.设AX=0002H,编一个程序段将AX的内容乘10,要求用移位的方法完成. 程序:MOV AX,0002MOV BX,AXMOV CL,2SHL AX,CLADD AX,BXMOV CL,1SHL AX,CLHLT实验四加法及判断程序的编写与调试一、实验目的1.熟练掌握编写汇编语言源程序的基本方法和基本框架.2.学会编写顺序结构,分支结构和循环结构的汇编程序3.掌握程序中数据的产生与输入输出的方法.二、实验内容1.用汇编语言编写一个加法程序:1325+9839请用ASCII码的形式将加数与被加数存放在数据区DATA1和DATA2中,并将相加结果显示输出.程序:DATA SEGMENTDATA1 DB '5','2','3','1'DATA2 DB '9','3','8','9'DATA ENDSSTACK SEGMENT PARA STACK 'STACK'DB 200 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXLEA SI,DATA1LEA DI,DATA2MOV CX,4MOV AH,0 NEXT:MOV AL,[SI]ADC AL,[DI]ADC AL,AHMOV AH,0AAAADD AL,30HMOV [DI],ALINC DIINC SILOOP NEXTMOV CX,5ADD AH,30HMOV [DI],AH NEXT1:MOV DL,[DI]MOV AH,02INT 21HDEC DILOOP NEXT1MOV AH,4CHINT 21H CODE ENDSEND START2.假设有一组数据:5,-4,0,3,100,-51,请编写一程序,判断:每个数是否大于0?等于0?还是小于0?并输出其判断结果,即即:1当X>0Y=0当X=0-1 当X<0程序:DATA SEGMENTDATA1 DB 5, -4, 0 ,3,100,-51STRING1 DB'Y=1','$'STRING2 DB'Y=0','$'STRING3 DB'Y=-1','$'DATA ENDSSTACK SEGMENT PARA STACK 'STACK'DB 200 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXLEA SI,DATA1MOV CX,6NEXT: MOV AL,[SI]CMP AL,0JZ NEXT1JNS NEXT2JS NEXT3NEXT1: MOV DX,OFFSET STRING2MOV AH,09HINT 21HJMP NEXT4NEXT2: MOV DX,OFFSET STRING1MOV AH,09HINT 21HJMP NEXT4NEXT3: MOV DX,OFFSET STRING3MOV AH,09HINT 21HNEXT4: INC SILOOP NEXTMOV AH,4CHINT 21HCODE ENDSEND START实验五大小写字母互换程序的编写与调试一、实验目的进一步熟悉汇编语言源程序的编写方法及宏汇编程序的使用方法二、实验内容设内存数据区有大小写混合英文ASCII码字母: ‘AbCdEfGChinaAgriculturalUniversity’。

8255实验-微机原理与接口技术

8255实验-微机原理与接口技术

实验线路连接
(1) 8255A芯片PC0~ PC7插孔依次接K1~ K8。
(2) 8255A芯片PB0~PB7插孔依次接L1 ~ L8。
(3) 8255A的CS插孔CS-8255接译码输出Y7插
孔。
要求: ① 读懂系统程序中有关 8255A 的部分。
包括:端口地址、初始化编程、 二极管发光情况与开关状态间的对应关系
并使其根据开关 K1~ K8 的状态发光。 · 以 K8 作为总开关,
若 K8打开(0),则 L1~ L8同时熄灭; 若 K8闭和(1),则 L1~ L7由K1~ K7控 制。
IOCONPT EQU 0073H IOCPT EQU 0072H IOBPT EQU 0071H IOAPT EQU 0070H
② 执行程序,并进行观察,记录。 PC 口 8 位接 8 个开关 K1~ K8 , PB 口 8 位接 8 个 LED 发光二极管 L1~ L8 , 并使其根据开关 K1~ K8 的状态发光。
③ 改变电路接法并修改程序,要求实现:
· PA 口 8 位接 8 个开关 K1~ K8 ,
PB 口 8 位接 8 个发光二极管 L1~ L8
IOLED: CALL FORMAT CALL LEDDISP
MOV AL,90H B口输出
;10010000 写方式控制字 方式0 A口输入
MOV DX,IOCONPT
OUT P
IOLED1: MOV DX,IOAPT
IN AL,DX
MOV DX,IOBPT
OUT DX,AL
并行接口 8255 的应用
1、实验目的 掌握8255A和微机接口方法。 掌握8255A的工作方式和编程原理。
2、实验内容

微机原理与接口技术实验报告-全实例代码

微机原理与接口技术实验报告-全实例代码

实验一上机练习实验目的:1、掌握用编辑软件编辑程序文本的方法。

在DOS环境下,熟练掌握用MASM5.0宏汇编程序对ASM文件进行编译、连接等操作步骤。

2、熟悉用DEBUG调试程序。

实验要求:选取教科书中一典型例题,用编辑软件在PC机中形成ASM文件,然后编译、连接,生成目标文件和可执行文件。

再用DEBUG程序进行调试。

实验步骤:实验程序如下:data segmentary1 db 12,34,45,56,67,78,89,90,18cont1 equ $-ary1 ;ary1的长度sum1 dw ?ary2 db 13h,24h,57h,68h,9ah,0bch,0cdh,0deh,80h,50hcont2 equ $-ary2sum2 dw ?data endscode segmentassume cs:code, ds:datastart: mov ax,datamov ds,axlea si,ary1mov cx,cont1 ;设定循环次数为ary1的个数call sumlea si,ary2mov cx,cont2call summov ah,4ch ;结束程序功能调用4CHint 21hsum proc ;求和程序段,求该段所有数之和xor ax,ax ;ax清零为下面加法准备next1: add al,[si]adc ah,0inc siloop next1mov [si],axret ;返回调用程序sum endp ;程序段结束code endsend start点击“运行”点击“编译成目标文件”,编译成功后,再“运行”=〉“生成可执行文件”,然后运行,即可。

运行成功以后,可进行调试。

点击工具栏的调试按钮,出现调试框。

其命令如下:输入a,进行逐行汇编,输入c,比较两内存块,输入d,内存信息以16进制显示;输入e,修改内存指定的字节;输入f,可以预置一段内存;输入g,执行程序;输入h,制算术运算;输入i,从指定端口地址输入;输入l,读盘;输入m,内存块传送;输入n,置文件名;输入o,从指定端口地址输出;输入q,结束DEBUG调试;输入r,显示和修改寄存器;输入s,查找字节串;输入t,跟踪执行;输入u,反汇编;输入w,存盘操作。

《微机原理与接口技术》实训程序代码

《微机原理与接口技术》实训程序代码

实训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。

微机原理与接口技术实验3报告

微机原理与接口技术实验3报告

微机原理与接口技术实验报告实验三实验名称:数码管显示实验实验代码:代码一:数码管动态显示0-9;Io-8.asm;数码管显示示例程序1;动态显示0-9IOY0 EQU 3000H ;片选IOY0对应的端口始地址DA TA1 SEGMENT;定义数码管显示0-9的值NUM DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H DA TA1 ENDSSTACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA1START:;载入数据段MOV AX,DATA1MOV DS,AXMOV DX,IOY0LEA SI,NUMMOV CX,10XOR AX,AXNEXT:MOV AL,[SI] ;低八位确定要显示的数值MOV AH,1FH ;高八位确定选择的数码管OUT DX,AX ;将值输出到外设CALL DALL YINC SI ;显示下一数值LOOP NEXTJMP STARTDALL Y PROC NEAR ;软件延时子程序PUSH CXPUSH AXMOV CX,0FFFHD1: MOV AX,0FFFFHD2: DEC AXJNZ D2LOOP D1POP AXPOP CXRETDALL Y ENDPCODE ENDSEND START运行结果:六位数码管动态显示0-9代码二:数码管动态显示0-99;数码管动态显示0-99IOY0 EQU 3000H ;片选IOY0对应的端口始地址DA TA1 SEGMENT;定义数码管显示0-9的值NUM DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H DA TA1 ENDSSTACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA1START:;载入数据段MOV AX,DATA1MOV DX,IOY0LEA SI,NUMLEA DI,NUMMOV CX,10XOR AX,AXMOV CX,100MOV BX,0ADD DI,BXNEXT1:;---------SW----;MOV CX,10;----------GW-------;NEXT:PUSH CXMOV CX ,0FFHNEXT3:MOV AL,[SI] ;低八位确定要显示的数值MOV AH,2FH ;高八位确定选择的数码管OUT DX,AXCALL DALL YMOV AL,[DI]MOV AH,1FHOUT DX,AXCALL DALL YLOOP NEXT3INC SIPOP CX;JMP MYLOOP ;显示下一数值LOOP NEXTINC DILEA SI,NUMJMP NEXT1DALL Y PROC NEAR ;软件延时子程序PUSH CXMOV CX,0FFHD1: MOV AX,0FFFHD2: DEC AXJNZ D2LOOP D1POP AXPOP CXRETDALL Y ENDPCODE ENDSEND START运行结果:数码管后两位动态显示0-99。

微机原理与接口技术实验

微机原理与接口技术实验

实验一存储器块操作实验一、实验目的1.熟悉KEIL 集成调试环境和汇编程序的调试方法。

2.掌握存储器读写方法;3.了解内存块的移动方法;二、实验说明实验1指定某块存储器的起始地址和长度,要求能将其内容赋值。

通过该实验学生可以了解单片机读写存储器的方法,同时也可以了解单片机编程、调试方法。

块移动是单片机常用操作之一,多用于大量的数据复制和图象操作。

例程2 给出起始地址,用地址加一方法移动块,将指定源地址和长度的存储块移到指定目标地址为起始地址的单元中去。

移动3000H起始的256个字节到4000H起始的256个字节。

三、源程序代码源程序1:ORG 0000HSTART EQU 8000HMOV DPTR,#START ;起始地址MOV R0,#0 ;设置256 字节计数值MOV A,#1HLoop:MOVX @DPTR,AINC DPTR ;指向下一个地址DJNZ R0,Loop ;计数值减一NOPLJMP $ENDMemory Window初始:运行后:运行结果:外部RAM8000H~80FFH的内容都为1。

源程序2:ORG 0000HMOV DPTR,#3000HMOV A,#01HMOV R5,#0LOOP:MOVX @DPTR,AINC DPTRDJNZ R5,LOOPMOV R0,#30HMOV R1,#00HMOV R2,#40HMOV R3,#00HMOV R7,#0LOOP1:MOV DPH,R0MOV DPL,R1MOVX A,@DPTRMOV DPH,R2MOV DPL,R3MOVX @DPTR,AINC R1INC R3DJNZ R7,LOOP1LJMP $ENDMemory Window初始:运行程序后:运行结果:3000H 起始的256 个字节存储块与4000H 起始的256 个字节存储块各单元内数据对应相同。

四、思考题1、如何将存储器块的内容置成某固定值(例全填充为0FFH)? 请用户修改程序,完成此操作。

微机原理实验代码打印

微机原理实验代码打印

1)从键盘输入一个2位无符号的16进制数(00H~FFH),然后在显示器上同时以二进制和十进制形式显示出来。

例如: Please input N(00H-FFH): 9BN = 9BH = 10011011B = 155stck segment stack 'stack'dw 32 dup(0)stck endsdata segmentENDL DB 0DH,0AH,'$' ;回车换行IBUF_HEX DB 3,0,3 DUP(0)OBUF_BIN DB 10 DUP('$')OBUF_BCD DB 4 DUP('$')STR_IN_HEX DB 'Please input N (00H~FFH):$'STR_OUT1 DB 'N = $'STR_OUT2 DB ' = $'data endscode segmentmain proc farassume ss:stck, cs:code, ds:datapush dsxor ax,axpush ax ;保存psp地址mov ax,datamov ds,axMOV DX,OFFSET STR_IN_HEX ;提示用户输入十六进制数,如9BMOV AH,9INT 21HMOV DX,OFFSET IBUF_HEX ;接收输入的十六进制数MOV AH,10INT 21HMOV DX,OFFSET ENDLMOV AH,9INT 21H ;回车换行MOV DX,OFFSET STR_OUT1 ;输出'N = 'MOV AH,9INT 21HMOV SI,OFFSET IBUF_HEX+2MOV CL,IBUF_HEX+1MOV CH,0PUSH SIADD SI,CXMOV BYTE PTR [SI],'$'POP SIMOV DX,SI ;输出输入的十六进制数,如9BHMOV AH,9INT 21HMOV DL,'H'MOV AH,2INT 21HMOV DX,OFFSET STR_OUT2 ;输出' = 'MOV AH,9INT 21HCALL hex2bin; 调用子函数,将输入的十六进制数转为二进制值PUSH AX ;AL压栈,留给指令CALL bcdout使用CALL binout ;把AL二进制值按二进制格式输出MOV DX,OFFSET STR_OUT2 ;输出' = 'MOV AH,9INT 21HPOP AXCALL bcdout ;把AL二进制值按十进制格式输出MOV DX,OFFSET ENDLMOV AH,9INT 21H ;回车换行retmain endp;十六进制数--->二进制数如: 输入:FF 处理:AL=FFHhex2bin procMOV CL,IBUF_HEX+1 ;保存输入字符个数MOV CH,0MOV SI,OFFSET IBUF_HEX+2MOV AX,0hex2bin_AGAIN:MOV DL,16 ;乘数为16MUL DL 乘积保存在AX中MOV BL,[SI]CMP BL,'A'JB hex2bin_SMALLERSUB BL,07Hhex2bin_SMALLER:SUB BL,30HADD AL,BLINC SILOOP hex2bin_AGAINrethex2bin endp;二进制数--->二进制格式输出如: AL=FFH 输出:11111111Bbinout procMOV BYTE PTR OBUF_BIN+8,'B'MOV DI,OFFSET OBUF_BINMOV AH,0MOV CX,8 ;设置LOOP循环次数binout_NEXT:MOV DL,0SHL AL,1ADC DL,30H ;将每一位转为ASCII码MOV [DI],DL ;保存转换后的ASCII码INC DILOOP binout_NEXT ;cx值为8,循环8次MOV DX,OFFSET OBUF_BIN ;输出处理结果MOV AH,9INT 21Hret ;返回调用binout endp;二进制数--->十进制数输出如: AL=0AH 输出:10bcdout procMOV DI,OFFSET OBUF_BCD+2MOV AH,0MOV CX,10bcdout_AGAIN:MOV DX,0 ;无符号数16位扩展为32位DIV CX ;余数DX,商AXADD DL,30HMOV [DI],DLDEC DIOR AX,AXJNE bcdout_AGAININC DIMOV DX,DI ;输出处理结果MOV AH,9INT 21Hretbcdout endpcode endsend main ;程序主函数入口2)将输入的十进制数0-255,实际数值保存在bl中,输出如下格式如:Please input N(0-255):180N = 180 = B4H = 10110100Bstck segment stack 'stack'dw 32 dup(0)stck endsdata segmentENDL DB 0DH,0AH,'$' ;回车换行STR_IN_BCD DB 'Please input N(0-255):$'STR_OUT1 DB 'N = $'STR_OUT2 DB ' = $'IBUF_BCD DB 4,0,4 DUP(0)OBUF_BIN DB 10 DUP('$')OBUF_HEX DB 4 DUP('$')data endscode segmentmain proc farassume ss:stck, cs:code, ds:datapush dsxor ax,axpush ax ;保存psp地址mov ax,datamov ds,axMOV DX,OFFSET STR_IN_BCDMOV AH,9INT 21H ;提示用户输入十进制数,如180MOV DX,OFFSET IBUF_BCDMOV AH,10INT 21H ;接收输入的十进制数MOV DX,OFFSET ENDLMOV AH,9INT 21H ;回车换行MOV DX,OFFSET STR_OUT1 ;输出'N = 'MOV AH,9INT 21HMOV CL,IBUF_BCD+1 ;保存字符个数MOV CH,0MOV SI,OFFSET IBUF_BCD+2 ;保存输入串首地址PUSH SIADD SI,CXMOV BYTE PTR [SI],'$'POP SIMOV DX,SI ;输出输入的十进制数MOV AH,9INT 21HMOV DX,OFFSET STR_OUT2 ;输出' = 'MOV AH,9INT 21HCALL bcd2binPUSH AXCALL hexoutMOV DX,OFFSET STR_OUT2 ;输出' = 'MOV AH,9INT 21HPOP AXCALL binoutMOV DX,OFFSET ENDL ;回车换行MOV AH,9INT 21Hret ;返回调用main endp十进制数--->二进制数如: 输入:10 处理:AL=0AHbcd2bin procMOV CL,IBUF_BCD+1 ;保存输入字符个数MOV CH,0MOV SI,OFFSET IBUF_BCD+2MOV AX,0bcd2bin_AGAIN:MOV DL,10 ;乘数为10MUL DL ;乘积保存在AX中MOV BL,[SI]SUB BL,30HADD AL,BLINC SILOOP bcd2bin_AGAINretbcd2bin endp二进制数--->二进制格式输出如: AL=FFH 输出:11111111Bbinout procMOV BYTE PTR OBUF_BIN+8,'B'MOV DI,OFFSET OBUF_BINMOV AH,0MOV CX,8 ;设置LOOP循环次数binout_NEXT:MOV DL,0SHL AL,1ADC DL,30H ;将每一位转为ASCII码MOV [DI],DL ;保存转换后的ASCII码INC DILOOP binout_NEXT ;cx值为8,循环8次MOV DX,OFFSET OBUF_BIN ;输出处理结果MOV AH,9INT 21Hret ;返回调用binout endp二进制数--->十六进制输出如: AL=FFH 输出:FFHhexout procMOV BYTE PTR OBUF_HEX+2,'H'MOV DI,OFFSET OBUF_HEX+1MOV AH,0MOV CX,16hexout_AGAIN:MOV DX,0 ;无符号数16位扩展为32位DIV CX ;余数DX,商AXCMP DL,10JB hexout_SMALLERADD DL,07Hhexout_SMALLER:ADD DL,30HMOV [DI],DLDEC DIOR AX,AXJNE hexout_AGAININC DIMOV DX,DI 输出处理结果MOV AH,9INT 21Hrethexout endpcode endsend main ;程序主函数入口3)输入一个十进制的个位数,求出这个数的平方值,显示其十进制结果,要求有如下提示信息。

微机原理及接口技术实验3-码制转换

微机原理及接口技术实验3-码制转换

23 X2 02 23 03
AND AL,0FH
编程提示2 转换成ASCII码
分离后
大于9 (属于A~F) 转移至 L2 ADD AL,30h ;(属于0~9) JMP L1 L2: ADD AL,37H L1: [DI]AL ;保存ASCII码

程序结构




SI1000H DI1010H CL字节数 L5: AL [SI] ;高位处理 右移4次 AND AL,0FH 大于9 转移至 L2 ;转换成ASCII码 ADD AL,30h ;(属于0~9) JMP L1 L2: ADD AL,37H L1: [DI]AL ;保存ASCII码
AL [SI] ;低位处理 AND AL,0FH 大于9 转移至 L4 ;转换成ASCII码 ADD AL,30h ;(属于0~9) JMP L3 L4: ADD AL,37H L3: [DI+1] AL ;保存ASCII码 SI SI+1 DI DI+2 CL CL-1 JNC L5 INT 3
1000H 1001H 1002H 01 89 AB 1010H 1011H 1012H 1013H 30 31 38 39 41 42
030 高位
131 低位
1014H 1015H
பைடு நூலகம்
DI
编程提示1 高/低位处理---分离
高位处理 AL [SI] 右移4次
AND AL,0FH
低位处理 AL [SI]
计算机技术实验 ( I ) - 1
实验3 十六进制数转换成ASCII码
ASCII码----非数值信息表示
用一个字节的低7位编码,最高位置0 0XXXXXXX 00000000

《微机原理及接口技术》实验操作指导书

《微机原理及接口技术》实验操作指导书

《微机原理及接口技术》实验操作指导书福建工程学院计算机与信息科学系计算机系统结构教研室c a iw p@f j ut .ed u.c n实验操作指导一、汇编语言程序上机操作1.软件 将包含EDIT (文本编辑器)、MASM (宏汇编程序)、LINK (连接程序)、DEBUG (调试程序)等软件的文件夹存放在计算机的D 盘中masm 目录中(或其它),免安装。

2.程序实例,以下的操作以下列程序的调试为例进行说明,该程序在屏幕上输出字符串“Hello World !”DATA SEGMENTSTR DB 'Hello World !$' DATA ENDSCODE SEGMENTASSUME CS :CODE ,DS :DATASTART:MOV AX ,DATAMOV DS ,AX MOV AH ,09H MOV DX ,OFFSET STR INT 21H MOV AH ,4CH INT 21HCODE ENDSEND START 3.上机操作(1)进入DOS 。

点击“开始”“运行”,输入命令“cmd ”后单击“确定”进入DOS 。

(2)依次输入“d: ”和“cd masm ”进入masm 目录。

c a iw p@f j ut .ed u.c n(3)编辑源程序。

启动文本编辑器edit (也可以用记事本编辑源程序),文件名也可以在编辑完成时保存文件时输入,记住以.asm 为后缀,此例文件名为t1_2.asm 。

按汇编语言程序格式要求编辑源程序并保存。

(4)汇编 按(1)、(2)操作另外打开一个窗口,然后输入命令“masm t1_2 ”进行汇编,过程的对话信息直接回车即可。

若源程序有错误,则会提示错误位置和错误信息。

警告错误 严重错误 直接回车出错位置、代码、信息c a i w p@f j ut .ed u.c n光标所在位置(行、列)修改第7行的“A ”为“AX ”,保存后再汇编。

微机试验1-5实验代码

微机试验1-5实验代码

实验01_IO地址译码ioport equ 0d400h-0280houtport1 equ ioport+2a0houtport2 equ ioport+2a8hcode segmentassume cs:codestart:mov dx,outport1out dx,alcall delay ;调延时子程序mov dx,outport2out dx,alcall delay ;调延时子程序mov ah,1int 16hje startmov ah,4chint 21hdelay proc near ;延时子程序mov bx,2000lll: mov cx,0ll: loop lldec bxjne lllretdelay endpcode endsend start简单并行接口74LS244ioport equ 0d400h-0280hls244 equ ioport+2a0hcode segmentassume cs:codestart:mov dx,ls244 ;从2A0输入一数据in al,dxmov dl,al ;将所读数据保存在DL中mov ah,02int 21hmov dl,0dh ;显示回车符int 21hmov dl,0ah ;显示换行符int 21hmov ah,06 ;是否有键按下mov dl,0ffhint 21hjnz exitje start ;若无,则转startexit: mov ah,4ch ;返回DOSint 21hcode endsend start简单并行接口74LS273ioport equ 0b800h-0280hls273 equ ioport+2a8hcode segmentassume cs:codestart:mov ah,2 ;回车符mov dl,0dhint 21hmov ah,1 ;等待键盘输入int 21hcmp al,27 ;判断是否为ESC键je exit ;若是则退出mov dx,ls273 ;若不是,从2A8H输出其ASCII码out dx,aljmp start ;转startexit: mov ah,4ch ;返回DOSint 21hcode endsend start可编程定时器计数器8253(一)ioport equ 0d400h-0280hio8253a equ ioport+283hio8253b equ ioport+280hcode segmentassume cs:codestart: mov al,14h ;设置8253通道0为工作方式2,二进制计数mov dx,io8253aout dx,almov dx,io8253b ;送计数初值为0FHmov al,0fhout dx,allll: in al,dx ;读计数初值call disp ;调显示子程序push dxmov ah,06hmov dl,0ffhint 21hpop dxjz lllmov ah,4ch ;退出int 21hdisp proc near ;显示子程序push dxand al,0fh ;首先取低四位mov dl,alcmp dl,9 ;判断是否<=9jle num ;若是则为'0'-'9',ASCII码加30Hadd dl,7 ;否则为'A'-'F',ASCII码加37Hnum: add dl,30hmov ah,02h ;显示int 21hmov dl,0dh ;加回车符int 21hmov dl,0ah ;加换行符int 21hpop dxret ;子程序返回disp endpcode endsend start可编程并行接口(8255方式0)ASMioport equ 0b800h-0280hio8255a equ ioport+288hio8255b equ ioport+28bhio8255c equ ioport+28ahcode segmentassume cs:codestart: mov dx,io8255b ;设8255为C口输入,A口输出mov al,8bhinout: mov dx,io8255c ;从C口输入一数据in al,dxmov dx,io8255a ;从A口输出刚才自C口out dx,al ;所输入的数据mov dl,0ffh ;判断是否有按键mov ah,06hint 21hjz inout ;若无,则继续自C口输入,A口输出mov ah,4ch ;否则返回DOSint 21hcode endsend start七段数码管静态显示data segmentioport equ 0d400h-0280hio8255a equ ioport+288hio8255b equ ioport+28bhled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh mesg1 db 0dh,0ah,'Input a num (0--9h):',0dh,0ah,'$' data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8255b ;使8255的A口为输出方式mov ax,80hout dx,alsss: mov dx,offset mesg1 ;显示提示信息mov ah,09hint 21hmov ah,01 ;从键盘接收字符int 21hcmp al,'0' ;是否小于0jl exit ;若是则退出cmp al,'9' ;是否大于9jg exit ;若是则退出sub al,30h ;将所得字符的ASCII码减30Hmov bx,offset led ;bx为数码表的起始地址xlat ;求出相应的段码mov dx,io8255a ;从8255的A口输出jmp sss ;转SSSexit: mov ah,4ch ;返回DOSint 21hcode ends七段数码管动态显示data segmentioport equ 0d400h-0280hio8255a equ ioport+28ahio8255b equ ioport+28bhio8255c equ ioport+288hled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码buffer1 db 5,6 ;存放要显示的个位和十位bz dw ? ;位码data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8255b ;将8255设为A口输出mov al,80hout dx,almov di,offset buffer1 ;设di为显示缓冲区loop2: mov bh,02lll: mov byte ptr bz,bhpush didec diadd di, bzmov bl,[di] ;bl为要显示的数pop dimov al,0mov dx,io8255aout dx,almov bh,0mov si,offset led ;置led数码表偏移地址为SI add si,bx ;求出对应的led数码mov al,byte ptr [si]mov dx,io8255c ;自8255A的口输出out dx,almov al,byte ptr bz ;使相应的数码管亮mov dx,io8255amov cx,3000delay: loop delay ;延时mov bh,byte ptr bzshr bh,1jnz lllmov dx,0ffhmov ah,06int 21hje loop2 ;有键按下则退出mov dx,io8255amov al,0 ;关掉数码管显示out dx,almov ah,4ch ;返回int 21hcode endsend start。

微机原理与接口技术(实验一)

微机原理与接口技术(实验一)

实验一汇编语言上机调试工具DEBUG的使用一、调试工具DEBUG使用介绍DEBUG是为汇编语言设计的一种有效工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。

DEBUG是独立可执行的程序。

1、 DEBUG程序的调用在DOS的提示符下,可键入命令:C:\DEBUG [驱动器][路径][文件名]屏幕上出现―-‖符号表示已进入DEBUG如键入文件名则DEBUG将指定的文件装入存储器中,用户可对其进行调试。

如未键入文件名,则用户可以用当前存储器的内容工作,可以执行DEBUG的各种命令2、常用DEBUG命令及其操作① _A(汇编)命令格式:A[地址] ;表示对以下输入的指令进行汇编说明:该命令未指定地址时,用CS:100H或上一次A命令的后续地址作起始地址。

输入出错时,显示:ERROR,并重新显示当前地址,等待输人。

举例:_A enter显示:CS段地址:起始偏移地址(输入要汇编的指令)例: 12FE:0100 …………;其中12FE为CS的段基址② _D命令:查看存储器内容格式:D[地址]、或D[范围]说明:该命令用于显示部分内存中的内容。

缺省的段地址是DS,缺省的偏移地址是100H 或上一次D命令的后续地址,缺省的长度为80字节。

显示的格式为:地址十六进制码 ASCII码不可打印字符的ASCII码用‗.‘显示,第一行自动调整边界。

举例:- D15 120该示例显示数据段中偏移地址从15H至120H间的数据区内容。

例: –d 0100 0120 ;查看数据段从偏移地址0100单元开始, 到0120单元的内容。

③ _E命令:显示和修改内存单元内容格式:E[地址]说明:该命令用于显示指定内存单元的内容并等待输入新的值。

举例:- E DS:01000F0E:0100 00.显示0F0E:0100单元的内容为00,小数点表示等待输入新数值,但通过键盘输入数值01后,01显示在小数点右边,如按下空格键后,出现下一个单元的内容在等待输入数据,若要退出E命令可按回车键。

微机原理与接口技术实验——码转换报告

微机原理与接口技术实验——码转换报告

一、实验内容:编制程序,把十进制数15786转化成二进制数。

提示:15786=1×10×10×10×10+5×10³+7×10²+8×10+6循环CX=5实验要求:1.绘出练习1和2的程序流程图。

2编写完整的程序,上机调试。

3使用DEBUG调试命令,查看中间结果,并查看最终结果。

二、程序清单DATA SEGMENTBUFFER1 DD 15786DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATASTART:MOV AX,DATAMOV DS,AXMOV ES,AXLEA SI,BUFFER1 ;取出十进制数的首地址MOV BX,[SI] ;将首地址的内容放到寄存器MOV CX,16 ;循环次数NEXT1:MOV DL,31H ;1SHL BX,1 ;左移一位,将最高位移到进位位中JC NEXT2 ;进位位为1,即最高位为1,跳转输出1MOV DL,30H ;否则输出0NEXT2:MOV AH,02HINT 21HLOOP NEXT1 ;循环MOV AH,4CHINT 21HCODE ENDSEND START程序流程图见下页:程序流程图三、运行结果程序编译:程序链接:程序运行结果:程序运行结果:15786十进制数转换为二进制输出为0011 1101 1010 1010四、调试分析及体会调试分析:在此次编程中第一次编出的程序经过编译没有错误之后经过链接运行结果不正确。

首先自己进行检查,通过检查发现自己没有认真,在编写程序时,误把十进制数15786写成了16进制,写为了15786H(因为这个自己一直没有检查出来,还在调试如何改正),后来检查了出来。

因为这个缘故,在进行把数字取出放入寄存器的时候,由于BX是16位数据寄存器,而20位的数放不下,于是在循环输出二进制数时,首先不会输出20位,其次输出的结果是与15786H相关的二进制,结果完全错误。

微机原理与接口技术实验

微机原理与接口技术实验

实验一实验目的:熟练掌握分支和循环结构的设计方法,熟悉跳转和循环指令的使用方法实验要求:画出算法流程图,按照要求编写程序并调试运行实验内容:1、编写程序从键盘输入一系列有符号数,找出其中的最大数和最小数,显示运行结果。

;my work1.asminclude io32.inc.dataInteger byte 'please input a sign integer :',0Integer1 byte 'you want input how many numbers?',0Integer2 byte 'the biggest number is :',0Integer3 byte 'the smallest nuber is :',0.codestart:xor ecx,ecxmov eax,offset Integer1call dispmsgcall readsidmov ecx,eaxmov eax,offset Integercall dispmsgcall readsidmov ebx,eaxsub ecx,1xor edx,edxagain:mov eax,offset Integercall dispmsgcall readsidcmp ebx,eaxjne nequaljmp donenequal:jl firstxchg ebx,eaxmov edx,eaxfirst:cmp eax,edxjne nequal1jmp donenequal1:jl first1mov edx,eaxfirst1:jmp donedone:loop againmov eax,offset Integer3call dispmsgmov eax,ebxcall dispsidmov eax,offset Integer2call dispmsgmov eax,edxcall dispsidexit 0end start实验二实验目的:理解堆栈的工作原理,熟练掌握子程序的设计方法,熟悉子程序相关指令的使用方法。

微机原理实验代码

微机原理实验代码

CHECK MACRO CODE,COMPAREMOV AL,0000&CODE&BMOV DX,PORTOUT DX,ALMOV DX,PORT+1IN AL,DXLEA BX,TAB&COMPARECMP AL,0FHJNE DISPLAYENDMDATA SEGMENTMESSAGE DB 'PLEASE INPUT ANYKEY FROM KEYBOARD, PRESS F FOR END.',0DH,0AH,'$' TAB1 DB 'F', 'E', 'D', 'C'TAB2 DB 'B', 'A', '9', '8'TAB3 DB '7', '6', '5', '4'TAB4 DB '3', '2', '1', '0'KB DB 00EH, 00DH,00BH,007HPORT EQU 280HDATA ENDSSTACK SEGMENT PARA STACKDB 256 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV DX,PORT+3 ;初始化8255MOV AL,10000010bOUT DX,ALLEA DX,MESSAGEMOV AH,09HINT 21HSEARCH:MOV AL,0 ;若有键按下,按列查找哪个键MOV DX,PORTOUT DX,ALMOV DX,PORT+1IN AL,DXAND AL,0FHCMP AL,0FHJE SEARCHCHECK 1110,1 ;查找按下的键,并显示CHECK 1101,2CHECK 1011,3CHECK 0111,4NOPJMP SEARCHDISPLAY:MOV DI,BX ;存小键盘扫描码LEA SI,KBNEXT:CMP AL,[SI] ;查键盘扫描码表JE SHOW ;找到了,转去显示INC SI ;否则继续INC DIJMP NEXTSHOW: ;显示键入字符MOV AH,02HMOV DL,[DI]INT 21HCMP DL,'F' ;若是'F'则退出JE OVERCALL DELAYJMP SEARCH ;重新开始查询OVER:MOV AH,4CHINT 21HDELAY PROC ;延时循环100*65536次PUSH DIPUSH CXMOV CX,0FHXOR DI,DIAGAIN:NOPDEC DIJNZ AGAINDEC CXJNZ AGAINPOP CXPOP DIRETDELAY ENDPCODE ENDSEND STARTSET8253 MACRO SEGCODE,SEGOFFSETMOV AL,SEGCODE&BMOV DX,P8253+3 ;;工作在模式3OUT DX,ALMOV AX,3E8HMOV DX,P8253+&SEGOFFSETOUT DX,ALMOV AL,AH ;;先赋高八位再赋低八位OUT DX,ALENDMLIGHTUP MACRO DIGIT,SELECTLOCAL DELAYMOV DL,DIGIT ;;选择位MOV DH,0MOV SI,DXMOV AL,[BX][SI]MOV DX,P8255+1 ;;点亮LEDOUT DX,ALMOV AL,0000&SELECT&BMOV DX,P8255+2 ;;PC输出选通信号OUT DX,ALPUSH CXMOV CX,00F00H ;;延时DELAY: LOOP DELAYPOP CXXOR AX,AXMOV DX,P8255+2 ;;PC输出选通信号OUT DX,ALENDMDATA SEGMENTLED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH SEC1 DB 0SEC2 DB 5MIN1 DB 9MIN2 DB 5P8259 EQU 20HP8255 EQU 288HP8253 EQU 280HOLD_0A DW 0,0 ;原中断向量OLD_8259 DB 0DATA ENDSSTACK SEGMENT PARA STACKDB 256 DUP (0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATASTART:MOV AX,DATAMOV DS,AXCLISET8253 00110110,0SET8253 01110110,1PUSH ES ;设置中断向量表PUSH BXMOV AL,0BH ;保护原中断向量,0B中断类型号MOV AH,35HINT 21H ;读中断向量表MOV OLD_0A+2,ES ;ES为段地址,BX为段偏移地址MOV OLD_0A,BXPOP BXPOP ESPUSH DSMOV AL,0BH ;写新中断向量MOV AH,25HMOV DX,SEG INT_0AMOV DS,DXMOV DX,OFFSET INT_0AINT 21HPOP DSMOV AL,10000000B ;对8255进行设置,PB/PC输出MOV DX,P8255+3OUT DX,ALIN AL,P8259+1 ;8259奇地址,中断向量屏蔽MOV OLD_8259,AL ;字设置保护原屏蔽字AND AL,11110111B ;开IRQ3OUT P8259,ALSTI ;开中断PLAY:LEA BX,LED ;LED段码LIGHTUP SEC1,0001LIGHTUP SEC2,0010LIGHTUP MIN1,0100LIGHTUP MIN2,1000JMP PLAYMOV AH,4CHINT 21HINT_0A PROC NEAR ;中断服务子程序CMP SEC1,9JZ INT1INC SEC1JMP EXITINT1:MOV SEC1,0INC SEC2CMP SEC2,6JNZ EXITMOV SEC2,0INC MIN1CMP MIN1,10JNZ EXITMOV MIN1,0INC MIN2CMP MIN2,6JNZ EXITMOV MIN2,0EXIT:MOV AL,20HOUT 20H,ALIRETINT_0A ENDPCODE ENDSEND STARTTRANSSET MACRO ADDRESS,ALNUMMOV DX,ADDRESSMOV AX,ALNUMOUT DX,ALENDMDATA SEGMENTFILE DB 'D:\abc.TXT',0FCODE DW 0BUF DB 2000H DUP(0)DATA ENDSSTACK SEGMENT PARA STACKDB 256 DUP(0)STACK ENDSCODE SEGMENTASSUME CS: CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXTRANSSET 3FBH,80H ;传输线路控制寄存器,寻址除数锁存器TRANSSET 3F8H,60H ;DLLTRANSSET 3F9H,0 ;DLHTRANSSET 3FBH,1AH ;传输线路控制寄存器,LCR地址,7位数据,1位停止TRANSSET 3FCH,03H ;MODEM控制寄存器TRANSSET 3F9H,0 ;屏蔽中断MOV AH,3DH ;文件操作LEA DX,FILEMOV AL,2INT 21HMOV FCODE,AXXOR SI,SIRECEIVE:MOV DX,3FDH ;检测接收数据是否准备好IN AL,DXTEST AL,01HJZ RECEIVEMOV DX,3F8HIN AL,DXMOV DL,ALMOV AH,02INT 21HSEND:MOV DX,3FDH ;检测接收数据是否准备好IN AL,DXTEST AL,20HJZ SENDMOV AH,3FH ;从文件中读取发送LEA DX,BUFADD DX,SIMOV BX,FCODEMOV CX,1INT 21HMOV DX,3F8HMOV AL,BUF[SI]OUT DX,ALINC SI;MOV DL,AL;MOV AH,02 ;将字符显示在屏幕上;INT 21HREPT 45NOPENDMJMP RECEIVECODE ENDSEND STARTTRANSSET MACRO ADDRESS,ALNUMMOV DX,ADDRESSMOV AX,ALNUMOUT DX,ALENDMDATA SEGMENTFILE DB 'D:\abc.TXT',0FCODE DW 0BUF DB 2000H DUP(0)IO8254A EQU 280HIO8251A EQU 2B8HIO8251B EQU 2B9HDATA ENDSSTACK SEGMENT PARA STACKDB 256 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXTRANSSET IO8254A+3,00010110B ;设置8254计数器0工作方式,低字节,8位,方式3,二进制TRANSSET IO8254A,52 ;给8254计数器0送初值(波特率1200,因子16,计数初值52)TRANSSET IO8251B,0 ;初始化8251TRANSSET IO8251B,40H ;向8251控制端口送40H,使其复位TRANSSET IO8251B,7EH ;设置为1个停止位,8个数据位,波特率因子为16 TRANSSET IO8251B,27H ;向8251送控制字允许其发送和接收MOV AH,3CH ;文件操作LEA DX,FILEMOV CX,00INT 21HMOV FCODE,AXMOV AH,3DHLEA DX,FILEMOV AL,2INT 21HXOR SI,SISEND:MOV DX,IO8251BIN AL,DXTEST AL,20H ;发送是否准备好JZ SENDMOV DX,IO8251AMOV AL,'F'OUT DX,AL ;发送;MOV DL,AL;MOV AH,02 ;将字符显示在屏幕上;INT 21HREPT 64NOPENDMRECEIVE:MOV DX,IO8251BIN AL,DXTEST AL,01 ;检查接收是否准备好JZ RECEIVE ;没有,等待MOV DX,IO8251AIN AL,DX ;准备好,接收MOV DL,ALMOV AH,02 ;将接收到的字符显示在屏幕上INT 21HMOV BUF[SI],DLMOV AH,40H ;接收到的字符写入文件LEA DX,BUFADD DX,SIMOV BX,FCODEMOV CX,1INT 21HINC SIREPT 45NOPENDMJMP SENDMOV AH,4CHINT 21HCODE ENDS END STARTDATA SEGMENTINT0B DW 2 DUP(?)IMR DB ?P_AD DW 298HTAB DB '0123456789ABCDEF'DATA ENDSS SEGMENT STACK 'STACK'DB 128 DUP(?)S ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:SMAIN PROC PARMOV AX,DATAMOV DS,AXCLI;修改中断向量表PUSH ESPUSH BXMOV AH,35H ;保护原中断向量MOV AL,0BHINT 21HMOV INT0B,ESMOV INT0B+2,BXPOP BXPOP ESPUSH DSPUSH DXMOV DX,OFFSET DISP ;设置新的中断向量PUSH BXMOV BX,SEG DISPMOV DS,BXPOP BXMOV AX,250BHINT 21HPOP DXPOP DS;8259清除0BH号中断屏蔽位IN AL,21HMOV IMR,ALAND AL,0F7HOUT 21H,AL;启动AD转换NEXT: MOV DX,P_ADMOV AL,0OUT DX,AL;等待中断,并检测是否有按键PUSH CXMOV CX,100LOOP $POP CXSTIMOV AH,1INT 16HJZ NEXT;恢复8259中断屏蔽位CLIMOV AL,IMROUT 21H,AL;恢复中断向量表PUSH DXPUSH DSMOV DX,INT0BMOV DS,DXMOV DX,INT0B+2MOV AX,250BHINT 21HPOP DSPOP DXMOV AX,4C00HINT 21HMAIN ENDPDISP PROC FARPUSH AXPUSH DXMOV DX,P_AD ;读入AD转换结果IN AL,DXMOV AH,0 ;AH中为低位,AL中为高位SHL AX,4SHR AL,4PUSH AX ;输出高位MOV AL,AHLEA BX,TABXLATBMOV DL,ALMOV AH,2INT 21HPOP AXLEA BX,TAB ;输出低位XLATBMOV DL,ALMOV AH,2INT 21HMOV DL,0DH ;输出回车MOV AH,2INT 21HMOV DL,0AH ;输出回车MOV AH,2INT 21HMOV AL,20HOUT 20H,ALPOP DXPOP AXIRETDISP ENDPCODE ENDSEND MAINDATA SEGMENTADD_DA DW 290HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMAIN PROC FARMOV AX,DATAMOV DS,AXMOV DX,ADD_DAMOV AL,0NEXT: OUT DX,AL ;向DA送数据ADD AL,10MOV CX,5 ;延时LOOP $MOV AH,1 ;检测按键INT 16HJZ NEXTMOV AH,4CHINT 21HMAIN ENDPCODE ENDSEND MAINDATA SEGMENTADD_DA DW 290HLEN DB 32DATA_IN DB 80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh db 0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96hdb 80h,66h,4eh,38h,25h,15h,09h,04hdb 00h,04h,09h,15h,25h,38h,4eh,66hDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMAIN PROC FARMOV AX,DATAMOV DS,AXMOV DX,ADD_DABEGIN: MOV BH,LENLEA SI,DATA_INNEXT: MOV AL,[SI]OUT DX,AL ;向DA送数据INC SIDEC BHMOV CX,1 ;延时LOOP $CMP BH,0 ;一个周期已完成JZ BEGINMOV AH,1 ;检测按键INT 16HJZ NEXTMOV AH,4CHINT 21HMAIN ENDPCODE ENDSEND MAIN。

微机原理与接口技术实验指导书(带程序)

微机原理与接口技术实验指导书(带程序)

《微机原理与接口技术》实验指导书计算机与信息工程系2012年9月目录实验概述............................................. 错误!未定义书签。

实验仪器使用简介 (5)实验项目一学生考试成绩统计实验 (11)实验项目一两个多位十进制数相减实验............... 1错误!未定义书签。

实验项目一 8259中断控制器实验.. (16)实验项目一具有优先通行权的十字路口交通灯控制设计 (21)实验项目一 8253定时器/计数器实验 (26)实验项目一继电器控制实验 (28)实验概述一、实验的目的本实验课是配合理论教学内容,帮助学生加深理解和掌握本门课程内容的重要手段。

由于本课程具有理论与实际相结合紧密的特点,通过实验使学生掌握微型计算机的原理及接口电路的设计应用技术。

二、实验前的准备工作1.了解所用的计算机系统(包括汇编编译系统)的性能和使用方法。

2.复习和掌握与本实验有关的DOS命令以及相关指令。

3.准备好上机所需的程序,切忌不编程或抄别人的程序去上机。

三、实验的步骤上机实验应一人一组,独立实验。

上机过程中出现的问题,除了是系统的问题以外,不要轻易举手问老师。

上机实验一般应包括以下几个步骤:1、编辑汇编语言源程序使用一种文本编辑软件(word、记事本、写字板等),编辑保存一个“文件名.ASM”的汇编语言源程序文件2、汇编源程序用宏汇编(MASM)对汇编源程序进行汇编,产生目标程序(文件名.OBJ3、连接程序用连接程序(LINK)将若干目标模块连同库子程序连接在一起,产生可执行文件(文件名.EXE)4、运行调试DEBUGDEBUG 程序是专门为汇编语言设计的一种调试工具,它通过单步、跟踪、断点和连续等方式为程序员提供了非常有效的调试手段。

格式:DEBUG [驱动器][路径][文件名][参数]四、实验报告实验报告应包括以下内容:实验目的、实验内容、程序清单、运行结果、对运行结果的分析以及本次调试程序所取得的经验。

简单的微机原理与接口技术的实验.

简单的微机原理与接口技术的实验.

data segmentbuf1 db 3,6,2,1内存地址BUF1处存放一有符号的字数组,从中mindb ? 找出最小数存入MIN单元中。

lenequ min-buf1data endscodesegement‘code’assumeds:data,cs:codestart:movax,datamovds,axlea bx,buf1mov cx,len-1mov al,[bx]again:cmp al,[bx+1]jl finishmov al,[bx+1]finish:incbxloop againmovmin,almov ah,4chint 21hcode endsend startdata segmentarraydb 'aaaabca'resultdb ?countequ result-array1.data ends统计STRINGS表中字符A的个数,并code segment 'code'将统计结果保存到RESULT单元中。

assumecs:code,ds:datastart: movax,datamovds,axleabx,arraymovcx,countmov result,0moval,'a'again: cmp al,[bx]jnz nextinc resultnext: incbxloop againmov ah,4chint 21hcode endsend start1.编程判断NUM单元存放数据的正负,若为正,显示‘NUM is a positive number’,否则显示‘NUM is a nonpositive number。

data segmentndb 'num is a nonnegative number!','$'nndb 'num is a positive number!','$'numdw 6data endscode segment 'code'assumecs:code,ds:datastart:movax,datamovds,axmovax,numcmp ax,0jgeisnn leadx,n mov ah,9 int 21h jmp finish isnn:leadx,nn mov ah,9 int 21h finish: mov ah,4ch int 21h code ends end start编程将键盘输入的一个小写字母转换成大写字母显示。

微机原理与接口技术编程指令分析(较详细)

微机原理与接口技术编程指令分析(较详细)

编程指令分析1、求累加器AX和寄存器BX中两个无符号数之差的绝对值,结果送外设2000HMOV CX,AX ;保存AXSUB AX,BX ; AX-BX AX变了JC AA ;CF=1,最高位有借位,AX<BX,跳转BB:MOV DX,2000H ; 外部地址OUT DX,AX ;HLT ;CPU进入暂停状态。

AA:SUB BX,CX ;BX=( BX-CX(AX) )MOV AX,BXJMP BB3、若在某数据段2000H开始的48个单元中,存放着某班48个同学的数学课考试成绩。

试编写程序找出该班的最高分,将其置于BL中MOV CX,2FHMOV SI,2000HMOV BL,[SI]BB:INC SIMOV AL,[SI]SUB AL,BLJC AA ;有借位,AL<BLMOV BL,[SI] ;AL>=BL,BL=ALAA:LOOP BBHLT4、编程序将内存从4000:0000H到4000:00FFH的每个单元中均写入55HMOV AX,4000HMOV ES,AX ;段地址赋初值MOV CX,100H ;00FFH=100DMOV DI,0H ;MOV AL,55HCLDREP STOSB ;HLT(若改为字节操作,则“100H”→128D;“AL,55H”→AX,5555H;STOSB→STOSW)5、从外设500H单元中读取一个字节M,判断其值是否在70H和80H之间,即70H ≤M<80H。

如果M≥80H,则送0FFH给外设端口502H;如果M<70H,则送00H给外设端口502H;如果70H≤M<80H,则送88H给外设端口502HSTART:MOV DX,500H ;端口地址IN AL,DX ;从外部端口输入内容到ALCLC ;清零借位标志CFCMP AL,70H ;AL-70HJC LP1 ;CF=1有借位,AL<70H,转LP1CMP AL,80H ;AL>=70H,AL-80HJC LP2 ;70H<AL<80H,转LP2 MOV AL,0FFH ;AL>=80H,AL=0FFH(第一个16进制数为字母的,前面加0,以区别程序中的变量)LP3:MOV DX,502H ;输出端口地址赋到DX中OUT DX,AL ;将结果传送到外部端口HLTLP1:MOV AL,00HJMP LP3LP2:MOV AL,88HJMP LP36、设X、Y、Z是三个16位有符号数,存放在@DATA的数据段,寻找最大数,存到MAX单元START:MOV AX,@DATAMOV DS,AX ;DS段初始化MOV AX,XCMP AX,YJGE L1 ;X>=Y,转L1MOV AX,Y ;X<=Y,大数Y赋到AX中L1:CMP AX,Z ;AX-Z,JGE L2 ;AX>=Z,转L2MOV AX,Z ;AX<Z,大数Z赋到AX中L2:MOV MAX,AX ;最大数赋到MAX存储单元7、若在3000:3000H和3000:3001H单元有两个无符号数,编一个程序比较它们的大小,把大的数放在3000:3002H单元START:MOV AX,3000HMOV DS,AX ;段地址赋初值MOV AL,[3000H] ;低地址单元内容AL←(DS×16+3000)CMP AL,[3001H] ;两内容相比较JAE L ;(above and equal)AL>=高XCHG AL,[3001H] ;AL<高的,交换L:MOV [3002H],ALHLT8、设X、Y、Z、W均为存放16位带符号数单元的地址。

微型计算机原理与接口技术实验

微型计算机原理与接口技术实验

注:各学院可根据教学需要对以上栏木进行增减。表格内容可根据内容扩充。
5
1
MOV CX,0080H L1:MOV [BX],AX INC BX INC BX LOOP L1 MOV AX,4C00H INT 21H CODE ENDS END START
2、拆字程序中,要求将
4000H 的内容拆开,高位送 4001H 低位,
低位送 4002H 低位,4001H、4002H 高位清零。 CODE SEGMENT ASSUME CS:CODE START: mov bx,4000h MOV AL,[bx] MOV AH,[bx] MOV CL,04H SHR AH,CL inc bx MOV [bx],AH AND AL,0FH inc bx
2
MOV [bx],AL
MOV AX,4C00H INT 21H CODE ENDS END START
3、分别在
DEBUG 上调试并运行通过这两个程序。
1.
实 验 结 果
3
2.
4
这次实验在老师的指导下很容易就完成了。但是由于是第一次做实验,而且之前也 实 没有学过汇编,所以有点不知所措。编写的程序完全是按照老师给的模板改的,显得很 验 死板,一点都不灵活。还有一点就是,对已经学过那些指令还不是很熟悉,因此编程有 总 点困难。不过好在实验不是一个人做,而是采用组队的方式,举众人之所长,再加上老 结 师的指导,很顺利地就完成了。 指 导 教 师 意 见 签名: 年 月 日
1、 熟悉 8086 指令系统。 2、 熟悉 DEBUG。
在 Debug 环境下调试汇编程序。
1、编写清零程序。 2、编写拆字程序。
Debug 环境。
1、清零程序中,要求将
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8279A可编程键盘显示接口
CODE SEGMENT
ASSUME CS:CODE
ORG 1000H
START: JMP L
DA TA DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
L: MOV DX,0DFH
IN AL,DX
AND AL,01H
JZ L
MOV CX,0FFFH
LOOP $ ;延迟
MOV DX,0DEH
IN AL,DX ;从键盘输入键值
MOV CL,AL
MOV DX,0DFH
MOV AL,90H
OUT DX,AL
MOV DX,0DEH
MOV AL,CL
AND AL,0FH ;保留低4位
LEA BX,DA TA
XLA T ; BX+AL 送到AL
OUT DX,AL ; 从数码管显示低4位
MOV DX,0DFH
MOV AL,91H
OUT DX,AL
MOV DX,0DEH
MOV AL,CL
MOV CL,4
SHR AL,CL ;右移4位
AND AL,0FH ;保留高4位
LEA BX,DA TA
XLA T
OUT DX,AL ;显示高4为
K:JMP L
CODE ENDS
END START
交通灯
CODE SEGMENT
ASSUME CS:CODE
ORG 1000H
START: MOV AL,80H
MOV DX,0073H
OUT DX,AL
L1: MOV AL,01111001B
MOV DX,72H
OUT DX,AL
MOV AL,00001110B
MOV DX,71H
OUT DX,AL
CALL DELAY1
MOV CX,0008H
L2: MOV AL,10111010B
MOV DX,72H
OUT DX,AL
MOV AL,00001110B
MOV DX,71H
OUT DX,AL
CALL DELAY2
MOV AL,11111011B
MOV DX,72H
OUT DX,AL
MOV AL,00001110B
MOV DX,71H
OUT DX,AL
CALL DELAY2
LOOP L2
L3: MOV AL,11001111B
MOV DX,72H
OUT DX,AL
MOV AL,00000011B
MOV DX,71H
OUT DX,AL
CALL DELAY1
MOV CX,0008H
L4: MOV AL,11010111B MOV DX,72H
OUT DX,AL
MOV AL,00000101B
MOV DX,71H
OUT DX,AL
CALL DELAY2
MOV AL,11011111B ;
MOV DX,72H
OUT DX,AL
MOV AL,00000111B
MOV DX,71H
OUT DX,AL
CALL DELAY2
LOOP L4
JMP L1
DELAY1: MOV CX,0030H DELY2: CALL DELAY2
LOOP DELY2
RET
DELAY2: PUSH CX
MOV CX,8000H
LOOP $
POP CX
RET
CODE ENDS
END START
A/D转换
CODE SEGMENT
ASSUME CS:CODE
ORG 1000H
START: JMP L
DA TA DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ,77H,7CH,39H,5EH,79H,71H L: MOV DX,060H
MOV AL,00H
OUT DX,AL
MOV CX,200
LOOP $
MOV DX,060H
IN AL,DX
MOV CL,AL ;获取
MOV DX,0DFH
MOV AL,90H
OUT DX,AL
MOV DX,0DEH
MOV AL,CL
AND AL,0FH
LEA BX,DA TA
XLA T
OUT DX,AL ;低4位
MOV DX,0DFH
MOV AL,91H
OUT DX,AL
MOV DX,0DEH
MOV AL,CL
MOV CL,4
SHR AL,CL
AND AL,0FH
LEA BX,DA TA
XLA T
OUT DX,AL ;高4位
MOV DX,060H
MOV AL,01H
OUT DX,AL
MOV CX,200
LOOP $
MOV DX,060H
IN AL,DX ;获取
MOV CL,AL
MOV DX,0DFH
MOV AL,96H
OUT DX,AL
MOV DX,0DEH
MOV AL,CL
AND AL,0FH
LEA BX,DA TA
XLA T
OUT DX,AL ;低4位
MOV DX,0DFH
MOV AL,97H
OUT DX,AL
MOV DX,0DEH
MOV AL,CL
MOV CL,4
SHR AL,CL
AND AL,0FH
LEA BX,DA TA
XLA T
OUT DX,AL ;高4位K:JMP L
CODE ENDS
END START
D/A方波CODE SEGMENT
ASSUME CS:CODE
ORG 1000H
START: JMP L
L:MOV DX,0070H
MOV AL,0FFH
OUT DX,AL
MOV CX,0FFFFH
LOOP $
LOOP $ ;最大值
N:MOV DX,0070H
MOV AL,00H
OUT DX,AL
MOV CX,0FFFFH
LOOP $ ;最小值
JMP L
CODE ENDS
END START
D/A三角波CODE SEGMENT
ASSUME CS:CODE
ORG 1000H
START: JMP L
L:MOV DX,0070H
MOV AL,00H
K1:OUT DX,AL
MOV CX,0400H
LOOP $
INC AL ;加1
CMP AL,0FFH ;比较
JB K1
K2:OUT DX,AL
MOV CX,0400H
LOOP $
DEC AL ;减1
CMP AL,00H
JA K2
JMP L
CODE ENDS
END START
步进电机
CODE SEGMENT
ASSUME CS:CODE
ORG 1000H
START:JMP L
L: MOV AL,80H
MOV DX,0063H
OUT DX,AL
K:MOV DX,0061H
MOV AL,01H
OUT DX,AL
MOV CX,0FFFFH
LOOP $
MOV AL,00H
OUT DX,AL
MOV CX,0FFFFH
LOOP $
JMP K
CODE ENDS
END START
电子琴
CODE SEGMENT
ASSUME CS:CODE
ORG 1000H
START: JMP L
DA TA DW 653,262, 294, 330, 349, 392, 440, 494, 523, 587
L: MOV DX,0DFH
IN AL,DX
AND AL,01H
JZ L
MOV CX,0FFFH
LOOP $
MOV DX,0DEH
IN AL,DX
CMP AL,0AH
JB A
JAE B
A: MOV BL,02H
MUL BL
LEA BX,DA TA
MOV AH,0
MOV DI,AX
MOV CX,[BX+DI]
MOV AL,0B6H
OUT 4BH,AL
MOV DX,0FH
MOV AX,0420H
DIV CX
OUT 4AH,AL
MOV AL,AH
OUT 4AH,AL
MOV AL,80H
OUT 63H,AL
MOV AL,1B
OUT 61H,AL
JMP L
B:MOV AL,0
OUT 61H,AL
JMP L
CODE ENDS
END START。

相关文档
最新文档