




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 . . 35/46 . . 实验一 汇编语言编辑环境与调试命令的认识实验目的熟悉EDIT编写汇编程序的环境;学习debug调试命令。实验仪器 TDN86/51教学实验系统,计算机实验容与步骤(1)、用记事本或EDIT进行汇编程序编辑可编辑汇编程序的环境很多,记事本和EDIT是其中常用的两种方法。进入记事本很简单,这里不再介绍。进入EDIT的方法:开始运行command进入DOS界面edit回车进入EDIT编辑环境编辑汇编程序程序完成后以“文件名.asm”(文件名不能是中文,一定要是字母,而字母不能超过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)、debug调试工具d
3、ebug是为汇编语言设计的一种调试工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。debug程序的调用在DOS的提示符下,可键入命令:Cdebug 路径文件名.exe(回车)其中,文件名是被调试文件的名字(注意:该文件一定要是.exe文件)。如用户键入文件名,则debug将指定的文件装入存储器中,用户可对其进行调试。如果未键入文件名,则用户可以用debug命令N和L把需要的文件装入存储器后在进行调试。在debug程序调入后,将出现提示符-,此时就可用debug命令来调试程序。debug的主要命令显示存储单元的命令 D,格式为:-D 地址 从指定地址起显示80个字节的容
4、;-D 围 显示所指定围的容,指定围为起始地址和终止地址;-D显示从上一个D命令的最后一个单元后面的80个字节的容,或者在D未使用过的情况下,显示DS:0100为起始的容。例如,按指定围显示存储单元容的方法为:-d 100 120 其中100 120 给出显示存储单元的围。这里没有指定段地址,D命令自动显示DS段的容。修改存储单元容的命令输入命令E,有两种格式如下:-E 地址 容表 用指定的容表去修改指定地址开始的存储器中容例如-E DS:120 F3A5XYZ96表示用F3、A5、X、Y、Z、96共6个字节代替了DS:120至DS:125中的容-E 地址 逐个单元修改容例如 -E CS:10
5、0 屏幕显示为: 18E4:0100 89.- 用户可以键入78,修改次容,再键入空格键显示下一个容,不修改时可用空格键跳过,逐个修改存储器容,直到回车键结束。填入命令格式F-F 围(容表) 将容表中容填入所指定的围。例如-F 18E4:0200 L10 00将0200H单元开始的16个字节全部填入0。若容表中字节数超过指定围,则忽略超过项,若容表中字节数小于指定围,则反复填入,直到填满所有单元为止。检查和修改寄存器命令R格式有三种:-R 显示CPU所有寄存器容和标志位状态-R 寄存器名 显示和修改某一个寄存器容例如-R AX 屏幕显示:AX 1200 : ;AX当前容为1200,若不修改则按
6、回车键,否则键入要修改的容。如:-R BXBX 0369:059F则把BX寄存器的容修改为059F。RF 显示和修改标志位容例如 -RF 屏幕显示:OV DN EI NG ZR AC PE CY 此时,如不修改其容可按Enter键,否则,可键入欲修改的容,如:OV DN EI NG ZR AC PE CY PONZDINV即可,可见键入的顺序可以是任意的。运行命令G格式为:-G =地址1 地址2 地址3其中,地址1指定了运行的起始地址,如不指定则从当前的CS:IP开始运行。后面的地址为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器与标志位的容,和下一条将要执行的指令。跟踪命令T格
7、式有两种:-T=地址 单条指令跟踪,执行指定地址的一条指令,并显示CPU所有寄存器容,标志位的状态,与下条指令的地址和容。若命令中没有指定地址,则从当前CS:IP开始执行。-T=地址 N,N为多条指令跟踪,从指定地址开始执行指令,共执行指定的N条后停止,每执行一条就显示CPU中所有寄存器容,标志位的状态与下条指令的地址和容。汇编命令A格式为:-A 地址该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中,必须注意:debug把键入的数字均看成十六进制数,所以如要键入十进制数,则其后应加以说明。反汇编命令 U有两种格式:-U地址 从指定地址开始,反汇编32个
8、字节,若没有指定地址,则接着上一个U命令继续向下反汇编,若没有用过U命令,则从CS:0100开始反汇编。-U 围 对指定围的存储单元反汇编,可指定起始地址,结束地址,也可指定起始地址与长度。例如:U 1CE2:0110 011A 或 U 1CE2:0110 L0B 效果是一样的。命名命令N命名命令N常与装入命令L一起使用如:N 路径文件名.exeL可把文件名.exe装入存储器。退出debug命令Q格式为:Q它退出debug,返回DOS。 例:在debug中,汇编一段程序,实现两个32位数的加法,12345678H+3456789AH=? 用E命令在 DS:0120存储单元开始存放78H、56H
9、、34H、12H、9AH、78H、56H、34H, 用汇编命令A编写一段程序如下:Mov ax,0120hMov dx,0122hAdd ax,0124hAdc dx,0126hMov 0128h,axMov 012ah,dx 然后用G命令运行该程序段 G=起始地址 终止地址 最后用D命令查看结果 D DS:0120 012C 练习2:在debug中,汇编一段程序,实现两个32位数的减法,3456789Ah-12345678h=?实验二 汇编语言程序的编辑与调试实验一、实验目的1、学会用EDIT编写汇编语言程序;2、学会使用MASM产生目标文件和可执行文件;3、掌握在DEBUG下汇编程序的调试
10、。二、实验仪器TDN86/51教学实验系统,计算机三、实验容与步骤1、容在BCD1单元中,压缩存放着两个BCD码。现编写一程序,将压缩的BCD码转变成两个非压缩的BCD码,分别存放到result和result+1单元中。 2、步骤在EDIT环境下编写能实现上述功能的汇编源程序,并以文件名为BCD1.ASM保存。执行MASM.EXE文件,检查程序中是否有语法错误;若有错,则返回到EDIT中,打开源程序进行修改,直到无语法错误为止,同时产生相应的目标文件。执行LINK.EXE文件,产生相应的可执行文件;打开DEBUG调试环境,装入相应的可执行文件,并用反汇编命令检查可执行文件是否已装入;单步运行每
11、条指令,观察运行结果;整个程序运行完成后,到指定的存储单元中观察运行结果是否符合要求。思考题执行MASM.EXE文件的主要作用是什么?在实验中,你用了哪些DEBUG命令,目的是什么?实验三 综合程序的设计、编制与调试一、实验目的 1、掌握分支、循环、子程序调用等基本的程序结构;2、学习综合程序的设计、编制与调试。二、实验仪器TDN86/51教学实验系统,计算机三、实验容与步骤1、容 在数据段的buffer字单元中存放着一个16位二进制数,编写一个程序把buffer中的容用十六进制显示出来。 2、步骤程序流程图按流程图编写程序上机调试,实现题目要求的功能四、思考题编程显示F000:0000存储单
12、元的容,显示形式为:“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 binary to hexadecimal:,0dh,0ah,$data endsstack
13、 segment stack dw 256 dup(?) top label wordstack endscode segment assume cs:code,ds:data,ss:stackstart: 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 mov ah,01h int 21h and al,0fh jz rota1 cmp al,1 jnz
14、 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 mov ah,09h int 21h jmp l5 exit: mov ah,4ch int 2
15、1h htodis proc mov dx,offset string4 mov ah,09h int 21h mov ch,4 l2: mov cl,4 rol bx,cl mov al,bl and al,0fh add al,30h cmp al,39h e l1 add al,07h l1: call display dec ch jnz l2 mov dl,H mov 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:
16、思考题源程序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 endsstack segment stack dw 256 dup(?) top label wordstack endscode segment assume cs:code,ds:data,ss:stackstart: mov ax,data mov ds,ax mov ax,stack mov ss,ax
17、 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 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
18、 dec di jnz l6 mov dx,offset string1 mov ah,9 int 21h mov ah,8 int 21h and al,0dfh cmp al,Y jnz exit jmp next exit: mov ah,4ch 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 e l4add al,07h l4:mov dl,almov ah,2 int 21h dec ch jnz l3 mov dl, mov ah,2 in
19、t 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 e l7 and al,0dfh sub al,7 l7: or bl,al dec ch jnz l8 ret reci endpcode ends end start实验四 DOS系统功能调用实验一、实验目的1、学习DOS系统功能调用的使用方法;2、重点掌握键盘输入和输出显示的DOS系统功能调用的方法。二、实验仪器TDN86/51教学实验系统,计算机三、实验容和步骤
20、无论是用户程序还是DOS系统本身,都离不开输入/输出操作,为了方便用户,PC DOS系统将输入/输出管理程序编成一系列子程序,不仅系统可以使用,用户也可以像调子程序一样方便地使用它们。调用系统提供的子程序,通常称为系统功能调用。DOS系统功能调用的方式是通过执行一条软中断指令 INT 21H 实现的。当寄存器AH中设置不同的值时,该指令将完成不同的功能,我们称AH中设置的容为功能号。通过下面的编程练习,学会DOS系统功能1、2、7、8、9、A的调用方法。1、容 从键盘上输入一组字符串,将其送入输入缓冲区,把字符串中小写的字符转换成大写后,再显示这组字符串。流程图如下:2、步骤按流程图编写程序上
21、机调试,实现题目要求的功能思考题:把上题中输入字符串中的最小字符和最大字符分别显示出来。附件: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 endscode segment assume cs:code,ds:data start:mov ax,data mov ds,ax again: mov d
22、x,offset string1 mov ah,9 int 21h mov dx,offset buffer mov ah,0ah int 21h mov al,buffer+1 cbw 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 l2 cmp al,z ja l2 sub al,20h mov byte ptr bx,al l2: inc bx loo
23、p l1 mov dl,0ah mov ah,2 int 21h 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 21hcode endsend start实验五 综合编程练习一、实验目的综合运用分支、循环、子程序和DOS系统功能调用编写程序;二、实验仪器TDN86/51教学实验系统,计算机三、实验容和步骤 1
24、、容从键盘输入一个夹带有若干个空格的字符串,显示第一个空格的位置(the first blank position is:)和字符串长度(the length of the string is : ),开始的空格不计算在字符串长度。若输入的字符串中没有空格,显示“there isnt any blank in the string”提示,同时显示该字符串的长度。完成后提示是否还要继续( do you want to input string again(Y/N)?),按Y继续,其他退出。编写一程序实现上述功能。 2、步骤自己画出流程图,写出符合要求的程序,上机调试通过。四、思考题如若要显示字符
25、串中空格的个数,上述程序如何修改。假定有一最大长度为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 blank,0dh,0ah,$ string5 db 0dh,0ah,do you
26、 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 endsstack segment stack dw 256 dup (?) top label wordstack endscode segment assume cs:code,ds:data,ss:stack start: mov ax,data mov ds,ax mov ax,stack mov
27、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 inc bx loop next mov dx,offset string4 mov ah,9 int 21h jmp l4;* l1: mov dx,offset string6 mov ah,9 int 21h cal
28、l 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 push cx mov ch,2 l3: mov cl,4 rol bl,cl mov dl,bl and dl,0fh cmp dl,9 ja l2add dl,30h jmp dis1 l2:add dl,37
29、h 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 l6 dec bl inc si cmp byte ptr si,$ jz l6 jmp l7 l6: call display pop ax pop si pop bx ret length1 endpcode end
30、s end start实验六 中断特性与8259应用编程实验实验目的认识TDN86/51系统的中断特性。掌握8259中断控制器的工作原理。掌握8259可编程中断控制器的应用编程。学习掌握8259级联方式的使用方法。学习在接口实验单元上构造连接实验电路的方法。实验设备TDN86/51教学实验系统,计算机排线、导线若干实验容与步骤系统中的8259芯片 1、8259可编程中断控制器介绍中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。它将中断源优先级排队、辨别中断源以与提供中断向量的电路集于一片中,因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模
31、式和中断请求方式,即中断结构可以由用户编程来设定。同时,在不需增加其他电路的情况下,通过多片8259A的级联,能构成多达64级的矢量中断系统。8259A的编程,就是根据应用需要将初始化命令字ICW1ICW4和工作命令字OCW1OCW3分别写入初始化命令寄存器组和工作命令寄存器组。写初始化命令字ICW的流程如图6-1所示,ICW1ICW4各命令字格式如表6-1所示,OCW1OCW3各命令字格式如图6-2所示表6-1 8259A的初始化命令字ICWICW1ICW2ICW3(主)ICW3(从)ICW4各位含义D01:需要ICW40:不要ICW4设为01:IRQi线上有级联从片0:无级联从片与主片IR
32、Qi对应的从片的识别码,IRQ0为000,IRQ1为001,IRQ7为1111:8086/8088模式0:8080/8085模式D11:单片82590:多片82591:自动EOI0:正常EOID28086/8088中不用,设为01:主82590:从8259D3中断请求信号触发方式1:电平触发0:边沿触发T7T3中断类型号的高5位由用户来设定不用1:缓冲方式0:非缓冲方式D4ICW1标志位:11:特殊嵌套方式 0:一般嵌套方式D58086/8088中不用,设为0不用D6D7系统设定值13H08H-0DH系统口地址20H21H21H21H 2、系统中的8259A芯片系统中的8259A芯片工作于单片
33、方式,但可由用户扩展接成级联方式。其线路如图6-3所示。图中的圈点表示此为排针形式引出脚。系统启动时,8259A被初始化,其初始化是通过系统中的初始化程序设置初始化命令字ICW来实现的。系统初始化时,规定0#和4#中断源分别提供给时钟和与PC微机联机的串口通讯,用户可以使用其余的中断源。在进入监控后,只有4#中断源处于开启状态,其他中断源都被屏蔽了。中断向量地址于中断号之间的关系如表6-2。 表6-2中断请求信号引脚IR0IR1IR2IR3IR4IR5IR6IR7中断类型号08H09H0AH0BH0CH0DH0EH0FH向量地址20H23H24H27H28H2BH2CH2FH30H33H34H
34、37H38H3BH3CH3FH说明可用可用可用串口2串口1可用可用可用3、接口实验单元中的级联实验用8259A芯片除系统中的8259A芯片外,在接口实验单元中专门提供了另一片8259A芯片,以便进行8259级联实验。其线路如图6-4所示4、接口实验单元中的R-S触发器电路实验容1、8259应用实验(1)按图6-6所示实验线路编写程序,使每次响应外部中断IRQ7时,显示字符“7”,中断10次后,程序退出。实验(1)参考程序:code segment assume cs:codestart: ;中断服务程序的入口地址放入中断向量表 cli push ds xor ax,ax mov ds,ax m
35、ov si,4*0fh mov ax,offset irq7 add ax,2000h mov word ptr si,ax mov ax,0 mov word ptr si+2,axpop 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,6eh ;设置OCW1 out 21h,al mov cx,0ah sti a: jmp a ;等待中断;中断服务程序 irq7 proc near mov ax,0137h int 10
36、h 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 end start2、实验(1)步骤(1)按图6-6 连接实验线路。(2)输入程序并检查无误,经汇编、连接后装入系统。(3)G=0000:2000运行程序。(注意:程序中8259中断向量地址为绝对地址,已定义为段地址CS=0000H,偏移量地址IP=2000H,故装载时一定按此填入CS与IP地址,后面实验不再重述。)(4)重复按K
37、K2微动开关,显示屏上应显示“7”,直到按10次后,系统处于停机状态,用CTRL+C返回监控。3、8259应用实验(2)按图6-8所示实验线路,编写程序,完成下面的要求:当无中断请求时,执行主程序(主程序为:延时显示字符串“)main”),若有中断请求,则执行其中断服务程序(按KK1引起IRQ6中断,将延时显示10个“)6”;按KK2引起IRQ7中断,将延时显示10个“)7”)。若正在执行较低级的中断服务程序,则允许比它优先级高的中断被响应(IRQ6IRQ7)。自己画出程序流程图,写出实验程序,实现相应功能。参考程序:stack segment stack dw 64 dup(?)stack
38、endsdata segment disps db main ,00hdata endscode segment assume cs:code,ds:data,ss:stackstart: mov ax,data mov ds,ax ;分别把irq7和irq6中断服务程序的入口地址放入中断向量表中 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 mov si,4*0eh mov ax,offs
39、et 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 next: mov bx,offset disps mov ah,06h int 10h call delay
40、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 int 10h call delay loop l1 cli pop cx pop 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 1
41、0h 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 ends end start4、实验(2)步骤(1)按图6-8连接实验电路(2)画出程序流程图(3)输入程序并检查无误,经汇编、连接后装入系统。(4)G=0000:2000,运行实验程序,则连续显示“main”,先后按动KK1和K
42、K2微动开关来模拟中断请求信号,记录请求顺序与显示结果。5、8259级联实验(3)本实验是以系统中的8259作为主片,外接另一片8259作为从片,构成8259级联方式的中断实验线路,如图6-9所示,其中规定主片的IRQ7上连接一片从片,从片上的IRQ7和IRQ6接外中断请求电路(R-S单脉冲触发器),并规定从片的中断类型号为30H37H,其命令寄存器组编址为00H和01H。实验参考程序:stack segment stack dw 64 dup(?)stack endsdata segment disps db main ,00hdata endscode segment assume cs:
43、code,ds:data,ss:stackstart: mov ax,data mov ds,ax ;分别把irq7和irq6中断服务程序的入口地址放入中断向量表中 cli push ds xor ax,ax mov ds,ax mov si,4*37h mov ax,offset irq7 add ax,2000h mov word ptr si,ax mov ax,0 mov word ptr si+2,ax mov si,4*36h mov ax,offset irq6 add ax,2000h mov word ptr si,ax mov ax,0 mov word ptr si+2,
44、ax pop ds ;主片8259A初始化 mov al,11h ;设置ICW1 out 20h,al mov al,08h ;设置ICW2 out 21h,al mov al,80h ;设置主片ICW3 out 21h,al mov al,1dh ;设置ICW4 out 21h,al mov al,7dh ;设置OCW1 out 21h,al ;从片8259A初始化 mov al,11h ;设置从ICW1out 00h,al mov al,30h out 01h,al ;设置从ICW2 mov al,07h out 01h,al ;设置从ICW3 mov al,09h ;设置从ICW4 ou
45、t 01h,al mov al,3fh ;设置从OCW1 out 01h,al mov al,68h ;设置特殊屏蔽方式 out 00h,al sti;执行主程序不断显示main_ again: mov cx,0fh next: 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
46、ax,0120h int 10h call delay loop l1 cli pop cx pop ax mov al,20h out 20h,al mov al,20h out 00h,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 mov al,20h out 00h,al sti iret delay: push ax push
47、bx mov al,0ffha2: mov bl,0ffh a1: nop nop dec bl jnz a1 dec al jnz a2 pop bx pop ax ret code ends end start 6、实验(3)步骤(1)画出程序的流程图(2)按图6-9搭接实验线路,其中INTA连接必须在开机上电之后。(3)输入程序并检查无误,经汇编、连接后装入系统。(4)G=0000:2000,运行实验程序,则连续显示“main”,先后按动KK1和KK2微动开关来模拟中断请求信号,记录请求顺序与显示结果(对KK1和KK2的响应同实验2)。关于TDN86/51教学实验系统中显示功能的使用说明
48、在TDN86/51教学实验系统中显示字符或字符串的功能是通过执行 INT 10H 指令实现的。AX中的容不同,实现的功能就不一样。INT 10H使用说明:1、入口:AH=00H,AL=01H 功能:清屏2、入口:AH=01H,AL=数据功能:送AL中的数据到显示屏显示(注意:AL中的数据应是需要显示字符的ASCII码)3、入口:AH=06H,DS:BX=字符串首地址,且字符串尾用00H填充。 功能:显示一字符串,直到遇到00H为止。思考题用中断查询方式解决上述问题,电路如何连接,如何编程实现 ;用中断查询方式code segment assume cs:codestart: ;中断服务程序的入
49、口地址放入中断向量表 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 ;8259A初始化 mov al,13h ;设置ICW1 out 20h,al mov al,08h ;设置ICW2 out 21h,al mov al,09h ;设置ICW4 out 21h,al mov al,7fh ;设置OCW1 out 21h,al pop ds call disisr mov ax,010dh i
50、nt 10h mov ax,010ah int 10h mov cx,0ah ;用中断查询方式不能开中断 l1: mov al,0ch ; 发查询命令 out 20h,al in al,20h ; 接受查询字 test al,80h ; 检测是否有中断请求 jz l1 and al,07h call disisr a:jmp airq7: call disisr mov ax,0120h int 10h mov ax,0120h int 10h mov ax,0137h int 10h mov ax,0120h int 10h mov ax,0120h int 10h dec cx jnz l
51、2 mov al,0ffh out 21h,al l2: mov al,20h out 20h,al call disisr mov ax,010dh int 10h mov ax,010ah int 10h iret irq6: jmp l1irq5: jmp l1irq4: jmp l1irq3: jmp l1irq2: jmp l1irq1: jmp l1irq0: jmp l1disisr: mov ax,0149hint 10hmov ax,0153hint 10h mov ax,0152h int 10h mov ax,013ah int 10h mov al,0bhout 20h
52、,al in al,20h mov bh,al mov bl,8 l3: rol bh,1 jc nextmov ax,0130h int 10h jmp again next: mov ax,0131h int 10hagain: dec bl jnz l3retcode ends end start实验七 8255并行接口应用实验一、实验目的1、学习并掌握8255的各种工作方式与其应用。2、学习在系统接口实验单元上构造实验电路。二、实验设备1、TDN86/51教学实验系统,计算机2、排线、导线若干三、实验容与步骤(一)系统中的8255芯片1、系统中的8255芯片8255可编程外围接口芯片是
53、Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5v单电源供电,能在方式0基本输入/输出方式、方式1选通输入/输出方式和方式2双向选通方式下工作。8255的数据线片选信号线、地址线、读写控制线等分别与系统总线相连,其A、B、C三个端口以排针形式引出,供8255实验使用,其线路如图7-1所示,端口地址如表7-1所示表7-1 8255端口地址信号线寄 存 器编 址IOY3 A口60HB口61HC口62H控制寄存器63H2、接口实验单元中的开关和发光二极管电路3、七段数码显示管结构七段LED显示器由七个发光段构成,每段均是一个LED二极管。如图7-3所示,这七个发光段分
54、别称为a、b、c、d、e、f和g,通过控制不同段的点亮和熄灭,可显示16进制数字09和A、B、C、D、E、F,也能显示H、E、L、P等字符。有的产品还有一个小数点DP位段,用来显示小数。LED显示器有共阳极和共阴极两种结构,我们的实验设备提供的是后者。对于共阴极结构的LED显示器,阴极连在一起后接地,各阳极段接到器件的引脚上,要想点亮某一段时,只要将相应引脚届高点平。(二)8255接口应用实验1、8255接口应用实验(1)用一组发光二极管显示一组开关的状态,电路连接如图7-4所示。使8255端口A工作在方式0并作为输出口,端口B工作在方式0 并作为输入口。用一组开关信号接入端口B,端口A输出线
55、接至一组发光二极管上,然后通过对8255芯片的编程来实现输入/输出功能。实验步骤:按图接线输入程序并检查无误,经汇编、连接后装入系统运行程序,拨动开关键,观察发光二极管应一一对应。2、8255接口应用实验(2)电路连接如图7-5所示,编程实现连接在8255 A口的一组发光二极管轮流点亮,A口采用工作方式0,输出。二极管点亮的方式还很多,同学们可根据现实生活中观察到的情况进行发挥。3、8255接口应用实验(3)按图7-6所示连接线路,8255 A口工作方式0,输出与数码显示管连接,B口工作方式0,输入与一组开关相连接。编程实现在数码显示管中显示开关闭合的个数。4、8255接口应用实验(4)该实验
56、电路连接图与图7-6一样,若任意时刻至多只有一个开关闭合,编程实现在数码显示管中显示闭合开关的序号,没有开关闭合时,数码显示管不亮。5、8255接口应用实验(5)按图7-7连接线路,8255 A口工作方式0,输出;B口工作方式0,输入。数码管的a、b、g、dp段依次接8255的PA0、PA1.、PA7。kk1+和Kk2+两个按键开关分别与8255的PB0、PB1连接。要求对该电路进行编程,使数码管初始状态显示0。每按下一次kk1+键后,数码管显示的数字减1,减至0后,再按kk1+键,则数码管显示9;每按下一次kk2+键后,数码管显示的数字加1,加至9后,再按kk2+键,则数码管显示0。若同时按
57、下kk1+和kk2+键,则退出程序。6、8255接口应用实验(6)按图7-8连接线路,8255 A口工作方式0,输出;B口工作方式0,输入。数码管的a、b、g、dp段依次接8255的PA0、PA1.、PA7。开关k0、k1、k2和k3分别与PB0、PB1、PB2、PB3相连接。对该电路进行编程,使其满足下表要求。开关状态数码管显示K3K2K1K0闭闭闭闭0闭闭闭开1闭闭开闭2闭闭开开3闭开闭闭4闭开闭开5闭开开闭6闭开开开7开闭闭闭8开闭闭开9开闭开闭A开闭开开B开开闭闭C开开闭开D开开开闭E开开开开F7、8255接口应用实验(7)按图7-9连接电路图,8255 A口工作方式1,输入;B口工作
58、方式0,输出。A口的PA0、PA1和PA2分别与开关K0、K1、K2相连接;B口与8个发光二极管相连接;PC4与KK1-连接,由KK1-提供一个负脉冲作为选通信号(STB),PC3连接到8259的IRQ7上,8259的INT与系统8088CPU的INTR接在一起。根据这个电路编程实现:先预置开关K2K0为一组状态,然后按下KK1-产生一个负脉冲信号,输入到PC4上。用发光二极管LEDi亮来显示K2K0的状态。K2K0的开关状态与发光二极管亮的对应关系为下表所示开关状态发光二极管状态K2K1K0LEDi000LED0 亮001LED1 亮010LED2 亮011LED3 亮100LED4 亮10
59、1LED5 亮110LED6 亮111LED7 亮8、8255接口应用实验(8)按图7-10所示接线,编写程序,使8255端口A工作在方式0并作为输出口,端口B工作于方式1并作为输入口,则端口C的PC2成为选通信号输入端STB,PC0成为中断请求信号输出端INTR。当B口数据就绪后,通过发STB信号来请求CPU读取端口B数据并送端口A输出显示。9、8255接口应用实验(9)当只需显示单个数字时可采用数码显示管的静态显示方法:按图7-11连接线路,8255 A口工作方式0,输出,数码管的a、b、g、dp段依次接8255的PA0、PA1.、PA7。PA负责提供数码显示管显示数据所需要的段码,PC0
60、负责向数码显示管的共阴极提供一个低电平,以保证数码显示管正常工作。编程实现数码管循环延时显示十六进制数09、AF。10、8255接口应用实验(10)实际系统中经常要显示多位数字,若仍采用上述电路结构,就需要增加8255芯片,这不仅增大了显示系统的体积,也提高了系统的成本和功耗,此刻我们需要采用数码显示管的动态显示方法,连接图如图7-12所示。通过编程,让4个数码管轮流点亮,但在任何时候只让一个数码管点亮,若每位数码管点亮的时间选择为2ms ,经过8ms后又返回去将每位数字点亮一次,也就是每秒大约刷新125次。由于人眼可以接受的刷新速率约为每秒40200次。因此,这个刷新速率不会让人的眼睛感到字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公益类项目合同范本
- 双方解聘合同范本
- 烹饪原料知识练习题库及答案
- 南沙初中食堂承包合同范本
- 台湾履行合同范本
- 农村包清工合同范本
- 七年级组工作计划
- 七年级政治教学工作总结
- 单位招标合同范本
- 单间转租合租合同范本
- JGJ52-2006 普通混凝土用砂、石质量及检验方法标准
- 《运筹学》全套课件(完整版)
- 《检验检测机构资质认定评审准则》试题及答案
- 新能源汽车产业研究综述
- 2023-2024学年安徽省马鞍山市物理八下期末考试试题及答案解析
- 2024年江苏农牧科技职业学院单招职业适应性测试题库新版
- 第22课《陈涉世家》课件(共71张)
- 新能源汽车产业专利分析综述
- 2010年4月自考00371公安决策学试题及答案含解析
- 实验室仪器借用登记表
- 单肺通气与肺保护通气策略护理课件
评论
0/150
提交评论