DSEG1 SEGMENT USE16
HELLO DB 'Hello! everybody' DB 'This is my first PM program!' DB 256H DUP(0) D1LEN =$-1 DSEG1 ENDS ;定义目标数据段
DSEG2 SEGMENT USE16 BUFLEN = 256
BUFFER DB BUFLEN DUP(0) DSEG2 ENDS CSEG SEGMENT USE16 ASSUME CS:CSEG,DS:DSEG START PROC MOV AX,DATAS_SEL ;装入源数据段选择子 MOV DS,AX MOV AX,DATAD_SEL ;装入目标数据段选择子 MOV ES,AX CLD XOR SI,SI XOR DI,DI MOV CX,BUFLEN M1: MOVSB LOOP M1 INT 0FFH ;返回调试系统 START ENDP CLEN =$-1 CSEG ENDS END START
程序成功装入后,使用GDT命令查看GDT中内容,程序执行前后各项均只有TYPE值改变:数据段、代码段分别由 2、8变为 3、9,表示其分别由读/写状态、只执行状态转变为读/写,已访问状态、只执行,已访问状态,使用D0018:00查看目标数据段内容发现,程序执行前后,其内容改变,并且变得与源数据段内容一致,数据复制成功。 4、实验结果总结
通过这次实验我对保护模式下的汇编语言编程有了进一步的理解,也通过这次实验和第一次实验的对比,明白了汇编语言实模式与保护模式编程的异同。
在实验的具体过程中,我也更深入的理解了课堂上所讲的关于描述符的结构组成与定义等理论知识,巩固了课堂学习效果。
实验三:8255并行接口应用实验(2012年5月20日) 实验目的及实验内容
实验目的:
1、掌握8255的工作方式及应用编程 2、掌握8255的典型应用电路接法 实验内容:
流水灯显示实验。编写程序,使8255的A口和B口均为输出,实现16位数据灯的相对循环显示。 实验原理:
并行接口是以数据的字节为单位向I/O设备或被控制对象传递信息的。CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位和32位等。8255可编程外围接口芯片是Inter公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,因+5V单电源供电,能在以下三种方式下工作:方式0—基本输入/输出方式,方式1—选通输入/输出方式,方式2—双向选通工作方式。
实验环境及实验步骤
实验环境: PC机一台,TD-PIT/TD-PIT-B实验装置一套 实验步骤:
首先分别向A口和B口写入7FH和FEH,然后分别将该数右移和左移一位,再送到端口上,这样循环下去,从而实现流水灯的显示。
1.设计实验线路图,并将PCI总线扩展卡上的ADD-ON总线与仿真ISA总线进行连接,完成线路连接。
2.编写实验程序,检查无误后汇编、连接。编写程序时首先分别向A口和B口写入7FH 和FEH,然后将该数右移和左移一位,再送到端口上,这样循环下去,从而实现流 水灯的显示。 3.打开试验箱电源,运行程序,观察数据灯的显示。
实验过程与分析
1.方式控制字的确定
实验要求A口、B口在工作方式0下输出,C口高四位低四位均输出,说一查表易知 方式控制字为1000000B即80H。 2.A口B口数据移位的实现
A口与B口数据移位的主要作用是利用数据的二进制位信息控制LED管的显示。如A 口初始值为7FH即01111111B,此时PA0对应的D8灯亮,而PA1~PA7对应的D9~D15灯 灭。此时A口数据循环右移移位变为10111111B,此时PA1对应的D9灯亮,而PA0PA2~PA7 对应的D8D10~D15灯灭.如此循环则可以实现流水灯的效果。数据的循环右(左)移用汇 编命令ROR(ROL)即可。
源代码:
MY8255_A EQU 0C460H MY8255_B EQU 0C461H MY8255_C EQU 0C462H MY8255_MODE EQU 0C463H
DATA SEGMENT
LA DB ? LB DB ? DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA MOV DS,AX
MOV DX,MY8255_MODE MOV AL,80H OUT DX,AL
MOV DX,MY8255_A MOV AL,7FH OUT DX,AL MOV LA,AL
MOV DX,MY8255_B MOV AL,0FEH OUT DX,AL MOV LB,AL CALL DALLY A1: MOV AL,LA ROR AL,1 MOV LA,AL
MOV DX,MY8255_A OUT DX,AL MOV AL,LB ROL AL,1 MOV LB,AL
MOV DX,MY8255_B OUT DX,AL CALL DALLY CALL BREAK JMP A1
DALLY: MOV CX,3FFH D1: MOV AX,0FFFFH D2: DEC AX JNZ D2 LOOP D1 RET
BREAK PROC NEAR MOV AH,06H MOV DL,0FFH
INT 21H JE RETURN MOV AX,4C00H INT 21H RETURN: RET BREAK ENDP
CODE ENDS
END START 实验结果总结
通过这次实验我了解了16550串行接口的工作方式及应用,对通讯的相关知识有了一定的了解。此外对16550芯片中的各个接口的作用以及其中各个寄存器的作用有了比较深入的理解。当然也通过流水灯实验,对外面大街上霓虹灯的实现原理有了初步的了解。
实验四:16550串行接口应用实验(2012年 5月27日) 实验目的及实验内容 实验目的:
1. 掌握16550的工作方式及应用。 2.学习有关串行同讯的知识。 实验内容:
编写程序,将一串数据发送至串口,再接受回来显示,实现串行自发自收。 实验原理:
16550是一种连接任何类型虚拟串行接口的可编程通讯接口,与Inter微处理器完全兼容地使用非常广泛的异步接受器/发送器(UART)。它内置了16字节的FIFO缓冲,最大通信速率可达115Kb/s,是现代基于微处理器设备包括PC机和许多调制解调器在内的最普通的通信接口。
1.端口地址的使用
3
16550的负责寄存器选择的地址线是三位A2A1A0,最大只能选择2=8个,但是16550的内部寄存器有11个。为解决这一矛盾,可在访问除数寄存器时,令DLAB位为“1”;访问接受数据寄存器、发送保持寄存器和中断允许寄存器时,令DLAB位置“0”。 2.寄存器控制字的说明
线路控制寄存器LCR,主要用于指定异步串行通信的数据格式。 线路状态寄存器LSR,主要是向处理器提供有关数据传输的状态。 3.波特率除数寄存器的值设置
除数寄存器值=基准时钟频率÷(16×波特率)
因为16550芯片输入的基准时钟频率为1.8432MHZ,查表知若波特率为9600b/s,则除数寄存器值为000CH,DLH中应填00H,DLL中应填0CH。 4.中断允许寄存器
16550共有4级中断,按优先级从高到低依次为:接收出错中断、接收缓冲器满中断、发送保持寄存器空中断和MODEM输入状态改变中断。 实验环境及实验步骤
实验环境:PC机一台,TD-PIT/TD-PIT-B实验装置一套。