《2022年微型计算机原理与接口技术实验课讲义 .pdf》由会员分享,可在线阅读,更多相关《2022年微型计算机原理与接口技术实验课讲义 .pdf(47页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 实验一汇编语言编辑环境与调试命令的认识一、实验目的1、 熟悉 EDIT 编写汇编程序的环境;2、 学习 debug 调试命令。二、实验仪器TDN86/51 教学实验系统,电脑三、实验内容与步骤1 、用记事本或EDIT 进行汇编程序编辑可编辑汇编程序的环境很多,记事本和EDIT 是其中常用的两种方法。进入记事本很简单,这里不再介绍。进入 EDIT 的方法:开始运行command进入 DOS 界面 edit 回车进入EDIT 编辑环境编辑汇编程序程序完成后以“”文件名不能是中文,一定要是字母,而字母不能超过8个, asm是扩展名存盘。.asm文件是不能运行的,需要把它变成可执行文件.exe 。
2、它的变化过程是:Masm link .asm .obj .exe 练习 1:在 EDIT 中编写一个程序,实现数据段中的两个32 位数 X、Y 相加,结果存到数据段 Z 中。并以 dadd.asm文件名保存。2 、目标文件.obj 、可执行文件.exe的产生运行 masm 程序,产生.obj 文件,并且检查程序是否有语法错误。如果有语法错误,会有提示,在哪一行有什么样的错误是英文提示 。根据提示, 再进入 EDIT 中,打开源文件进行修改,直到没有语法错误为止。运行 link 程序,产生.exe 可执行文件。通过运行可执行文件,观察该程序是否能实现相应的功能。如假设不能,进入debug 进行调
3、试。3 、 debug 调试工具debug 是为汇编语言设计的一种调试工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。1、 debug 程序的调用在 DOS 的提示符下,可键入命令:Cdebug 路径 文件名 .exe回车其中,文件名是被调试文件的名字注意:该文件一定要是.exe 文件 。如用户键入文件名,则 debug 将指定的文件装入存储器中,用户可对其进行调试。如果未键入文件名,则用户可以用debug 命令 N 和 L 把需要的文件装入存储器后在进行调试。在 debug 程序调入后,将出现提示符-,此时就可用debug 命令来调试程序。2、 debug 的主要命
4、令显示存储单元的命令D,格式为:-D 地址从指定地址起显示80 个字节的内容;-D 范围显示所指定范围内的内容,指定范围为起始地址和终止地址;-D 显示从上一个D 命令的最后一个单元后面的80 个字节的内容, 或者在 D 未使用过的情况下,显示DS:0100 为起始的内容。例如,按指定范围显示存储单元内容的方法为:-d 100 120 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 47 页2 其中 100 120 给出显示存储单元的范围。这里没有指定段地址,D 命令自动显示DS 段的内容。修改存储单元内容的命令输入命令E,有两种格式如
5、下:-E 地址内容表 用指定的内容表去修改指定地址开始的存储器中内容例如-E DS:120 F3A5 XYZ 96 表示用 F3、A5 、 X 、 Y 、 Z 、96 共 6 个字节代替了DS: 120 至 DS:125 中的内容-E 地址逐个单元修改内容例如-E CS:100 屏幕显示为:用户可以键入 78 ,修改次内容,再键入空格键显示下一个内容,不修改时可用空格键跳过,逐个修改存储器内容,直到回车键结束。填入命令格式F -F 范围内容表将内容表中内容填入所指定的范围。例如-F 18E4:0200 L10 00 将 0200H 单元开始的16 个字节全部填入0。假设内容表中字节数超过指定范
6、围,则忽略超过项,假设内容表中字节数小于指定范围,则反复填入,直到填满所有单元为止。检查和修改寄存器命令R 格式有三种:-R 显示 CPU 内所有寄存器内容和标志位状态-R 寄存器名显示和修改某一个寄存器内容例如-R AX 屏幕显示:AX 1200 :; AX 当前内容为1200,假设不修改则按回车键,否则键入要修改的内容。如:-R BX BX 0369 : 059F 则把 BX 寄存器的内容修改为059F。RF 显示和修改标志位内容例如-RF 屏幕显示:OV DN EI NG ZR AC PE CY 此时,如不修改其内容可按Enter 键,否则,可键入欲修改的内容,如:OV DN EI NG
7、 ZR AC PE CY PONZDINV 即可,可见键入的顺序可以是任意的。运行命令G 格式为:-G = 地址 1 地址 2 地址 3 其中,地址1 指定了运行的起始地址,如不指定则从当前的CS:IP 开始运行。后面的地址为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容,和下一条将要执行的指令。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 47 页3 跟踪命令T 格式有两种:-T= 地址单条指令跟踪,执行指定地址的一条指令,并显示CPU 所有寄存器内容,标志位的状态,及下条指令的地址和内容。假设命令中没有
8、指定地址,则从当前CS:IP 开始执行。-T= 地址N,N 为多条指令跟踪,从指定地址开始执行指令,共执行指定的N 条后停止,每执行一条就显示CPU 中所有寄存器内容,标志位的状态及下条指令的地址和内容。汇编命令A 格式为:-A 地址该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中,必须注意:debug 把键入的数字均看成十六进制数,所以如要键入十进制数,则其后应加以说明。反汇编命令U 有两种格式:-U 地址从指定地址开始,反汇编32 个字节,假设没有指定地址,则接着上一个U 命令继续向下反汇编,假设没有用过U 命令,则从CS:0100 开始反汇编。-
9、U 范围对指定范围的存储单元反汇编,可指定起始地址,结束地址,也可指定起始地址及长度。例如: U 1CE2:0110 011A 或 U 1CE2 :0110 L0B 效果是一样的。命名命令N 命名命令N 常与装入命令L 一起使用如: L 可把文件名 .exe装入存储器。退出 debug 命令 Q 格式为: Q 它退出 debug,返回 DOS。例:在 debug 中,汇编一段程序,实现两个32 位数的加法, 12345678H+3456789AH= ?用 E 命令在DS:0120 存储单元开始存放78H、56H 、34H、12H、9AH 、78H、56H、34H, 用汇编命令A 编写一段程序如
10、下:Mov ax ,0120h Mov dx ,0122h Add ax, 0124h Adc dx , 0126h Mov 0128h ,ax Mov 012ah ,dx 然后用 G 命令运行该程序段G=起始地址终止地址最后用 D 命令查看结果精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 47 页4 D DS:0120 012C 练习 2:在 debug 中,汇编一段程序,实现两个32 位数的减法, 3456789Ah-12345678h=? 实验二汇编语言程序的编辑与调试实验一、实验目的1、学会用 EDIT 编写汇编语言程序;2、
11、学会使用MASM 产生目标文件和可执行文件;3、掌握在 DEBUG 下汇编程序的调试。二、实验仪器TDN86/51 教学实验系统,电脑三、实验内容与步骤1、内容在 BCD1 单元中,压缩存放着两个BCD 码。现编写一程序,将压缩的BCD 码转变成两个非压缩的 BCD 码,分别存放到result 和 result+1 单元中。2、步骤在 EDIT 环境下编写能实现上述功能的汇编源程序,并以文件名为BCD1.ASM 保存。执行MASM.EXE文件,检查程序中是否有语法错误;假设有错,则返回到EDIT 中,打开源程序进行修改,直到无语法错误为止,同时产生相应的目标文件。执行 LINK.EXE文件,产
12、生相应的可执行文件;打开 DEBUG 调试环境,装入相应的可执行文件,并用反汇编命令检查可执行文件是否已装入;单步运行每条指令,观察运行结果;整个程序运行完成后,到指定的存储单元中观察运行结果是否符合要求。四、思考题1、 执行 MASM.EXE文件的主要作用是什么?2、 在实验中,你用了哪些DEBUG 命令,目的是什么?精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 47 页5 实验三综合程序的设计、编制及调试一、实验目的1、掌握分支、循环、子程序调用等基本的程序结构;2、学习综合程序的设计、编制及调试。二、实验仪器TDN86/51 教
13、学实验系统,电脑三、实验内容与步骤1、内容在数据段的buffer 字单元中存放着一个16 位二进制数, 编写一个程序把buffer 中的内容用十六进制显示出来。2、步骤程序流程图开始取数BX BUFFER调用子程序把十六位二进制数变成十六进制数并显示出来结束ALBL子程序调用Ch=4BX循环左移 4位屏蔽AL中的高 4位ALAL+30HALAL+07HAL=39H?调用显示子程序YNCH=0?CL=4CHCH-1NY返回显示子程序DL AL调用 DOS系统功能2,显示返回精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 47 页6 按流程
14、图编写程序上机调试,实现题目要求的功能四、思考题编程显示F000:0000 存储单元的内容,显示形式为:“F000:0000 90 ” 。画出流程图,写出源代码,上机调试通过,实现相应功能。附件 1:实验源程序data segment string1 db 0dh,0ah,please input 16-bit binary number,0dh,0ah,$ string2 db 0dh,0ah,your input has mistake. string3 db 0dh,0ah, do you want to input again(Y/N)?,0dh,0ah,$ string4 db bi
15、nary to hexadecimal:,0dh,0ah,$ data ends stack segment stack dw 256 dup(?) top label word stack ends code segment assume cs:code,ds:data,ss:stack start: mov ax,data mov ds,ax mov ax,stack mov ss,ax mov sp,offset top next: mov dx,offset string1 mov ah,09h int 21h mov cx,16 xor bx,bx rota: shl bx,1 mo
16、v ah,01h int 21h and al,0fh jz rota1 cmp al,1 jnz again or bx,01h rota1:loop rota mov dl,B mov ah,02h int 21h mov dl,0dh int 21h mov dl,0ah int 21h jmp l4 again:mov dx,offset string2 mov ah,09h int 21h l5: mov ah,08h int 21h and al,0dfh cmp al,Y jz next jmp exit l4: call htodis mov dx,offset string3
17、 mov ah,09h int 21h jmp l5 exit: mov ah,4ch int 21h htodis proc mov dx,offset string4 mov ah,09h int 21h mov ch,4 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 47 页7 l2: mov cl,4 rol bx,cl mov al,bl and al,0fh add al,30h cmp al,39h jbe l1 add al,07h l1: call display dec ch jnz l2 mov dl,H mov
18、 ah,2 int 21h ret htodis endp display proc mov dl,al mov ah,2 int 21h ret display endp code ends end start 附件 2:思考题源程序data segment string db 0dh,0ah,please input address,0dh,0ah,$ string1 db 0dh,0ah,0dh,0ah,do you want to input again(y/n)? ,0dh,0ah,$ data ends stack segment stack dw 256 dup(?) top l
19、abel word stack ends code segment assume cs:code,ds:data,ss:stack start: mov ax,data mov ds,ax mov ax,stack mov ss,ax mov sp,offset top next: mov dx,offset string mov ah,9 int 21h call reci mov es,bx mov dl,: mov ah,2 int 21h call reci mov si,bx mov dl, mov ah,2 int 21h mov di,8 l5:mov bl,es:si call
20、 htodisb inc si dec di jnz l5 mov dl,- mov ah,2 int 21h mov dl, int 21h mov di,8 l6: mov bl,es:si call htodisb inc si dec di jnz l6 mov dx,offset string1 mov ah,9 int 21h 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 47 页8 mov ah,8 int 21h and al,0dfh cmp al,Y jnz exit jmp next exit: mov ah,4
21、ch int 21h htodisb proc mov ch,2 mov cl,4 l3: rol bl,cl mov al,bl and al,0fh add al,30h cmp al,39h jbe l4 add al,07h l4:mov dl,al mov ah,2 int 21h dec ch jnz l3 mov dl, mov ah,2 int 21h ret htodisb endp reci proc xor bx,bx mov ch,4 mov cl,4 l8: shl bx,cl mov ah,1 int 21h sub al,30h cmp al,9h jbe l7
22、and al,0dfh sub al,7 l7: or bl,al dec ch jnz l8 ret reci endp code ends end start 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 47 页9 实验四DOS 系统功能调用实验一、实验目的1、学习 DOS 系统功能调用的使用方法;2、重点掌握键盘输入和输出显示的DOS 系统功能调用的方法。二、实验仪器TDN86/51 教学实验系统,电脑三、实验内容和步骤无论是用户程序还是DOS 系统本身,都离不开输入/输出操作,为了方便用户,PC DOS 系统将输入 /输出管
23、理程序编成一系列子程序,不仅系统可以使用,用户也可以像调子程序一样方便地使用它们。调用系统提供的子程序,通常称为系统功能调用。DOS 系统功能调用的方式是通过执行一条软中断指令INT 21H 实现的。 当寄存器 AH 中设置不同的值时,该指令将完成不同的功能,我们称 AH 中设置的内容为功能号。通过下面的编程练习,学会DOS 系统功能 1、2、7、8、9、A 的调用方法。1、内容从键盘上输入一组字符串,将其送入输入缓冲区,把字符串中小写的字符转换成大写后,再显示这组字符串。流程图如下:2、步骤按流程图编写程序上机调试,实现题目要求的功能思考题:把上题中输入字符串中的最小字符和最大字符分别显示出
24、来。附件:data segment string1 db 0dh,0ah,please input string,0ah,0dh,$ string2 db 0dh,0ah,do you want to input string again(Y/N)?,0ah,0dh,$ buffer db 40h,? buffer1 db 40h dup(?) data ends code segment assume cs:code,ds:data start:mov ax,data mov ds,ax again: mov dx,offset string1 mov ah,9 int 21h mov dx
25、,offset buffer mov ah,0ah int 21h mov al,buffer+1 cbw 开始调用DOS系统功能 9显示一个提示字符串“Please input string ”在字符串后加 $调用DOS系统功能 0A接收从键盘输入的一组小写的字符串 ,并把它存放在相应的空间里调用DOS系统功能 9显示转换后的这组字符串调用DOS系统功能 9显示一个提示字符串“Do you want to input string again(Y/N)?”调用DOS系统功能 1等待一个字符的输入输入是 Y?YN结束调用DOS系统功能 9显示这组字符串检查每个存储单元若是小写字母转变为大写精选
26、学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 47 页10 mov bx,offset buffer1 add bx,ax mov cx,ax mov byte ptr bx,$ mov dx,offset buffer1 mov ah,9 int 21h mov bx,offset buffer1 l1: mov al,bx cmp al,a jb l2 cmp al,z ja l2 sub al,20h mov byte ptr bx,al l2: inc bx loop l1 mov dl,0ah mov ah,2 int 21h
27、mov dl,0dh mov ah,2 int 21h mov dx,offset buffer1 mov ah,9 int 21h mov dx,offset string2 mov ah,9 int 21h mov ah,1 int 21h and al,0dfh cmp al,Y jz again mov ah,4ch int 21h code ends end start 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 47 页11 实验五 综合编程练习一、实验目的综合运用分支、循环、子程序和DOS 系统功能调用编写程序;二、
28、实验仪器TDN86/51 教学实验系统,电脑三、实验内容和步骤1、内容从键盘输入一个夹带有假设干个空格的字符串,显示第一个空格的位置the first blank position is:和字符串长度 (the length of the string is : ) ,开始的空格不计算在字符串长度内。假设输入的字符串中没有空格,显示“there isn t any blank in the string ”提示,同时显示该字符串的长度。完成后提示是否还要继续do you want to input string again(Y/N)? ,按 Y 继续,其他退出。编写一程序实现上述功能。2、步骤
29、自己画出流程图,写出符合要求的程序,上机调试通过。四、思考题如假设要显示字符串中空格的个数,上述程序如何修改。假定有一最大长度为80 个字符的字符串已定义为字节变量STRING ,试编写一程序段,找出第一个空格的位置00H 至 4FH 表示 ,并显示出来。统计该串不包括前导空的实际长度不包括回车符,统计结果显示出来。data segment string1 db 0dh,0ah,please input string,0dh,0ah,$ string2 db 80 db ? string3 db 80 dup(?) string4 db 0dh,0ah,the string has not b
30、lank,0dh,0ah,$ string5 db 0dh,0ah,do you want to input string again(Y/N)?,0dh,0ah,$ string6 db 0dh,0ah,the first blank position is:$ string7 db 0dh,0ah,the length of the string is:$ data ends stack segment stack dw 256 dup (?) top label word stack ends code segment assume cs:code,ds:data,ss:stack st
31、art: mov ax,data mov ds,ax mov ax,stack mov ss,ax mov sp,offset top again: mov dx,offset string1 mov ah,9 int 21h mov dx,offset string2 mov ah,0ah int 21h mov al,string2+1 cbw mov cx,ax mov al, xor bx,bx next: cmp al,string3bx jz l1 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 47 页12 inc bx
32、 loop next mov dx,offset string4 mov ah,9 int 21h jmp l4 ;* l1: mov dx,offset string6 mov ah,9 int 21h call display ;* l4: mov dx,offset string7 mov ah,9 int 21h call length1 mov dx,offset string5 mov ah,9 int 21h mov ah,1 int 21h and al,0dfh cmp al,Y jz again exit:mov ah,4ch int 21h ;* display proc
33、 push cx mov ch,2 l3: mov cl,4 rol bl,cl mov dl,bl and dl,0fh cmp dl,9 ja l2 add dl,30h jmp dis1 l2:add dl,37h dis1 :mov ah,2 int 21h dec ch jnz l3 mov dl,H mov ah,2 int 21h pop cx ret display endp length1 proc push bx push si push ax mov bl,string2+1 mov si,offset string3 mov al, l7:cmp al,si jnz l
34、6 dec bl inc si cmp byte ptr si,$ jz l6 jmp l7 l6: call display pop ax pop si pop bx ret length1 endp code ends end start 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 47 页13 实验六中断特性及 8259 应用编程实验一、实验目的1、 认识 TDN86/51 系统的中断特性。2、 掌握 8259 中断控制器的工作原理。3、 掌握 8259 可编程中断控制器的应用编程。4、 学习掌握8259 级联方式的使用方法
35、。5、 学习在接口实验单元上构造连接实验电路的方法。二、实验设备1、 TDN86/51 教学实验系统,电脑2、 排线、导线假设干三、实验内容及步骤(一)系统中的 8259 芯片1、8259 可编程中断控制器介绍中断控制器8259A 是 Intel 公司专为控制优先级中断而设计开发的芯片。它将中断源优先级排队、区分中断源以及提供中断向量的电路集于一片中,因此无需附加任何电路,只需对8259A 进行编程,就可以管理8 级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。同时,在不需增加其他电路的情况下,通过多片8259A 的级联,能构成多达64 级的矢量中断系统。8259A的 编
36、 程 , 就 是 根 据 应 用 需 要 将 初 始 化 命 令 字ICW1ICW4和 工 作 命 令 字OCW1OCW3 分别写入初始化命令寄存器组和工作命令寄存器组。写初始化命令字ICW 的流程如图 6-1 所示, ICW1ICW4各命令字格式如表6-1 所示, OCW1OCW3各命令字格式如图6-2 所示ICW1ICW2芯片就绪,接受中断请求ICW3ICW4级联方式?要ICW4吗?YNNY图6-1 8259A 初始化编程精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 47 页14 表 6-1 8259A 的初始化命令字ICW I
37、CW1 ICW2 ICW3 主ICW3 从ICW4 各位含义D0 1:需要 ICW4 0:不要 ICW4 设为 0 1:IRQi 线上有级联从片0:无级联从片与主片 IRQi 对应的从片的识别码, IRQ0 为000,IRQ1 为001,IRQ7为 111 1:8086/8088模式0:8080/8085模式D1 1:单片 8259 0:多片 8259 1:自动 EOI 0:正常 EOI D2 8086/8088 中不用,设为0 1:主 8259 0:从 8259 D3 中断请求信号触发方式1:电平触发0:边沿触发T7T3 中断类型号的高5 位由用户来设定不用1:缓冲方式0:非缓冲方式D4 I
38、CW1 标志位:1 1:特殊嵌套方式0:一般嵌套方式D5 8086/8088 中不用,设为0 不用D6 D7 系统设定值13H 08H - - 0DH 系统口地址20H 21H 21H 21H 2、系统中的8259A 芯片系统中的8259A 芯片工作于单片方式,但可由用户扩展接成级联方式。其线路如图6-3 所示。图中的圈点表示此为排针形式引出脚。系统启动时,8259A 被初始化,其初始化是通过系统中的初始化程序设置初始化命令字ICW 来实现的。系统初始化时,规定0#和 4#中断源分别提供应时钟和M7M6M5M41M3M2M1M0OCW1A0 D7 D6 D5 D4 D3 D2 D1 D0ESM
39、MSMM001PRRRISOCW3A0 D7 D6 D5 D4 D3 D2 D1 D0RSLEOI000L2L1L0OCW2A0 D7 D6 D5 D4 D3 D2 D1 D0图6-2 8259A 的OCW 命令字的格式精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 14 页,共 47 页15 与 PC 微机联机的串口通讯,用户可以使用其余的中断源。在进入监控后,只有4#中断源处于开启状态,其他中断源都被屏蔽了。中断向量地址于中断号之间的关系如表6-2。表 6-2 中断请求信号引脚IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 中断
40、类型号08H 09H 0AH 0BH 0CH 0DH 0EH 0FH 向量地址20H23H 24H27H 28H2BH 2CH2FH 30H33H 34H37H 38H3BH 3CH3FH 说明可用可用可用串口 2 串口 1 可用可用可用3、接口实验单元中的级联实验用8259A 芯片除系统中的8259A 芯片外,在接口实验单元中专门提供了另一片8259A 芯片,以便进行8259级联实验。其线路如图6-4 所示4、接口实验单元中的R-S 触发器电路8088D0D1D2D3D4D5D6D7INT INTACSRDWRA0CAS0CAS1CAS2SP/ENIR0IR1IR2IR3IR4IR5IR6I
41、R7系统总线INTR XD0XD1XD2XD3XD4XD5XD6XD7IOY1XIORXIOWXA0主8259图6-3 系统中的 8259A 芯片D0D1D2D3D4D5D6D7INT INTACSRDWRA0CAS0CAS1CAS2SP/ENIR0IR1IR2IR3IR4IR5IR6IR7D0D1D2D3D4D5D6D7从8259图6-4 接口实验单元中级联用 8259A芯片线路INT INTACSRDWRXA0IR0IR1IR2IR3IR4IR5IR6IR7CAS0CAS1CAS2系统总线精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 15 页
42、,共 47 页16 (二)实验内容1、8259 应用实验 1按图 6-6 所示实验线路编写程序,使每次响应外部中断IRQ7 时,显示字符“7” ,中断 10 次后,程序退出。图6-5 R-S触发器电路&+5v kk1Kk1+Kk1-1k&+5v kk2Kk2+Kk2-1k开始关中断中断服务程序的入口地址写入中断向量表中8259初始化写ICW1ICW4和OCW1CX=0AH开中断等待中断结束中断服务程序显示“ 7”CX=CX-1CX=0?写OCW1屏蔽IRQ7中断返回发中断结束命令写OCW2图 6-7 实验( 1)程序流程图NY8259IRQ7KK2+KK2-KK1+KK1-图6-6 实验( 1
43、)线路精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 16 页,共 47 页17 实验 1参考程序:code segment assume cs:code start: ;中断服务程序的入口地址放入中断向量表cli push ds xor ax,ax mov ds,ax mov si,4*0fh mov ax,offset irq7 add ax,2000h mov word ptr si,ax mov ax,0 mov word ptr si+2,ax pop ds ;8259A 初始化mov al,13h ;设置 ICW1 out 20h,al
44、 mov al,08h ;设置 ICW2 out 21h,al mov al,09h ;设置 ICW4 out 21h,al mov al,6eh ;设置 OCW1 out 21h,al mov cx,0ah sti a: jmp a ;等待中断;中断服务程序irq7 proc near mov ax,0137h int 10h mov ax,0120h int 10h dec cx jnz l1 mov al,0eeh out 21h,al ;写 OCW1 ,屏蔽 IRQ7 l1: mov al,20h out 20h,al ;发中断结束命令iret irq7 endp code ends
45、end start 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 17 页,共 47 页18 2、实验 1步骤1按图 6-6 连接实验线路。2输入程序并检查无误,经汇编、连接后装入系统。3G=0000:2000运行程序。 注意:程序中8259 中断向量地址为绝对地址,已定义为段地址 CS=0000H,偏移量地址IP=2000H ,故装载时一定按此填入CS 与 IP 地址, 后面实验不再重述。 4重复按KK2 微动开关,显示屏上应显示“7” ,直到按10 次后,系统处于停机状态,用CTRL+C 返回监控。3、8259 应用实验 2按图 6-8 所示
46、实验线路,编写程序,完成下面的要求:当无中断请求时,执行主程序主程序为:延时显示字符串“main” ,假设有中断请求,则执行其中断服务程序按KK1 引起 IRQ6 中断,将延时显示10 个“ 6” ;按 KK2 引起 IRQ7中断,将延时显示10 个“ 7” 。假设正在执行较低级的中断服务程序,则允许比它优先级高的中断被响应IRQ6IRQ7 。自己画出程序流程图,写出实验程序,实现相应功能。参考程序:stack segment stack dw 64 dup(?) stack ends data segment disps db main ,00h data ends code segment
47、 assume cs:code,ds:data,ss:stack start: mov ax,data mov ds,ax ;分别把 irq7 和 irq6 中断服务程序的入口地址放入中断向量表中cli push ds xor ax,ax mov ds,ax mov si,4*0fh 8259IRQ7KK2+KK2-KK1+KK1-图6-8实验( 2)线路IRQ6精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 18 页,共 47 页19 mov ax,offset irq7 add ax,2000h mov word ptr si,ax mov a
48、x,0 mov word ptr si+2,ax mov si,4*0eh mov ax,offset irq6 add ax,2000h mov word ptr si,ax mov ax,0 mov word ptr si+2,ax pop ds ;8259A 初始化mov al,13h ;设置 ICW1 out 20h,al mov al,08h ;设置 ICW2 out 21h,al mov al,09h ;设置 ICW4 out 21h,al mov al,2eh ;设置 OCW1 out 21h,al sti ;执行主程序不断显示main_ again: mov cx,0fh ne
49、xt: mov bx,offset disps mov ah,06h int 10h call delay loop next mov ax,010ah int 10h mov ax,010dh int 10h jmp again ;中断服务程序irq7: push ax push cx sti mov cx,0ah l1: mov ax,0137h int 10h mov ax,0120h 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 19 页,共 47 页20 int 10h call delay loop l1 cli pop cx pop
50、 ax mov al,20h out 20h,al sti iret irq6: push ax push cx sti mov cx,0ah l2: mov ax,0136h int 10h mov ax,0120h int 10h call delay loop l2 cli pop cx pop ax mov al,20h out 20h,al sti iret delay: push ax push bx mov al,0ffh a2: mov bl,0ffh a1: nop nop dec bl jnz a1 dec al jnz a2 pop bx pop ax ret code