1、$;0AH为换行、0DH为回车。MES1 DB Show a as hex:,0AH,0DH,SD DB aDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AX MOV DX,OFFSET MES ;显示退出提示 MOV AH,09H INT 21H MOV DX,OFFSET MES1 ;show message MOV AH,09H INT 21H MOV SI,OFFSET SD MOV AL,SI AND AL,0F0H ;取高4位,并显示。 SHR AL,4CMP AL,0AH ;是否是A以上的
2、数JB C2 ADD AL,07H C2: ADD AL,30H MOV DL,AL ;show character MOV AH,02H INT 21H AND AL,0FH ;取低4位,并显示。 CMP AL,0AH JB C3 ADD AL,07HC3: ADD AL,30H MOV DL,AL MOV AH,02HKEY: MOV AH,1 ; 判断是否有按键按下? INT 16H ;BIOS调用,读键盘缓冲区字符 JZ KEY ;ZF=1缓冲区空,无键盘输入 MOV AX,4C00H ; go back to dosCODE ENDS END START实验二 数码转换程序实验掌握不
3、同进制数及编码相互转换的程序设计方法。计算机输入设备输入的信息一般是由ASCII码或BCD码表示的数据或字符,CPU一般均用二进制数进行计算,处理结果的输出又必须依照外设的要求变为ASCII码、BCD码或七段显示码等。因此,在应用软件中,各类数制的转换和代码的转换是必不可少的。计算机与外设间的数码转换关系如图2所示。 要求编写显示子程序。图2 计算机与外设间的数码转换关系(1) 将ASCII码表示的十进制数转换为二进制数 十进制数可以表示为:,其中Di代表十进制数1、2、39、0。上式可转换为:由上式可归纳十进制数转换为二进制的方法:从十进制数的最高位Dn开始作乘10加次位的操作,依次迭代类推
4、,则可求出二进制数结果。本实验要求将缓冲区中的一个五位十进制数00012的ASCII码转换成二进制数,并将转换结果按位显示在屏幕上。转换过程的参考流程如图3所示。图3 十进制ASCII转换为二进制数参考流程将ASCII码十进制数转换为二进制数 DW 256 DUP ( ?DDATA SEGMENTThe ascii code of decimal code are:BUF DB 30H,30H,30H,31H,32H DB 10H DUP ( 0 )DDATA ENDSCODE SEGMENTDDATA MOV AX,DDATA MOV DS,AX MOV SI,OFFSET BUF MOV
5、BX,000AH MOV CX,0004H MOV AH,00H SUB AL,30HA1: MUL BX ADD AL,SI+01 INC SI LOOP A1 MOV SI,AX MOV DX,OFFSET MES1 MOV AH,09H INC SI ;显示高字节 CALL SHOW DEC SI ;显示低字节 MOV AX,4C00HSHOW PROC NEAR ;编写显示子程序 .SHOW ENDPCODE ENDS END START(2) 将十进制数的ASCII码转换为BCD码 本实验要求将键盘输入的一个五位十进制数54321的ASC码存放在数据区中,转换为 BCD 码后 ,并将
6、转换结果按位分别显示于屏幕上 。若输入的不是十进制数的ASC码,则输出“FF”。提示:一字节ASC码取其低四位即变为BCD码。转换部分的实验流程参见图4。图4 十进制ASCII转换为BCD码数参考流程将十进制数的ASCII码转换为BCD码STACK1 SEGMENT STACKMES1 DB The BCD code of decimal are:BUF DB 31H,32H,33H,34H,35H MOV AX,DDATA MOV DS,AX MOV CX,0005H MOV DI,OFFSET BUF MOV BL,0FFH MOV AL, DI CMP AL,3AH ;比较AL中的数是否
7、是09的ASCII码 JNB A2 SUB AL,30H JB A2 MOV BL,ALA2: MOV AL,BL MOV DI+05H,AL INC DI MOV SI ,DI MOV CX,05H MOV DX,OFFSET MES1 INT 21HA3: MOV DL,20H INC SI LOOP A3 MOV AX,4C00HSHOW PROC NEAR ;SHOW ENDP(1) 运行Tddebug软件,选择Edit菜单,根据实验内容描述的数码转换内容分别编写实验程序。(2) 利用Compile菜单中的Compile和Link对实验程序进行汇编、连接。(3) 利用Rmrun菜单中的
8、Run,运行程序,观察运行结果。(5) 编写显示子程序,并更改数据区中的数据,考察程序的正确性。实验三 循环程序设计实验1. 实验目的掌握循环程序的设计方法。2. 实验设备3. 实验内容及说明一个循环程序通常由以下几个部分组成:1) 循环初始化部分:用于对相关内存单元及寄存器设置初始值,如设置地址指针、循环次数、某些标志位等。只有正确地进行了初始化设置,循环程序才能正确运行并及时停止。2) 循环体:对要求重复执行的程序段部分,对应于要求重复执行的操作。3) 循环控制部分:为下一轮处理修正地址指针及循环次数等,并判断循环结束的条件是否满足,若满足则退出循环。4) 循环结束部分:用于保存循环运行的
9、结果等。5) 编写显示子程序,并更改数据区中的数据,考察程序的正确性。4. 编写程序完成对10个数的求和并显示(P101)分析:需分配空间保存和数(SUM),在循环体中进行求和操作。参考程序清单:DATA SEGMENTBUFFER DW 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 原始10个数据SUM DW ? ; 存放和数STAC SEGMENT STACK STACK DB 100 DUP ( ?STAC ENDSCODE, DS: MOV AX,DATA MOV AX,0 ;AX中为和数,初始为0 MOV DI,OFFSET SUM ;存放结果地址送DI MOV B
10、X,OFFSET BUFFER ;数据缓冲区首地址,送BX MOV CX,10 ;循环次数送CXLOOP1: ADD AX,BX ;累加 INC BX ;修改数据缓冲区地址 INC BX DEC CX ;次数减1 JNZ LOOP1 ;到10次了吗?不到,;转LOOP1 MOV DI,AX ;到10次,存放结果 ;填写调用指令 MOV AX,4C00H ; 返回DOSSHOW . ;CODE ENDS实验四 子程序设计实验(1) 掌握子程序的定义调用方法。(2) 掌握系统功能调用程序的使用和编写方法。将内存中的一串1位十六进制数转换为其对应的ASCII码并显示(P105)。例如:十六进制2所对
11、应的ASCII码为32H,而十六进制数C所对应ASCII码为C(即43H)。将一个十六进制数转化为其对应的ASCII码的功能设计为子程序。主程序分若干次调用该子程序,但每次调用的参数为不同的待转换的十六进制数。4. 程序清单如下:HEXBUF DB 02H, 08H, 0AH, 09H, 0FH ;待转换的一串1位十六进制数COUNT EQU $ - HEXBUF ;COUNT的值为这一串十六进制数的个数STAC SEGMENT STACK DB 100 DUP ( ?STAC ENDS ASSUME CS:CODE, DS:DATA, SS:STAC子程序HEXD:将1位十六进制数转换为其对
12、应的ASCII码入口参数:AL含待转换的1位十六进制数出口参数:AL含转换完的结果(ASCII码)HEXD PROC NEAR CMP AL, 0AH JL ADDZ ADD AL,7H ;A-0-0AHADDZ: ;填写指令 RETHEXD ENDP以下为主程序BEGIN: MOV DS,AX MOV BX,OFFSET HEXBUF MOV CX,COUNTREPEAT0: MOV AL,BX CALL HEXD MOV BX,AL LOOP REPEAT0 END BEGIN实验五 8259中断控制器应用实验 1 实验目的 (1) 学习中断控制器8259的工作原理。(2) 掌握可编程控制
13、器8259的应用编程方法。2 实验设备 PC微机一台、TD-PIT+ 实验系统一套。3 实验内容 (1) 利用PC机给实验系统分配的中断线,设计一个单中断应用。使用单次脉冲模拟中断产生。编写中断处理程序,在显示器屏幕上显示一个字符。(2) 利用实验平台上8259控制器对扩展系统总线上的中断线INTR进行扩展。编写程序对8259控制器的IR0和IR1中断请求进行处理。4 实验原理 (1) 8259控制器的介绍 中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。它将中断源优先级排队及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中
14、断,中断结构可以由用户编程来设定。同时,在不需增加其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。它的管理功能包括:a) 记录各级中断源请求;b) 判别优先级,确定是否响应和响应哪一级中断;c) 响应中断时,向CPU传送中断类型号。 8259A的命令共有7个,一类是初始化命令字,另一类是操作命令。8259A的编程就是根据应用需要将初始化命令字ICW1-ICW4和操作命令字OCW1- OCW3分别写入初始化命令寄存器组和操作命令寄存器组。(2) 8259寄存器及命令的控制访问在硬件系统中,8259仅占用两个外设接口地址,在片选有效的情况下,利用A0来寻址不同的寄存器和
15、命令字。对寄存器和命令的访问控制如表1所示。表1 8259寄存器及命令的控制访问(3) PC微机系统中的8259 在80x86系列PC微机系统中,系统中包含了两片8259A中断控制器,经级连可以管理15级硬件中断,但其中部分中断号已经被系统硬件占用,具体使用情况如表2示。两片8259A的端口地址为:主片8259使用020H和021H两个端口;从片使用0A0H和0A1H两个端口。系统初始化两片8259的中断请求信号均采用上升沿触发,采用全嵌套方式,优先级的排列次序为0级最高,依次为1级、8级15级,然后是3级7级。在扩展系统总线上的INTR对应的中断线就是PC机保留中断其中的一个。对INTR中断
16、的初始化PC机已经完成,在使用时主要是将其中断屏蔽打开,修改中断向量。表2 PC微机系统中的硬件中断5 实验说明及步骤 (1) 中断查询方式应用实验8259支持查询方式检测中断请求,具体过程为:设置8259 OCW3中的P位为1即可执行查询命令,8259将下一个I/O读命令视作一次中断响应。如果有中断请求,则置ISR中的相应位并读优先级。从OCW3写操作到I/O读操作期间禁止中断,读出字节的最高位为1表示有中断,最低3位(D0-D2)为最高优先级中断请求源的编码。查询字格式如图5所示。图5 8259 OCW3查询字格式本实验要求使用这种方法编写程序处理实验单元8259 IR0和IR1请求的中断
17、,IR0请求在屏幕上显示字符“0”,IR0请求则在屏幕上显示字符“1”以示中断到来。IR0和IR1分别用一个单次脉冲的上升沿模拟中断产生。参考流程如图6所示,参考实验接线图如图7所示。图6 实验参考流程图注意:P=1的OCW3可作为向8259A发出的查询命令,表明用查询方式决定中断优先级的次序。具体步骤:向8259A发P=1的OCW3命令(A0=0);同一地址(A0=0)读指令(查询字格式,图5),将起中断识别作用。图7 参考实验接线图实验步骤如下:a) 确认从PC机引出的两根扁平电缆已经连接在实验平台上。b) 运行Tdpit集成操作软件,查看系统资源分配情况,记录与所用片选信号对应的I/O端
18、口始地址。c) 参考实验流程图编写程序,注意使用正确的端口地址,然后编译链接。d) 参考实验接线图连接实验线路。e) 运行程序,按动KK1+、KK1+按键,观察中断响应是否正常。8259中断查询方式应用实验代码* *根据查看端口资源修改下列符号值*IOY0 EQU 9C00H ;片选IOY0对应的端口始地址* *MY8259_ICW1 EQU IOY0+00H ;实验系统中8259的ICW1端口地址MY8259_ICW2 EQU IOY0+04H ;实验系统中8259的ICW2端口地址MY8259_ICW3 EQU IOY0+04H ;实验系统中8259的ICW3端口地址MY8259_ICW4
19、 EQU IOY0+04H ;实验系统中8259的ICW4端口地址MY8259_OCW1 EQU IOY0+04H ;实验系统中8259的OCW1端口地址MY8259_OCW2 EQU IOY0+00H ;实验系统中8259的OCW2端口地址MY8259_OCW3 EQU IOY0+00H ;实验系统中8259的OCW3端口地址CODE SEGMENTCODE MOV DX,MY8259_ICW1 ;初始化实验系统中8259的ICW1 MOV AL,13H ;边沿触发、单片8259、需要ICW4 OUT DX, AL MOV DX,MY8259_ICW2 ;初始化实验系统中8259的ICW2
20、MOV AL,08H OUT DX,AL MOV DX,MY8259_ICW4 ;初始化实验系统中8259的ICW4 MOV AL,01H ;非自动结束EOI MOV DX,MY8259_OCW1 ;初始化实验系统中8259的OCW1 MOV AL,0FCH ;打开IR0和IR1的屏蔽位QUERY: MOV AH,1 ;判断是否有按键按下BIOS调用 JNZ QUIT ;ZF=0,有按键则退出 MOV DX,MY8259_OCW3 ;向8259的OCW3发送查询命令,P=1 MOV AL,0CH IN AL,DX ;读出查询字(查询字格式,图5) TEST AL,80H ;判断中断是否已响应
21、JZ QUERY ;没有响应则继续查询 AND AL,03H ;中断源请求编码, CMP AL,00H JE IR0ISR ;若为IR0请求,跳到IR0处理程序 JNE IR1ISR ;若为IR1请求,跳到IR1处理程序 JMP QUERYIR0ISR:MOV AL,30H ;IR0处理,显示字符0 MOV AH,0EH INT 10H MOV AL,20H INT 10H JMP EOIIR1ISR:MOV AL,31H ;IR1处理,显示字符1 INT 10H ;BIOS调用,显示字符(功能号AH=0EH)EOI: MOV DX,MY8259_OCW2 ;向实验系统中8259发送中断结束命
22、令 JMP QUERY QUIT: MOV AX,4C00H ;结束程序退出 END START实验六 8255并行控制器应用实验 1(1) 掌握8255的工作方式及应用编程。(2) 掌握8255的典型应用电路接法。3. 实验内容 (1) 基本输入输出实验。编写程序,使8255的A口为输出,B口为输入,完成拨动开关到数据灯的数据传输。要求只要开关拨动,数据灯的显示就改变。(2) 流水灯显示实验。编写程序,使8255的A口和B口均为输出,实现16位数据灯的相对循环显示。(2) 实验原理 并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。CPU和接口之间的数据传送总是并行的,即可以
23、同时传递8位、16位、32位等。8255可编程外围接口芯片具有A、B、C三个并行接口,能在以下三种方式下工作:方式0-基本输入/出方式、方式1-选通输入/出方式、方式2-双向选通工作方式。8255工作方式控制字和C口按位置位/复位控制字格式如图8所示。图8 8255控制字格式5. 实验说明及步骤 本实验使8255端口A工作在方式0并作为输出口,端口B工作在方式0并作为输入口。用一组开关信号接入端口B,端口A输出线接至一组数据灯上,然后通过对8255芯片编程来实现输入输出功能。参考程序流程如图9所示。图9 8255参考程序流程图图10 8255参考接线图实验步骤:b) 参考图10所示连接实验线路。c) 首先运行CHECK程序,查看I/O空间始地址。d) 利用查出的地址编写程序,然后编译链接。e) 运行程序,拨动开关,看数据灯显示是否正确。8255基本输入输出实验代码*根据查看端口资源修改下列符号值*IOY0 EQU 9C00H ;*MY8255_A EQU IOY0+0
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1