1、32位微机原理与接口技术实验教程 启东计算机厂有限公司- 54 -第二部分 微机接口实验一、说明1下面的实验程序是根据我 们设计的实验模块电路 编写的,供用 户参考。2所有的实验程序均可以在DVCC32JHP 软件集成环境下运行和 调试。3在实验前必须先仔细阅读 随机配备的用户手册,以便对整个系统的硬件结构和设计思想有所了解,特别要仔细阅读软 件安装和使用部分,以便了解DVCC32JHP集成软件运行环境和操作方法,为后面顺利进行 编程实验做好充分准备。4图中虚线框内的电路 为我们设计的模块电路。虚 线 框外的电路为系统部分。模块电路和系统电路之间需要用单个导线或排线连接。通常控制 线 都是单个
2、的,数据 总线D0D7(JD1JD4)、地址总线 A0A7(JA1)、 A8A15(JA2)等用排 线连接。若模块内部有连线时,需要学生根据模块电路原理 图进行连接。5模块上的工作电源(+5V 、GND)在实验时从系统板接入(用二芯 连线),当用到12V电源时, 还需从系统 板接入12V电 源(用四芯连线)。在下面的实验程序中电路接线部分省略了电源接入这一步。6实验中凡是用到A/D或D/A电 路,在运行程序前,必须先将其基准电压调到+5V。7程序的退出是按PC机的ESC 键。8实验程序的C语言源文件在安装目 录下面的CPP目录下。二、实验程序目录1PortrASM 端口读写方式获取PCI板卡资
3、源2Portr1ASM 中断方式获取PCI板卡资源3YmqASM I/O地址译码4D273ASM 简单并行接口扩展输出5D244ASM 简单并行接口扩展输入6D8253_1ASM 8253计数器实验7D8253_2ASM 8253分频器实验8D8255_1ASM 可编程并行I/O接口实验9DA_1ASM 用D/A转换器产生锯齿波实验10DA_2ASM 用D/A转换器产生正弦波实验11AD_1ASM A/D模数转换实验12INT_1ASM 单中断实验13INT_2ASM 扩展8259中断实验14D8251ASM 串行通信实验(8251)15DRAM ASM 静态RAM读写实验16DMA_1 AS
4、M DMA传送实验(1)17DMA_2 ASM DMA传送实验(2)18DMA_3 ASM DMA传送实验(3)32位微机原理与接口技术实验教程 启东计算机厂有限公司- 55 -19D8255_2ASM 可编程并行接口、中断综合应用实验(1)20D8255_3ASM 可编程并行接口、中断综合应用实验(2)21LED_1ASM 七段数码管静态显示实验22LED_2ASM 七段数码管动态显示实验23JDQASM 继电器控制实验24QDQASM 竞赛抢答器设计实验25JTDASM 十字路口交通灯控制实验26BJDJASM 步进电机转速控制实验27ZLDJASM 直流电机转速控制实验28DZQASM
5、电子琴设计实验29LYJASM 数字录音机设计实验30JPXSHASM 键盘显示控制实验31D16C550_1ASM 新型串行控制器16C550应用实验32D16C550_2ASM 新型串行控制器16C550应用实验33DLCDASM 12864 图形点阵液晶显示控制实验34DLED8.ASM 88 点阵LED显示实验35DLED16.ASM 1616 点阵LED汉字显示实验36. DRAM32.ASM 32位数据宽度存储器读写实验37DMA32_1.ASM 32位数据宽度DMA传送实验38DMA32_2.ASM 32位数据宽度DMA传送实验通过模块的组合还可以组成很多设计性、 创新性、 综合
6、性实训项 目,例如:1数字钟,2频率计,3温度 测量控制, 4出租车计费, 5站点报站等。三、实验的一般步骤(1) 运行DVCC32JHP软件,选择编辑 Edit 菜单,根据 实验 内容的描述编写实验程序或选择Open菜单直接打开程序。(2) 使用“ASM编译” 菜单中“ 编译 +连接+运行”选项,对实验程序进行汇编、连接。汇编、 连接无误的话,就直接运行程序。 观察运行结果。 (3) 或使用动态调试,进 入调试环境, 观察调试过程中,指令执行情况,包括各寄存器及数据区内容的变化等。 (4) 查看实验结果,考察程序的正确性。 32位微机原理与接口技术实验教程 启东计算机厂有限公司- 56 -预
7、备实验 PCI设备查询和配置空间的读取一、实验目的1 学会使用 IO端口查找 PCI板卡的硬件资源。2 学会使用中断调用方式查找 PCI板卡的硬件资源。二、实验内容1根据配置空间原理使用IO端口方式 编写一个读PCI板卡配置空 间的程序, 该程序能够获得本机上DVCC板卡或所有PCI板卡的硬件资源,包括 IO、内存、中断占用情况。2根据配置空间原理使用中断 调用方式编写一个读PCI配置空 间的程序, 该程序能够获得本机上DVCC板卡或所有PCI板卡的硬件资源,包括 IO、内存、中断占用情况。以上两个实验都要纯在DOS状态下运行。三、实验步骤1 了解并熟悉 PCI 即插即用配置空间原理。2 了解
8、并熟悉 IO方式或中断方式获取配置空间的方法。3 编写端口读写方式或中断方式获取 DVCC板卡或所有 PCI板卡的硬件资源的程序。四、参考流程图1端口读写方式流程图如图1 。2中断方式流程图如图2。五、参考程序1端口读写方式源程序文件名: Portr.ASM(在文件夹“ASM_ 汇编程序”中)源程序清单如下(纯dos下才能使用):data segmentio_port_addre equ 0cf8h ;32位配置地址端口io_port_data equ 0cfch ;32位配置数据端口io_plx_id equ 0540610b5h ;DVCC卡设备及厂商IDio_9054base_addre
9、ss db 4 DUP(0) ;DVCC卡9054芯片I/O基地址暂存空间io_base_address db 4 DUP(0) ;DVCC卡I/O基地址暂存空间memory_base_address db 4 DUP(0) ;DVCC卡MEMORY基地址暂存空间interrupt_line db 2 DUP(0) ;DVCC卡中断号暂存空间pcicardnotfind db 0dh,0ah,DVCC pci card not find or address/interrupt error !,0dh,0ah,$io9054baseaddress db 0dh,0ah,DVCC pci car
10、d 9054 Chip I/O Base Address : ,$iobaseaddress db 0dh,0ah,DVCC pci card I/O Base Address : ,$memorybaseaddress db 0dh,0ah,DVCC pci card Memory Base Address : ,$intnumber db 0dh,0ah,DVCC pci card Interrupt Line : ,$32位微机原理与接口技术实验教程 启东计算机厂有限公司- 57 -enter_return db 0dh,0ah,$data endscode segmentassume
11、cs:code,ds:data,es:datastart:mov ax,datamov ds,axmov es,ax.386 ;386模式编译mov ebx,080000000hnext:add ebx,100hcmp ebx,081000000hjnz continuemov dx,offset pcicardnotfind ;显示未找到DVCC卡提示信息mov ah,09hint 21hmov ah,4chint 21h ;退出continue:mov dx,io_port_addremov eax,ebxout dx,eax ;写地址口mov dx,io_port_datain eax,
12、dx ;读数据口cmp eax,io_plx_idjnz next ;检查是否发现DVCC卡mov dx,io_port_addremov eax,ebxadd eax,14hout dx,eax ;写地址口mov dx,io_port_datain eax,dx ;读数据口mov dword ptr io_9054base_address,eaxand eax,1jz next ;检查是否为i/o基址信息mov eax,dword ptr io_9054base_addressand eax,0fffffffeh32位微机原理与接口技术实验教程 启东计算机厂有限公司- 58 -mov dwo
13、rd ptr io_9054base_address,ea ;去除i/o指示位并保存mov dx,io_port_addremov eax,ebxadd eax,18hout dx,eax ;写地址口mov dx,io_port_datain eax,dx ;读数据口mov dword ptr io_base_address,eaxand eax,1jz next ;检查是否为i/o基址信息mov eax,dword ptr io_base_addressand eax,0fffffffehmov dword ptr io_base_address,eax ;去除i/o指示位并保存mov dx
14、,io_port_addremov eax,ebxadd eax,1chout dx,eax ;写地址口mov dx,io_port_datain eax,dx ;读数据口mov dword ptr memory_base_address,eaxand eax,1hjnz next ;检查是否为memory基址信息mov eax,dword ptr memory_base_addressand eax,0fffffff0hmov dword ptr memory_base_address,eax ;去除memory指示位并保存mov dx,io_port_addremov eax,ebxadd
15、 eax,3chout dx,eax ;写地址口mov dx,io_port_datain eax,dx ;读数据口and eax,0ffhmov word ptr interrupt_line,ax ;去除interrupt其它指示位并保存mov dx,offset io9054baseaddress ;显示i/o提示信息mov ah,09hint 21hmov ax,word ptr io_9054base_addresscall disp ;显示i/o基地址32位微机原理与接口技术实验教程 启东计算机厂有限公司- 59 -mov dx,offset iobaseaddress ;显示i/
16、o提示信息mov ah,09hint 21hmov ax,word ptr io_base_addresscall disp ;显示i/o基地址mov dx,offset memorybaseaddress ;显示memory提示信息mov ah,09hint 21hmov ax,word ptr memory_base_address+2call disp ;显示memory基地址高16位mov ax,word ptr memory_base_addressshr ax,16call disp ;显示memory基地址低16位mov dx,offset intnumber ;显示interr
17、upt提示信息mov ah,09hint 21hmov ax,word ptr interrupt_linecall disp ;显示interrupt号mov dx,offset enter_return ;加回车符,换行符mov ah,09hint 21hmov ah,4chint 21h ;退出disp proc near ;显示子程序push dxpush cxpush bxmov cx,4mov bx,16loop1: push axpush cxsub bx,4mov cx,bxshr ax,cland al,0fh ;首先取低四位mov dl,alcmp dl,9 ;判断是否=9
18、jle num ;若是则为0-9,ASCII码加30H32位微机原理与接口技术实验教程 启东计算机厂有限公司- 60 -add dl,7 ;否则为A-F,ASCII码加37Hnum:add dl,30hmov ah,02h ;显示int 21hpop cxpop axloop loop1pop bxpop cxpop dxret ;子程序返回disp endpcode endsend start32位微机原理与接口技术实验教程 启东计算机厂有限公司- 61 -图1 图2YYYYYYYYNNNNNNNYYNNNYYN Y NY开始设置配置地址口超出地址范围否?读取厂商设备IDID号吻合否?读取9
19、054芯片IO基地址是IO地址吗?保存基地址值读取DVCC卡IO基地址是IO地址吗?保存基地址值读取DVCC卡MEMORY基地址是MEMORY地址吗?保存基地址值结束返回读取并保存DVCC卡中断号HHAOHAO 显 示 IO.内 存 .中 断 号 号卡中断号保存基地址值保存基地址值显示IO.内存.中断号开始PCI BIOS存在否?设备.厂商号相同否?否?子设备.厂商号相同?否?有9054芯片IO基址?址?有DVCC卡IO地址吗?吗??有MEMORY地址吗?保存基地址值有中断号?保存DVCC卡中断号显示IO.内存.中断号结束返回32位微机原理与接口技术实验教程 启东计算机厂有限公司- 62 -2
20、中断方式源程序文件名:Portr1.ASM (在文件夹“ASM_汇编 程序”中)源程序清单如下(纯dos下才能使用):data segmentio_plx_device_id equ 05406h ;DVCC卡设备IDio_plx_vendor_id equ 010b5h ;DVCC卡厂商IDio_plx_sub_id equ 0905410B5H ;DVCC卡子设备及厂商IDio_9054base_address db 4 DUP(0) ;DVCC卡9054芯片I/O基地址暂存空间io_base_address db 4 DUP(0) ;DVCC卡I/O基地址暂存空间memory_base_
21、address db 4 DUP(0) ;DVCC卡MEMORY基地址暂存空间interrupt_line db 2 DUP(0) ;DVCC卡中断号暂存空间pcicardnotfind db 0dh,0ah,DVCC pci card not find or address/interrupt error !,0dh,0ah,$io9054baseaddress db 0dh,0ah,DVCC pci card 9054 Chip I/O Base Address : ,$iobaseaddress db 0dh,0ah,DVCC pci card I/O Base Address : ,$
22、memorybaseaddress db 0dh,0ah,DVCC pci card Memory Base Address : ,$intnumber db 0dh,0ah,DVCC pci card Interrupt Line : ,$enter_return db 0dh,0ah,$data endscode segmentassume cs:code,ds:data,es:datastart:mov ax,datamov ds,axmov es,ax.386 ;386模式编译MOV AX,0B101HINT 1AHJC EXIT ;检查PCI BIOS是否存在MOV AX,0B102
23、HMOV CX,io_plx_device_idMOV DX,io_plx_vendor_idMOV SI,0INT 1AHJC notfind ;检查DVCC卡是否安装,设备号、厂商号MOV AX,0B10AHMOV DI,02CHINT 1AHJC notfind32位微机原理与接口技术实验教程 启东计算机厂有限公司- 63 -CMP ECX,IO_PLX_SUB_IDJNZ notfind ;检查DVCC卡是否安装,子设备号、厂商号MOV AX,0B10AHMOV DI,14HINT 1AHJC notfind ;读DVCC卡9054芯片I/O基址信息Mov dword ptr io_9
24、054base_address,ecxAnd ecx,1Jz notfind ;检查是否为i/o基址信息Mov ecx,dword ptr io_9054base_addressAnd ecx,0fffffffehMov dword ptr io_9054base_address,ecx ;去除i/o指示位并保存MOV AX,0B10AHMOV DI,18HINT 1AHJC notfind ;读DVCC卡I/O基址信息Mov dword ptr io_base_address,ecxAnd ecx,1Jz notfind ;检查是否为i/o基址信息Mov ecx,dword ptr io_b
25、ase_addressAnd ecx,0fffffffehMov dword ptr io_base_address,ecx ;去除i/o指示位并保存MOV AX,0B10AHMOV DI,1CHINT 1AHJC notfind ;读DVCC卡MEMORY基址信息Mov dword ptr memory_base_address,ecxAnd ecx,1hJnz notfind ;检查是否为memory基址信息Mov ecx,dword ptr memory_base_addressAnd ecx,0fffffff0hMov dword ptr memory_base_address,ecx
26、 ;去除memory指示位并保存MOV AX,0B10AHMOV DI,3CHINT 1AHJC notfind ;读DVCC卡中断信息And cx,0ffhMov word ptr interrupt_line,cx ;去除interrupt其它指示位并保存32位微机原理与接口技术实验教程 启东计算机厂有限公司- 64 -Mov dx,offset io9054baseaddress ;显示i/o提示信息Mov ah,09hInt 21hMov ax,word ptr io_9054base_addressCall disp ;显示i/o基地址Mov dx,offset iobaseaddr
27、ess ;显示i/o提示信息Mov ah,09hInt 21hMov ax,word ptr io_base_addressCall disp ;显示i/o基地址Mov dx,offset memorybaseaddress ;显示memory提示信息Mov ah,09hInt 21hMov ax,word ptr memory_base_address+2Call disp ;显示memory基地址高16位Mov ax,word ptr memory_base_addressShr ax,16Call disp ;显示memory基地址低16位Mov dx,offset intnumber
28、;显示interrupt提示信息Mov ah,09hInt 21hMov ax,word ptr interrupt_lineCall disp ;显示中断号Mov dx,offset enter_return ;加回车符,换行符Mov ah,09hInt 21hJmp exitnotfind:mov dx,offset pcicardnotfind ;显示未找到DVCC卡提示信息mov ah,09hint 21hexit:mov ah,4chint 21h ;退出disp proc near ;显示子程序push dxpush cxpush bx32位微机原理与接口技术实验教程 启东计算机厂
29、有限公司- 65 -mov cx,4mov bx,16loop1: push axpush cxsub bx,4mov cx,bxshr ax,cland 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 21hpop cxpop axloop loop1pop bxpop cxpop dxret ;子程序返回disp endpcode endsend start32位微机原理与接口技术实验教程
30、 启东计算机厂有限公司- 66 -实验一 I/O地址译码一、实验目的掌握I/O地址译码电路的工作原理。二、实验原理和内容实验电路如图1-1所示,图中线 路两端有节点的信号线需要用 户用实验导线连接起来。其中74LS74为D触发器,可直接使用 实验台上部系统板上的D 触发器。 74LS138为地址译码器。译码输出端Y0Y7在实验台中间系统板上引出,每个 输出端包含 8个地址,即:Y0:280H287H; Y4:2A0H2A7H;Y1:288H28FH; Y5:2A8H2AFH;Y2:290H297H; Y6:2B0H2B7H;Y3:298H29FH; Y7:2B8H2BFH;当CPU执行I/ O
31、指令且地址在280H2BFH范围内, 译码器 选中,必有一根译码线输出负脉冲。例如:执行下面两条指令, 对应的译码输出脚输出一个 负脉冲。MOV DX,PORT1OUT DX,AL(或 IN AL,DX)执行下面两条指令, 对应的译码输出脚输出一个 负脉冲。MOV DX,PORT2OUT DX,AL(或 IN AL,DX)利用这个负脉冲控制发光二极管L0闪烁发光(亮灭循环),时间间隔通过软件延时实现。注意:命令中的端口地址PORT1、PORT2 是根据DVCC卡的I/O基址再加上偏移量计算出来的,不同的微机DVCC卡的I/O基址可能不同,需要事先查找出来,详细见用户手册第五章节5.3中第101
32、2点介绍的查找方法。 计算公式如下:PORT1 = 查找出的DVCC卡的I/O基址 + 偏移量其中:偏移量 = Y0Y7中所选定的任意一个译码地址值-280H。下面的程序用到Y4,即2A0H。假设DVCC卡的I/O基地址 =0C400H,经计算PORT1= 0C420H 。三、编程提示1实验电路中D触发器的CLK 端输入脉冲时,上升沿使 Q端 输出高电平,L0发光,CLR端加低电平L0灭。2由于DVCC卡使用PCI总线,所以分配的IO地址每台微机可能都不同,编程时需要了解当前的微机使用那段IO地址并进行设置, 获取方法见用户手册 第五章节5.3第1012点中的介绍。下面的程序YMQ.ASM(在
33、文件 夹“ ASM_汇编程序”中)是需要用户自己根据查找到的DVCC卡的I/O基址替换到程序中带下划线的位置(0C400H);程序YMQ.ASM(在文件夹“ASM_汇编程序_自动”中)是通过程序自动获取DVCC卡资源分配的实验程序。32位微机原理与接口技术实验教程 启东计算机厂有限公司- 67 -12 3U16ASN74LS0045 6U16BSN74LS00910 8U16CSN74LS001213 11U16DSN74LS0012345611128U17SN74LS30A1 B2C3G16 G2A4G2B5Y0 15Y1 14Y2 13Y3 12Y4 11Y5 10Y6 9Y7 7U18S
34、N74LS138GNDVCCA3A4A5A6A7A8A9AENIORIOWY0Y1Y2Y3Y4Y5Y6Y7PRE 4CLK3D 2CLR 1Q5 Q6U14ASN7474+5VL0图 1-1四、参考程序1手动替换I/O基址的源程序文件名 : YMQ.ASM(在文件夹 “ASM_汇编程序”中)源程序清单如下:ioport equ 0C400H-0280houtport1 equ ioport+2a0houtport2 equ ioport+2a8hcode segmentassume cs:codestart:mov dx,outport1out dx,alcall delay ;调延时子程序m
35、ov dx,outport2out dx,alcall delay ;调延时子程序mov ah,1int 16hje startmov ah,4chint 21hdelay proc near ;延时子程序mov bx,2000lll: mov cx,0ll: loop lldec bxjne lll32位微机原理与接口技术实验教程 启东计算机厂有限公司- 68 -retdelay endpcode endsend start2自动获取DVCC卡资源的源程序文件名 :YMQ.ASM(在文件 夹“ASM_汇编程序_自动”中)源程序清单如下:outport1 equ 2a0h-0280houtpo
36、rt2 equ 2a8h-0280hio_port_addre equ 0cf8h ;32位配置地址端口io_port_data equ 0cfch ;32位配置数据端口io_plx_id equ 0540610b5h ;DVCC卡设备及厂商IDdata segmentio_9054base_address db 4 DUP(0) ;DVCC卡9054芯片I/O基地址暂存空间io_base_address db 4 DUP(0) ;DVCC卡I/O基地址暂存空间memory_base_address db 4 DUP(0) ;DVCC卡MEMORY基地址暂存空间interrupt_line d
37、b 2 DUP(0) ;DVCC卡中断号暂存空间pcicardnotfind db 0dh,0ah,DVCC pci card not find or address/interrupterror !,0dh,0ah,$io9054baseaddress db 0dh,0ah,DVCC pci card 9054 Chip I/O Base Address : ,$iobaseaddress db 0dh,0ah,DVCC pci card I/O Base Address : ,$ memorybaseaddress db 0dh,0ah,DVCC pci card Memory Base
38、Address : ,$intnumber db 0dh,0ah,DVCC pci card Interrupt Line : ,$enter_return db 0dh,0ah,$data endsstacks segmentdb 100 dup(?)stacks endscode segmentassume cs:code,ds:data,SS:STACKS,es:data.386start:mov ax,datamov ds,axmov es,axmov ax,stacksmov ss,axcall findDVCC1 ;查找DVCC卡资源并显示start1:mov dx,word pt
39、r io_base_addressadd dx,outport1out dx,al32位微机原理与接口技术实验教程 启东计算机厂有限公司- 69 -call delay ;调延时子程序mov dx,word ptr io_base_addressadd dx,outport2out dx,alcall delay ;调延时子程序mov ah,1int 16hje start1mov ah,4chint 21hdelay proc near ;延时子程序mov bx,2000lll: mov cx,0ll: loop lldec bxjne lllretdelay endpfindDVCC1 p
40、roc near ;查找DVCC卡资源并显示pushadpushfdmov ebx,080000000hfindDVCC1_next:add ebx,100hcmp ebx,081000000hjnz findDVCC1_continuemov dx,offset pcicardnotfind ;显示未找到DVCC卡提示信息mov ah,09hint 21hmov ah,4chint 21h ;退出findDVCC1_continue:mov dx,io_port_addremov eax,ebxout dx,eax ;写地址口mov dx,io_port_datain eax,dx ;读数据
41、口cmp eax,io_plx_idjnz findDVCC1_next ;检查是否发现DVCC卡mov dx,io_port_addremov eax,ebx32位微机原理与接口技术实验教程 启东计算机厂有限公司- 70 -add eax,14hout dx,eax ;写地址口mov dx,io_port_datain eax,dx ;读数据口mov dword ptr io_9054base_address,eaxand eax,1jz findDVCC1_next ;检查是否为i/o基址信息mov eax,dword ptr io_9054base_addressand eax,0fff
42、ffffehmov dword ptr io_9054base_address,eax ;去除i/o指示位并保存mov dx,io_port_addremov eax,ebxadd eax,18hout dx,eax ;写地址口mov dx,io_port_datain eax,dx ;读数据口mov dword ptr io_base_address,eaxand eax,1jz findDVCC1_next ;检查是否为i/o基址信息mov eax,dword ptr io_base_addressand eax,0fffffffehmov dword ptr io_base_addres
43、s,eax ;去除i/o指示位并保存mov dx,io_port_addremov eax,ebxadd eax,1chout dx,eax ;写地址口mov dx,io_port_datain eax,dx ;读数据口mov dword ptr memory_base_address,eaxand eax,1hjnz findDVCC1_next ;检查是否为memory基址信息mov eax,dword ptr memory_base_addressand eax,0fffffff0hmov dword ptr memory_base_address,eax ;去除memory指示位并保存
44、mov dx,io_port_addremov eax,ebxadd eax,3chout dx,eax ;写地址口mov dx,io_port_datain eax,dx ;读数据口and eax,0ffhmov word ptr interrupt_line,ax ;去除interrupt其它指示位并保存mov dx,offset io9054baseaddress ;显示i/o提示信息mov ah,09h32位微机原理与接口技术实验教程 启东计算机厂有限公司- 71 -int 21hmov ax,word ptr io_9054base_addresscall findDVCC1_dis
45、p ;显示i/o基地址mov dx,offset iobaseaddress ;显示i/o提示信息mov ah,09hint 21hmov ax,word ptr io_base_addresscall findDVCC1_disp ;显示i/o基地址mov dx,offset memorybaseaddress ;显示memory提示信息mov ah,09hint 21hmov ax,word ptr memory_base_address+2call findDVCC1_disp ;显示memory基地址高16位mov ax,word ptr memory_base_addressshr
46、ax,16call findDVCC1_disp ;显示memory基地址低16位mov dx,offset intnumber ;显示interrupt提示信息mov ah,09hint 21hmov ax,word ptr interrupt_linecall findDVCC1_disp ;显示interrupt号mov dx,offset enter_return ;加回车符,换行符mov ah,09hint 21hpopfdpopadretfindDVCC1 endpfindDVCC1_disp proc near ;显示子程序push dxpush cxpush bxmov cx,
47、4mov bx,16findDVCC1_disp_loop1:push axpush cxsub bx,4mov cx,bxshr ax,cland al,0fh ;首先取低四位mov dl,alcmp dl,9 ;判断是否=932位微机原理与接口技术实验教程 启东计算机厂有限公司- 72 -jle findDVCC1_disp_num ;若是则为0-9,ASCII码加30Hadd dl,7 ;否则为A-F,ASCII码加37HfindDVCC1_disp_num:add dl,30hmov ah,02h ;显示int 21hpop cxpop axloop findDVCC1_disp_loop1pop bxpop cxpop dxret ;子程序返回findDVCC1_disp en