微机原理实验指导书_第1页
微机原理实验指导书_第2页
微机原理实验指导书_第3页
微机原理实验指导书_第4页
微机原理实验指导书_第5页
已阅读5页,还剩115页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1目目 录录第一章第一章 TD-PIT+实验系统的硬件环境实验系统的硬件环境.2一. 概述.2二. 系统总线单元电路.3第二章第二章 32 位微机原理软件实验位微机原理软件实验.15实验一 四则运算.15实验二 均值滤波.18实验三 代码转换.22实验四 字符串冒泡排序.26实验五 描述符和描述符表实验.29实验六 局部描述符表实验.33第三章第三章 32 位微机接口硬件实验位微机接口硬件实验.36实验一 地址译码电路与 I/O 接口.36实验二 8254 定时/计数器.41实验三 8259 中断控制器.47实验四 8255 并口控制器.56实验五 A/D 与 D/A 转换实验.64第四章第四

2、章 32 位微机接口课程设计位微机接口课程设计.71课程设计一 数据采集系统一.71课程设计二 数据采集系统二(查询法).75课程设计三 数据采集系统三(中断法).79课程设计四 信号发生器.84课程设计五 交通灯实时控制系统设计.92课程设计六 步进电机控制系统设计.98附录附录 1 TDDEBUG 集成操作软件使用说明集成操作软件使用说明 .104一 主菜单说明 .104二. 实模式下调试程序.105三. 保护模式下调试程序.111附录附录 2 常用常用 DOS 系统功能系统功能 (INT 21H).1162第一章第一章 TD-PIT+实验系统的硬件环境实验系统的硬件环境一一. 概述概述

3、TD-PIT+实验系统硬件主要由 PCI 总线扩展卡和 TD-PIT+实验平台构成,其硬件系统的连接接如图 1-1a 所示。USB 总线PCI 总线内存总线总线AGP 总线C P U北桥芯片显卡显示器内存PCI 槽PCI 槽南桥芯片IED 接口硬盘键盘鼠标Flash BIOSUSB 设备PCI 卡微机实验箱 图1-1a 硬件系统的连接PCI 总线扩展卡包括PCI 总线接口电路和系统配置电路以及扩展总线插座。主要实现PCI 总线接口以及将32 位高速总线从PC 机引出。PCI 总线扩展卡结构如图1-1 所示。 图 1-1 PCI 总线扩展卡结构3TD-PIT+实验平台上的电路结构主要分两部分:系

4、统总线单元电路和实验单元电路。是 32 位微机接口实验的主要操作平台。实验平台结构如图 1-2 所示。图 1-2 实验平台结构二二. 系统总线单元电路系统总线单元电路准系统总线单元实现了面向80 x86 微机系统的32 位系统总线,符合80 x86 总线时序标的接口电路均可以直接连接到该总线上。总线信号说明如表1-1 所示。表1-1 总线信号实验系统向PC 机申请了接口实验所需的配置资源。其中包括16MB 的存储地址空间、4255字节的I/O 地址空间和一个中断请求线。中断请求线是映射到PC 机内15 个中断线中的一个。系统总线单元将地址空间进行了译码,各提供4 个片选信号,片选信号同偏移地址

5、空间对应关系如表1-2 所示。用PC 机分配的I/O 或存储器空间始地址加上这个偏移地址,就是实验系统中端口占用的实际地址, I/O 和或存储器地址电原理如图1-2A所示。PC 机分配的起始地址可以在Tdpit 软件中查看或由实验系统附带的配置资源检查程序CHECK.EXE 获得。图 1-2A I/O 和存储器地址电原理图表1-2 片选信号同偏移地址空间对应关系1 1地址译码单元地址译码单元该单元提供一片开放的译码器74LS138,用于学习地址译码方法。其线路连接如图1-3 所示。D0-D31A0-A31BBAA/E/EDIRDIR74245 X 474245 X 4A6A7A22A23IOY

6、0 (00H-3FH)IOY1 (40H-7FH)IOY2 (80H-0BFH)IOY3 (0C0H-0FFH)MY0 (00H-3FFFFFH)MY1 (400000H-7FFFFFH)MY2 (800000H-0BFFFFFH)MY3 (0C00000H-0FFFFFFH)BE0BE1BE2BE3XIORXIOWXMERXMEW20V8(12)20V8(13)20V8(13)与与与与与74245与与与与234567891112131415161718XD0-XD7XD8-XD15XD16-XD23XD24-XD31XA2-XA9XA10-XA17XA18-XA25XA26-XA31A2B3

7、E1Y04Y15Y26Y3774139AA14B13E15Y012Y111Y210Y3974139B5 图 1-3 地址译码单元2 23232 位位I/OI/O 接口单元接口单元该单元通过4 片三态缓冲器和4 片锁存器组成32 位的I/O 接口,并根据32 位总线时序设计了译码电路,可以8/16/32 位不同字节宽度来访问该接口。用于学习8 位和32 位I/O 接口设计及编程。其线路连接如图1-4 所示。 图 1-4 32 位 I/O 接口单元63 33232 位存储器单元位存储器单元该单元提供32 位存储器及其连接电路,并针对32 位系统总线提供了存储器译码电路,可以任意完成8 位、16 位

8、及32 位不同字节宽度的存储器操作。其线路连接如图1-5 所示。图 1-5 32 位存储器单元4FLASH ROM 单单元元该单元提供一片开放的FLASH 存储器,用于学习FLASH 存储器的编程操作方法。其线路连接如图1-6 所示。 图 1-6 FLASH ROM 单元58259 单元单元该单元提供中断控制器8259 的连接电路,用于学习中断控制器的操作方法。其线路连接如图1-7 所示。7 图 1-7 8259 单元68237 单元单元该单元提供DMA 控制器8237 的连接电路,用于学习DMA 传送应用编程方法。其线路连接如图1-8 所示。 图 1-8 8237 单元7 782558255

9、 单元单元该单元提供一片开放的并口控制器 8255,用于学习并行接口 8255 的编程方法。其线路连接如图 1-9 所示。 图 1-9 8255 单元88 882518251 单元单元该单元提供串行控制器8251 的连接电路,用于学习串行通讯编程方法。其线路连接如图1-10 所示。D0D1D2D3D4D5D6D7A0CSWRRDRXDDSRCTSTXDDTRRTSRST_8251D027TxD19D128D21TxRDY15D32TxCLK9D45TxEMPT18D56D67RxD3D78RxRDY14CS11RxCLK25RD13SYNDET16WR10C/D12DSR22DTR24CLK2

10、0CTS17RESET21RTS238251CLK 1.8432MINTRTxC/RxC74LS32图 1-10 16550 单元9 9串行接口单元串行接口单元该单元提供用来将串行通讯信号引出到实验箱体后侧的接口插座,包含USB 和RS232 接口。使用USB 接口插座时将VDD、D-、D+和GND 四个信号连接到标有USB 的插座上。使用RS232串口时将TXD、RXD 信号连接到标有RS-232 的插座上。其电路结构如图1-11 所示。 图 1-11 16550 单元910108254 单元单元该单元提供一片开放的定时/计数器 8254,用于学习定时/计数器的应用编程方法。其线路连接如图

11、1-12 所示。 图 1-12 8254 单元11A/D 转换单元转换单元该单元提供模/数转换器ADC0809 的连接电路,用于学习A/D 转换原理及编程操作方法。其线路连如图1-13 所示。 图 1-13 A/D 转换单元12D/A 转换单元转换单元该单元提供数/模转换器DAC0832 的连接电路,用于学习D/A 转换原理及编程操作方法。其线路连接1-14 所示。 10图 1-14 D/A 转换单元13电子发声单元电子发声单元该单元提供一个微型扬声器,控制和驱动电路已经连接好。在控制输入端输入一定频率的波形信号即可发声。其线路连接电路如图1-15 所示。 图 1-15 电子发声单元14键盘及

12、数码管显示单元键盘及数码管显示单元该单元提供44 的小键盘矩阵及6 位七段数码管,电路连接为扫描电路形式。其线路连接如图1-16 所示。com1com2com3com4com5com6123456789104K7VCCgfabedchABCDEFGDpa7b6c4d2e1f9g10h5com3com8数码管1a7b6c4d2e1f9g10h5com3com8数码管2a7b6c4d2e1f9g10h5com3com8数码管3a7b6c4d2e1f9g10h5com3com8数码管4abcdefgha7b6c4d2e1f9g10h5com3com8数码管5a7b6c4d2e1f9g10h5com3

13、com8数码管61312740711107407987407567407347407127407131274071110740798740756740734740712740734740712740711X1X2X3X4Y1Y2OM0OM1OM2OM3OM4OM5OM6OM7Y3Y4OM8OM9OMAOMBOMCOMDOMEOMF123456789104K7VCC图 1-16 键盘及数码管显示单元15点阵点阵LEDLED 显示单元显示单元该单元使用4 片88 的点阵LED 构成了一个1616 点阵显示模块,点阵LED 的行列控制已经连接好。行控制为R0R15,列控制为L0L15。其线路连接如图

14、1-17 所示。图 1-17 点阵 LED 显示单元121616驱动电路和直流电机单元驱动电路和直流电机单元这两个单元由ULN2803 驱动芯片、一台DC12V 直流电机及霍尔测速电路构成,N 为一组反相驱动信号输入端。其线路连接如图1-18 所示。 图 1-18 驱动电路和直流电机单元1717温度控制单元温度控制单元该单元由7805 芯片产生+5V 的稳定电压和一个24 欧的电阻构成回路。其线路图连接如图1-19 所示。 图 1-19 温度控制单元1818步进电机单元步进电机单元该单元提供一个四项八拍的步进电机,如图1-20 所示。 图 1-20 步进电机单元131919开关及开关及LEDL

15、ED 显示单元显示单元该单元包括十六组拨动开关及LED 显示灯,用于输出和指示逻辑电平(正逻辑)。当显示灯亮时表示逻辑高电平,灭时表示逻辑低电平。其电路连接如图1-21 所示。 图 1-21 开关及 LED 显示单元2020时钟源单元时钟源单元该单元提供一个1.8432MHz 的晶振电路,主要作为16550 时钟输入。另外还有两个十分频电路,将1.8432MHz 分频得到184.32KHz 和18.432KHz,如图1-22 所示。 图1-22 时钟源单元2121PWMPWM 转换电路转换电路该单元提供了一个PWM 脉冲产生电路,在IN 端输入05V 电压,OUT 输出脉冲的占空比会跟随产生相

16、应的变化。其线路如图1-23 所示。 14图1-23 PWM 转换电路2222扩展单元扩展单元该单元由若干组排针、单股导线插座和电源引出插座组成,用于将排针形式的电路引脚和单股导线形式的引脚相互转换。从而为各实验单元的相互配合使用提供方便。另外,还提供了一块面包板,用户可以自己在上面搭接电路,通过小圆孔和排针与实验平台上的单元连接,扩展灵活。2323LCDLCD 显示单元(选件)显示单元(选件)在实验平台上的LED 显示单元区域可以插接扩展板。其中一个可选的扩展板就是LCD 显示单元。该单元采用型号为MSC-G12864-5W,一种12864 的图形点阵液晶,LCD 类型为STN,内置控制器,

17、配置有LED 背光。板上微调电位器可以调节液晶的对比度。其连接电路如图1-24所示。 图1-24 LCD 显示单元15第二章第二章 32 位微机原理软件实验位微机原理软件实验实验一实验一 四则运算四则运算一一.实验目的实验目的1 熟悉汇编语言上机操作过程。2 熟悉 Tddebug 调试环境和 Turbo Debugger 的使用。3熟悉汇编语言程序的框架结构,掌握顺序结构的编程方法。二实验内容实验内容无符号数的 32 位加法,32 位减法,16 位乘以 16 位,32 位除以 16 位除法的四则运算练习。 三三 实验源程序实验源程序DATA SEGMENTA DW 1234H, 5678H ;

18、被加数被加数B DW 0FEDCH, 123AH;加数加数C DW 2 DUP (?);预留和预留和AD DW 0FEDCH, 0BA98H;被减数被减数BD DW 1234H, 789AH;减数减数CD DW 2 DUP (?);预留差预留差A1 DW 0D678H;被乘数被乘数B1 DW 0012H;乘数乘数C1 DW 2 DUP (?);预留积预留积A2 DW 5678H, 0234H;被除数被除数B2 DW 0F234H;除数除数C2 DW 2 DUP (?);预留商预留商,余数余数DATA ENDSSTACK1 SEGMENT STACK DB 100 DUP(?)STACK1 EN

19、DSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1START PROCFARPUSHDSMOVAX, 0 ;标准序标准序PUSHAX 16MOVAX, DATAMOVDS, AXMOVAX, AADDAX, BMOVC, AXMOVAX, A+2 ;32位加位加32位位ADCAX, B+2MOVC+2, AX MOVAX, ADSUBAX, BDMOVCD, AX ; 32位减位减32位位MOVAX, AD+2 SBBAX, BD+2MOVCD+2, AX MOVAX, A1MULB1 ; 16位乘位乘16位位MOVC1, AX MOVC1+2, D

20、X MOVAX, A2 MOVDX, A2+2 DIVB2 ;32位除位除16位位 MOVC2, AX MOVC2+2, DX RETSTART ENDPCODE ENDS END START四四 实验歩骤实验歩骤1 输入源程序输入源程序:单击文件新建,在光标处输入源程序,输完源程序后,单击工具栏或文件另存为, 选择存放路径,输入文件名.ASMASM。2 编译程序编译程序:单击工具栏,链接程序,在屏幕下方的信息栏窗口显示编译信息, 若有语法错误,逐一双击该行,系统将自动定位错误行,並有红色的箭头指向错误行, 17逐一修改后存盘,再编译,直到错误为零。 3 连接程序连接程序: 单击工具栏,在屏幕

21、下方的信息栏窗口显示连接信息。4 调试程序调试程序: 单击工具栏,单击 ViewCpu, 在代码显示区单击右键点击Mixed Both,为 MixedMixed NoNo,按 F7 单歩执行,当执行完 MOV DS, AX 后, 单击ViewCpu,使屏幕下方的数据显示区为 DS 的内容:(1) 单歩执行: 按 F7, ,观察调试过程中,指令执行后各寄存器及数据区的内容变化。(2) 执行到光标处: 将光标移到所需处並单击,使之成为兰底白字的光带, 按 F4, 观察执行最后一条指令执行后寄存器及数据区的内容。(3) 连续执行: 按 F9,观察最后一条指令执行后寄存器及数据区的内容。五五 实验报告

22、内容实验报告内容1. 实验目的和实验内容。2.记录数据段存放的原始数据,和程序执行结束后的数据。DS:0000DS:0008DS:0010DS:0018DS:0020DS:0028 3. 写岀和、差、积、商、余数运算结果。如:56781234H 123AFEDCH 0BA98FEDCH 789A1234H 0D687H 0012H 02345678H 0F234H 4. 心得体会和建议。18实验二实验二 均值滤波均值滤波一一.实验目的实验目的1掌握在数据表中找最大、最小数的方法。2学会子程序的使用方法,参数传递的方法, 掌握分支程序,循环程序的设计方法。3熟悉 Tddebug 调试环境和 Tu

23、rbo Debugger 的使用。二实验内容实验内容均值滤波算法:对 N (2 N 256)个无符号数,去掉一个最大值、最小值,然后求其平均值, 其中最大值,最小值的査找通过分别调用子程序 SMAX 和 SMIN 实现。三程序流程图三程序流程图主程序流程图如图 2-2-1 所示,SMAX 子程序流程图如图 2-2-2 所示, SMIN 子程序流程图与 SMAX 类似。图 2-2-2 SMAX 子程序流程图图 2-2-1 主程序流程图是否N否是开始找最大值,找最小值CALL SMAX,SMIN求 N 个数之和减去最大值,最小值除以(N-2),求平均值结束初始化AL=SI保存最大值CX-1=0?S

24、I=SI+1AL SI ?返回四参考源程序四参考源程序STACK1 SEGMENT STACK)2/()minmax(1NXXXiXni19 DB 100 DUP(?)STACK1 ENDSDATA SEGMENTAVERAGE DB ?NUM DB 12H,34H,56H,78H,90H,21H,43H,65H,87H,09HL_NUM EQU $NUMMAXNUM DB ?MINNUM DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1START PROCFARPUSHDS ;标准序标准序XORAX, AXPUSHAXMOV

25、AX, DATAMOVDS, AXMOVSI, OFFSET NUM MOVDI, OFFSET MAXNUM ; 求最大数求最大数MOVCX, L_NUMCALLSMAXMOVSI, OFFSET NUM MOVDI, OFFSET MINNUM ;求最小数求最小数MOVCX, L_NUMCALLSMIN MOVCX, L_NUM XORAX, AXMOVSI, OFFSET NUMNEXT: ADDAL, SI ;求求N数之和数之和ADCAH, 0INCSILOOPNEXTMOVBH, 0 20MOVBL, MAXNUM ;减去最大值减去最大值SUBAX, BXMOVBL, MINNUM

26、;减去最小值减去最小值SUBAX, BXMOVCL, L_NUM SUBCL, 2 ;求均值求均值DIVCLMOVAVERAGE,AL ;平均值存放在平均值存放在AVERAGE中中 RETSTART ENDPSMAX PROC MOVAL, 0 NEXT1: CMPAL, SIJNCNEXT2MOVAL, SI ;求最大数子程序求最大数子程序NEXT2: INCSILOOPNEXT1MOVDI, ALRETSMAX ENDPSMIN PROC MOVAL, 0FFH NEXT3: CMPAL, SIJCNEXT4MOVAL, SI ;求最小数子程序求最小数子程序NEXT4: INCSILOOP

27、NEXT3MOVDI, ALRETSMIN ENDPCODE ENDS21ENDSTART五实验歩骤五实验歩骤1 同实验一实验歩骤 13。 2 调试程序: 单击工具栏,单击 ViewCpu, 在代码显示区单击右键点击Mixed Both,为 Mixed No,按 F7 单歩执行,当执行完 MOV DS, AX 后, 单击ViewCpu,使屏幕下方的数据显示区为 DS 的内容:(1) 用单歩和执行到光标处相结合,调试求最大值子程序,观察指令执行后各寄存器及数据区的内容。(2) 用执行到光标处,调试求最小值子程序,观察指令执行后数据区最小值的内容。(3) 用连续执行方式调试求平均值。3 修改源程序

28、,用同一个子程序求出最大值、最小值。六实验报告六实验报告1、 实验目的和实验内容。 2、记录主程序、子程序 SMAX、子程序 SMIN 的起始地址和结束地址。地 址主程序子程序 SMAX子程序 SMIN起始地址结束地址 3、记录数据段中存放的的 10 个原始数据、最大数、最小数及平均数。DS:0000DS:0008 4、记录刚进入 SMAX 时,压入堆栈的内容,它就是从子程序 SMAX 返回主程序的地址。 执行 CALL SMAX 前IP=SP执行 CALL SMAX后IP=SP执行 RET 前IP=SP执行 RET 后IP=SP执行 CALL SMAX 前IP=SP执行 CALL SMAX前

29、IP=SP执行 RET 前IP=SP执行 RET 后IP=SP5、最大值=? 最大值=? 平均值=? 6、心得体会和建议。22实验三实验三 代码转换代码转换一一.实验目的实验目的1掌握代码转换的基本方法。2学会 INT21 功能调用, 掌握人机对话的设计方法。3进一歩熟悉 Tddebug 调试环境和 Turbo Debugger 的使用。二实验内容实验内容 从键盘输入小写字母(最多 20 个),以 “.”号作为结束标志,在屏幕上输岀相应的大写字母。用 INT 21 中的 09H 号功能实现输出对话,0AH 号功能实现输入对话。输入小写字母用 INT 21 的 0AH 号功能,将读入的数据存放在

30、缓冲区 SMALL 中,其中 SMALL 的笫一个字节指岀缓冲区能容纳的字符数,不能为 0(程序暂定为 50),第二个字节保留,以用作存放实际键入的输入字符的个数;从笫三个字节开始存放从键盘上接受的字符,所以转换时要从 SMALL 的笫三个字节,即 SMALL+2 开始。SMALL 中存放的是小写字母的 ASSII 码,将此值减去 20H,即为大写字母的 ASSII码,将其依次存放在名为 CAPITAL 的数据段中,然后用 INT 21 中的 09H 功能输出。三程序流程图三程序流程图 主程序流程图如图 2-3-1 所示。否否是输岀提示信息从键盘输入小写字母回车换行CX=20字符= “ ” ?

31、变换成大写字母存入输岀缓冲区CX-1=0 ?输岀缓冲区以“$”结尾显示大写字母返回 DOS是23图 2-3-1 主程序流程图四源程序四源程序CRLF MACRO MOVDL, 0DH MOVAH, 02HINT21H MOVDL, 0AH;宏定义了回车宏定义了回车,换行的换行的ASCII码码 MOVAH, 02H INT21H ENDMDATA SEGMENTMES1 DB PLEASE INPUT THE SMALL LETTER,ENDED WITH .:$MES2 DB THE CAPTAL LETTER IS:$SMALL1 DB 50; 预留键盘输入缓冲区长度为预留键盘输入缓冲区长度

32、为50个个 DB ?; 预留实际键盘输入字符的个数预留实际键盘输入字符的个数 DB 50 DUP(?)CAPITAL DB 50 DUP(?) ; 预留大写字母缓冲区长度为预留大写字母缓冲区长度为50个个DATA ENDSSTACK1 SEGMENT STACK DB 100 DUP (?)STACK1 ENDSCODE SEGMENTSTART PROC FARPUSH DS MOVAX, 0 PUSHAX MOVAX, DATA MOVDS, AX MOVAH, 9 MOVDX, OFFSET MES1 ;输岀提示信息输岀提示信息EMS1INT21HCRLF ;宏调用宏调用24 MOVAH

33、, 0AH MOVDX, OFFSET SMALL1 ; 接收小写字符串接收小写字符串 INT21H CRLF MOVBX, OFFSET SMALL1 MOVDI, OFFSET CAPITAL MOVCX, 20NEXT: MOVAL, BX+2 MOVAH, AL CMPAL, 2EH ;小写字母小写字母ASCII码字符串码字符串 JEKE ; 转换成大写字母转换成大写字母ASCII码字符串码字符串 SUBAL, 20H MOVDI, ALINCBXINCDILOOPNEXTKE: INCDI MOVAL, $ ;大写字符串后加大写字符串后加“$”MOVDI, ALMOVDX, SEG

34、MES2 MOVDS, DXMOVDX, OFFSET MES2 ; 输岀提示信息输岀提示信息EMS2MOVAH, 9INT21HCRLF MOVDX, OFFSET CAPITAL MOVAH, 9 ; 输岀大写字符串输岀大写字符串 INT21H RETSTART ENDPCODE ENDS ENDSTART25五五. .实验歩骤实验歩骤1 同实验一实验歩骤 13;注意:(1) 本程序在结构上不完整,需自行修改源程序后才能汇编通过;(2) 程序正确运行应是根据屏幕提示信息,从键盘输入小写字母,且“.”号作为结束标志,然后在屏幕上输岀大写字母提示信息和相应的大写字母,但源程序不能按这种方式运行

35、, 需自行修改源程序后才能正确运行。 2 调试程序: 单击工具栏,单击 ViewCpu, 在代码显示区单击右键点击Mixed Both,为 Mixed No,按 F7 单歩执行,当执行完 MOV DS, AX 后, 单击ViewCpu,使屏幕下方的数据显示区为 DS 的内容:3. 分别用执行到光标处,连续执行二种方法调试,观察调试过程中,指令执行后各寄存器及数据区的内容。4. 修改源程序,对输入的非法字符进行处理。六六.实验报告实验报告1、实验目的和实验内容。2、显示 MES1 的信息修改后的部分源程序。3、数据段存放的键盘输入的小写字母的 ASCII 码和转换成大写字母的 ASCII 码。D

36、S:040DS:048DS:050DS:058DS:078DS:080DS:088DS:0904、在屏幕显示相应的大写字母。5、心得体会和建议。26实验四实验四 字符串冒泡排序字符串冒泡排序一一. 实验目的实验目的1进一歩掌握主、子程序设计方法。2掌握人机对话的设计方法。3进一歩熟悉 Tddebug 调试环境和 Turbo Debugger 的使用。4. 掌握冒泡排序的一种方法。二实验内容实验内容 试设计名为“TITLE BOBBLE SORT”冒泡程序,当屏幕上显示一行“PLESAE ENTRY STR1NG”提示信息, 屏幕上立即在下一行输入字符串; 程序用冒泡法对字符串以ASCII 码的

37、值按升序来排序, 屏幕在下一行显示这个排序好的字符串。三三. . 程序思路程序思路 冒泡法排序有多种算法,本程序采用的是循环次数固定法,设有 N 个元素串,首先把笫一个元素送入 AL,並设定其为“当前最小值”单元,然后和剩下的(N-1)个元素值比较,若有一个元素比它小,则两个元素互换, 经(N-1)次比较,“当前最小值”单元是 N 个元素的最小值,之后再把它写回到笫一个元素的位置,即冒出了一个最轻的泡, 如此下去,顺序冒出(N-1)个泡后, N 个元素就排序好了。四四. 程序清单程序清单;TITLE BUBBLF SORTSTACK1 SEGMENT STACK DB 64 DUP(0)STA

38、CK1ENDSDATA SEGMENTPROMPT DB 0DH,0AH,PLEASE ENTRY STRING,0DH,0AH,$;显示提示信;显示提示信息息CRLF DB 0DH,0AH,$;回车,换行,显示数据;回车,换行,显示数据CHAR LABEL BYTE;输入缓冲区结构;输入缓冲区结构CHARH DB 60 ; 缓冲区大小缓冲区大小CHARN DB ?; 字符记数字符记数CHARF DB 60 DUP(?); 缓冲区空间缓冲区空间DATA ENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1BEGIN PROC FARPUSHDSMOVA

39、X, 0PUSHAXMOVAX, DATAMOVDS, AX27AGAIN: LEADX, PROMPTMOVAH, 9 ;9号功能调用号功能调用, 显示提示信息显示提示信息INT21HLEADX, CHARMOVAH, 0AH ;0AH号功能调用号功能调用INT21HMOVCL, CHARN; 输入字符数送输入字符数送CLORCL, CL;若字符数为若字符数为0,则退回则退回DOS系统系统JZDONECALLSORT;否则否则,排序並显示排序並显示JMPAGAINDONE: RETBEGIN ENDPSORTPROC ; 冒泡法排序子程序冒泡法排序子程序XORCH, CH ; 字符串长度为字

40、符串长度为CL值值MOVBX, CXMOVSI, OFFSET CHARFMOVBYTE PTR SI+BX,$ ;在输入缓冲区的串后加入一个在输入缓冲区的串后加入一个$CLDBIGLOOP:MOV AL, SI;以以AL为为“当前最小值当前最小值”单元单元DECCX;CX为比较计数为比较计数JCXZEXIT;若若CX为为0,表示已排好序表示已排好序PUSHCX;保存保存CXINCSI;取下一单元地址取下一单元地址PUSHSISMALLOOP:CMP AL, SI;取一个元素与取一个元素与“当前最小值当前最小值”单元比较单元比较JBENEXT;若该元素值小若该元素值小,则交换位置则交换位置XC

41、HGAL, SINEXT:INCSILOOPSMALLOOP ;循环循环,使使“当前最小值当前最小值”确实为最小确实为最小 POPSI;SI为余下的笫一个字符为余下的笫一个字符MOVSI-1,AL;冒岀一个泡冒岀一个泡,写回队列中写回队列中28POPCX;CX为余丈的字符个数为余丈的字符个数JMPBIGLOOP;继续求余下字符中的最小值继续求余下字符中的最小值EXIT:MOVDX, OFFSET CRLF; 巳排好序巳排好序,先回车换行先回车换行MOVAH, 9INT21HMOVDX, OFFSET CHARF ;显示排好序的字符串显示排好序的字符串MOVAH, 9INT21HRETSORT

42、ENDPCODE ENDS END BEGIN五五. .实验要求实验要求1、 同实验一实验歩骤 13。 2、 对实验程序进行汇编、连接。 3、 调试程序,分别用执行到光标处,连续执行二种方法调试,观察调试过程中,指令执行后数据区的内容。4、 连续执行程序,观察运行结果。 六六.实验报告实验报告1、实验目的和实验内容。2、数据段存放的键盘输入的 ASCII 码和屏幕显示的字符串。3、在屏幕显示排好序的字符串。4、心得体会和建议。 29实验五实验五 描述符和描述符表实验描述符和描述符表实验一一. .实验目的实验目的 (1) 熟悉保护模式的编程格式。 (2) 掌握描述符的声明方法。 (3) 掌握使用

43、选择符访问段的寻址方法。 二实验内容实验内容实现在一个 0 级代码段中将源数据段中的一段数据复制到目标数据段中。其中所有段的段描述符均放置在 GDT 中。 1实验分析 为了实现在 0 级代码段中完成数据传输,实验程序中需要安排一个 0 级代码段和两个 0 级数据段(可以是 03 级任一级别的数据段) 。 在程序开始声明一个数据段DSEG ,来描述这三个段的描述符,其中有代码段描述符 Scode,源数据段描述符 DataS 和目标数据段描述符 DataD,将它们相应的选择子分别定义为 Scode_Sel,DataS_Sel,DataD_Sel。按照实验程序编写格式的约定及描述符的格式定义,为这三

44、个段分别定义描述符: (1) 代码段描述符:Scode Desc ; 段属性说明: G :0 ; 以字节为段界限粒度 D : 0 ;是 16 位的段 P : 1 ;描述符对地址转换有效/该描述符对应的段存在DPL : 0 ;0 级段 DT : 1 ;描述符描述的是存储段TYPE: 0 x 8 ;只执行段 段基地址说明:定义代码段的标号为 CSEG,则在段基地址处填写 CSEG,为调试器提供重定位信息。 段界限说明:段界限定义为 Clen。 (2) 源数据段描述符:DataS Desc ; 段属性说明: G : 0 ;以字节为段界限粒度 D : 0 ;是 16 位的段 P : 1 ;描述符对地址

45、转换有效/该描述符对应的段存在 DPL :0 ;0 级段 DT : 1 ;描述符描述的是存储段 TYPE:0 x 2 ;可读写段 段基地址说明:定义源数据段标号为 DSEG1,则在段基地址处填写 CSEG,为调试器提供重定位信息。 段界限说明:定义段界限为 DLEN。 30(3) 目标数据段描述符:Datad Desc 目标数据段描述符的内容基本与源数据段的内容相同,只要修改段基地址和段界限的定义即可。 为了给装入程序提供重定位信息,三个存储段描述符中地址的低 16 位,用每个描述符对应段的标号来填写。在程序装入内存时,调试系统会根据地址的低 16位定位该段对应的真实物理地址,并将该地址写入描

46、述符中(系统没有使用分页机制,线性地址等价于物理地址) 。在实验中可查询 GDT 表来确定每个段的真实物理地址。 在程序定义过程中,首先使用一个全“F”的描述符作为定义的开始,然后定义代码段描述符 Scode、源数据段的描述符 DSEG1 和目标数据段描述符 DSEG2。为了区分 LDT 表和 GDT 表的定义,再使用一个全“F”的描述符作为界限。由于本实验中不使用 LDT 表,则再使用一个全“F”的描述符结束描述符的声明。 本程序可实现将一个数据段中数据搬移到另一个数据段的过程。传输过程中可使用 DS,ES 两个段寄存器,其中 DS 装入源数据段的选择符 DataS_Sel ,ES 装入目标

47、数据段的选择符 DataD_Sel。在实验程序的最后使用“INT 0FFH”指令,正常结束程序运行。 三三.实验步骤实验步骤 (1) 进入纯 DOS 环境,运行 Tddebug 集成操作软件。 (2) 运行 Tddebug 软件,使用 AltE 选择 Edit 菜单项进入程序编辑环境。按实验要求编写程序。实验参考流程图如图 2-5-1.(3) 程序编写完后保存退出,使用 AltC 选择 Compile 菜单中的 Compile 和Link 命令对实验程序进行编译、连接。 (4) 编译输出信息表示无误后,使用 AltP 选择 Pmrun 命令装入实验程序,如果装入成功,屏幕上会显示“Load O

48、K!”,否则,会给出相应的错误提示信息。 (5) 若程序装入成功,则进入保护模式调试环境。在命令输入行使用 GDT 命令查询系统的 GDT 表,并且查看实验程序中声明的代码段、数据段描述符在 GDT表中的位置以及对应段的物理地址、段属性、段界限等。 (6) 使用 F7 单步执行程序,执行 LLDT AX 语句后,使用 LDT 命令查看 LDT局部描述符表的内容。 (7) 根据 LDT 内容使用 D 命令查看源数据区的数据和目的数据区数据内容。 (8) 按 F9 运行程序,如果程序正常运行结束,命令显示区中将显示“Correct Running”。 (9) 运行结束后,再次查看目的数据区内容,观

49、察数据传输是否正确。 四四. 程序流程图程序流程图全局描述符表实验参考流程图见图 2-5-131描述 GDT 表项声明各数据段描述符输在 0 级代码段中实现数据传输调用 INT0FFH 返回调试系统结束图 2-5-1 全局描述符表实验参考流程图五参考实验程序五参考实验程序 .386P DESC STRUC ; 定义描述符结构定义描述符结构LIMITL DW 0 BASEL DW 0 BASEM DB 0 ATTR DB 0 LIMITH DB 0 BASEH DB 0 DESC ENDS ATCE = 98H ; 定义特殊常量定义特殊常量ATDR = 90H ATDW = 92H DSEGSE

50、GMENT USE16 ;声明开始初始化声明开始初始化GDT表中的描述符表中的描述符GDT LABEL BYTE ID1 DESC ;标记标记1ID2 DESC ;标记标记2ID3 DESC ;标记标记3SCODE DESC ;代码段描述符代码段描述符DATAS DESC ;源数据段描述符源数据段描述符DATAD DESC ;目标数据段描述符目标数据段描述符32GDTLEN = $-GDT ;目标数据段描述符目标数据段描述符SCODE_SEL = SCODE-GDT ;代码段选择子代码段选择子DATAS_SEL = DATAS-GDT ;源数据段选择子源数据段选择子DATAD_SEL = DA

51、TAD-GDT ;目标数据段选择子目标数据段选择子DSEG ENDS DSEG1 SEGMENT USE16 ;定义源数据段定义源数据段BUF DB 00H,11H, 22H, 33H, 44H, 55H, 66H, 77H DB 88H,99H,0AAH,0BBH,0CCH,0DDH,0EEH,0FFH DB 240 DUP(0) D1LEN = $-1 DSEG1 ENDS DSEG2 SEGMENT USE16 ;定义目标数据段定义目标数据段BUFLEN = 256 BUFFER DB BUFLEN DUP(0) DSEG2 ENDS CSEG SEGMENT USE16 ASSUME

52、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, 32 M1:MOVSB LOOP M1 INT 0FFH ; 返回调试系统返回调试系统START ENDP CLEN =$-1 CSEG ENDS END START 33实验六实验六 局部描述符表实验局部描述符表实验本实验与上一实验所完成的功能相同,但要求将代码段安排在全局描述

53、符表中,而将数据段安排在局部描述符表中。 一实验分析一实验分析 本实验需要为代码段和数据段分别声明描述符,由于要求将数据段的描述符放入 LDT 表中,所以实验程序需要建立一张局部描述符表,并在 GDT 表中声明LDT 表对应的描述符。描述符声明完成,还需要为它们定义相应的选择子。 实验程序在 DSEG 段中描述 GDT 表中的描述符。先用一个全“F”的描述符作为定义的开始,然后定义主程序段和 LDT 表描述符,然后使用一个全“F”的描述符作为区分于 LDT 表的界限。在 DSEG 段后,用 DSEG1 段来描述 LDT 表中的描述符,其中包括源数据段描述符目标数据段描述符。在 DSEG1 段的

54、末尾再使用一个全“F”描述符作为描述符声明的结尾。 由于主代码段需要访问的段是在 LDT 表中声明的,所以在程序的初始需要执行装载 LDTR 的指令。装载 LDT 表使用的指令如下: MOV AX,LDT_Sel LLDT AX (1) LDT 表对应段描述符:LDTable Desc 段属性说明: G :0 ;以字节为段界限粒度 D :0 ;是 16 位的段 P :1 ;描述符对地址转换有效/该描述符对应的段存在 DPL :0 ;0 级段 DT :0 ;描述符描述的是系统段或门描述符 TYPE:0 x8 ;LDT 表 段基地址说明:需要在重定位后确定,但可以知道,该描述符对应的数据段是DSE

55、G1 段界限说明: 段界限为 LDTLen-1 ATLDT EQU 82h ;局部描述符表段类型值 (2) 数据段选择子 实验中的两个数据段均在 LDT 表中声明,则描述符对应的段选择符应该标记出来 TIL EQU 04h DataS_Sel = DataS-LDT+TIL DataD_Sel = DataD-LDT+TIL 二实验步骤二实验步骤 (1) 进入纯DOS环境,运行Tddebug集成操作软件。 (2) 运行 Tddebug 软件,使用 AltE 选择 Edit 菜单项进入程序编辑环境。按实验要求编写程序。实验参考流程图如图 2-6-1 所示。 34(3) 程序编写完后保存退出,使用

56、AltC选择Compile菜单中的Compile和Link命令对实验程序进行编译、连接。 (4) 编译输出信息表示无误后,使用AltP选择Pmrun命令装入实验程序,如果装入成功,屏幕上会显示“Load OK!”,否则,会给出相应的错误提示信息。 (5) 若程序装入成功,则进入保护模式调试环境。在命令输入行使用GDT命令查询系统的GDT表,并且查看实验程序中声明的代码段、数据段描述符在GDT表中的位置以及对应段的物理地址、段属性、段界限等。 (6) 使用F7单步执行程序,执行LLDT AX语句后,使用LDT命令查看LDT局部描述符表的内容。 (7) 根据LDT内容使用D命令查看源数据区的数据和

57、目的数据区数据内容。 (8) 按F9运行程序,如果程序正常运行结束,命令显示区中将显示“Correct Running”。 (9) 运行结束后,再次查看目的数据区内容,观察数据传输是否正确。 三三.程序流程图程序流程图描述符 GDT 表项描述符 LDT 表项声明各数据段描述符在 0 级主代码段中装载 LDT在 0 级代码段中实现数据传输调用 INT0FFH 返回调试系统结束图 2-6-1 局部描述符表实验参考流程图五参考实验程序五参考实验程序;实验目的: 熟悉编程格式,掌握通过 ldt 表访问段的编程方法;实验结果: 可以用 dump 命令检查数据区,验证程序的运行结果;编程注意事项: ldt

58、 表所在段对应的描述符必须在 gdt 表中声明,程序起始代码段对应描述符也应该在 gdt 表中声明INCLUDE 386SCD.INCTDATASEG SEGMENT PARA use16GDTLABEL BYTE ;全局描述符表;全局描述符表35ID1Desc ;空描述符空描述符MCode Desc ;代码段描述符代码段描述符LDTable Desc ;局部描述符表段的描述符局部描述符表段的描述符GDTLen = $ - GDT ;全局描述符表长度全局描述符表长度MCode_Sel = MCode - GDTLDT_Sel = LDTable - GDT ;局部描述符表段的选择子局部描述符表

59、段的选择子ID2 Desc DSEG ENDS ;数据段定义结束数据段定义结束 DSEG1SEGMENT use16LDTLABEL BYTE ;局部描述符表局部描述符表DataSDesc ;源数据段描述符源数据段描述符DataDDesc ;目标数据段描述符目标数据段描述符DataS_Sel = DataS-LDT+TILDataD_Sel = DataD-LDT+TILLDTLen = $-LDT ;局部描述符表长度局部描述符表长度ID3 Desc DSEG1ENDSDseg2 Segment use16BufLen = 256 ;缓冲区字节长度缓冲区字节长度Buffer DB BufLen

60、 DUP(0) ;缓冲区缓冲区Dseg2endsCSEG SEGMENT use16 ;16位代码段位代码段 ASSUME CS:CSEGstart proc mov ax, LDT_Sel lldt ax mov ax, DataS_Sel mov ds, ax ;加载目标数据段描述符加载目标数据段描述符 mov ax, DataD_Sel mov es, ax ;加载源数据段描述符加载源数据段描述符 cld xor si, si xor di, di ;设置指针初值设置指针初值 mov cx, BufLen/4 ;设置设置4字节为单位的缓冲区长度字节为单位的缓冲区长度 repz movsd

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论