《微机系统与接口》 《微机实验》课程资料 系网站:automation.seu.edu.cn 课程下载
《微机实验》 基础性实验(准备、练习) 单元验证性实验 综合实验 重 点 熟悉8086指令、汇编语言程序设计和调试; 重 点 熟悉8086指令、汇编语言程序设计和调试; 掌握常用接口电路功能和控制编程 综合设计:硬件电路(示波器、万用表)调试; 电路/程序设计、程序(含中断服务)动态调试
《微机实验》 教材:戴先中等,微机硬件应用实践-原理与接口,东南大学出版社,1999 地点:中心楼4楼计算机硬件实验中心 要 求 要 求 验证型实验:两人一组(单双号)每人为主负责实验3-10中四个实验,报告独立完成; 综合实验:独立完成,按学号位数1-10(0)分别完成教材P73-78相应的综合测试题.
《微机实验》 考查成绩 (1)动态调试程序(自选)操作(10%) (2)验证型实验抽查(一次)及报告(50%) (3)综合实验检查及报告(40%)
实验准备及实验报告要求 1. 实验前必须准备:实验成绩按各次出勤和检查情况及综合实验结果评定;实验安排中的单元实验必须参加并完成;考查不及格补做安排很困难; 2.实验操作须按规程进行,不要带电操作,尤其不要多线一起拉拔操作以防短路; 3. 实验报告按要求完成(隔一周的周一上课时交),报告的格式要规范,包括实验目的、内容、实验步骤(方法)、实验结果与分析。重点是对思考题的回答,以及针对实验目的做总结。其中程序部分只要写出有新意的的程序片段,并作适当的讨论及体会意见;实验现象及问题如实记录;实验报告未完成者不予验收综合作业(评分)。第一次实验报告应包括基础练习总结(实际操作时间,含课外时间)。
编辑、汇编与链接程序 动态调试器 DEBUG XXXX.EXE 动态调试 编辑器(Editor) 程序设计 EDIT 汇编器(Assembler) 汇编语言(与机器有关) MASM/ASM/TASM 链接器(Linker) 待装配的BIN指令代码 LINK ( XXXX.EXE) 可执行BIN指令代码 动态调试器 DEBUG XXXX.EXE 动态调试
实验一 基础操作与调试 实验一A 8086/8088指令与DEBUG 程序的使用 实验一B 8086/8088汇编语言程序设计与调试 (1)实验环境:PC,DOS命令,文件管理 (2)全部命令功能(I/O命令暂不做,留待实验2时完成)、全部指令对内存、各寄存器、堆栈的影响,(含可能的段超越)观察8086/8088所有指令的单步运行结果。 (3) 完整的汇编语言编辑、汇编和链接过程;分段存储的实现,标号、符号与目标代码的关系,汇编语言程序的动态调试。多模块汇编程序试验。 (4)Windows下进入命令行方式/常用MS-DOS命令 Windows下利用开始—运行—输入cmd 或command ↙或在程序下进入MS-DOS方式或附件下(Win2K)进入命令提示符进入命令行方式。
实验一 基础操作与调试 常用MS-DOS命令 DIR A:[目录名] ↙ (显示指定盘[目录]存储文件列表) COPY A:[\mydir\]文件名 D:\tmpdir\ ↙ (将A:[mydir目录下指定文件复制到D盘(指定目录)) DEL A:[\mydir\]文件名 ↙ (删除指定文件) MD A:\mydir ↙ (在A盘上新建mydir子目录) CD A:\mydir ↙ (指定A盘上mydir为当前工作目录) RD A:\mydir ↙ (删除A盘上mydir子目录) C:\masm4\masm myprog; ↙ 指定执行C盘上masm4目录下的masm.exe 带参数myprog;
实验环境:利用目标代码级调试程序DEBUG 实验一 基础操作与调试 实验一A 8086/8088指令与DEBUG 程序的使用 实验环境:利用目标代码级调试程序DEBUG 主要特点1)能够在最小环境下运行汇编程序(代码级而非符号级)2)提供极简单的修改手段(寄存器、存储器、I/O等)3)提供用户与计算机内部联系的窗口(命令行):显示、修改、单步、过程、断点、文件装入、上装。 局限性:不能使用宏指令和大部分伪指令—分段调试/短程序;不能形成可执行文件(.EXE)
启动 (MS DOS下在C或D:>输入 命令行调试器DEBUG 启动 (MS DOS下在C或D:>输入 D>DEBUG [d:][Path][filename[.ext]][Parm1][Parm2] ↙ 命令规定 DEBUG命令为单英文字母,后跟参数。间隔符“,”或空格 (1)+ ↙ (ENTER回车键) 后命令才有效; (2)地址/数据用十六进制数表示,不用“H”; (3)Ctrl+Break(C)键可停止命令的执行; (4)PAUSE/Ctrl-Num Lock键暂停上卷的输出行任意键继续; (5)-?(帮助命令,显示所有命令及格式) (6)—Q退出P
?----帮助命令 -?↙ Assemble A [address] Compare C range address Dump D [range] Enter E address [list] Fill F range list Go G [=address] addresses Hex H value1 value2 Input I port Load L [address] [drive] [firstsector][number] Move M range address Name N [pathname] [arglist] Output O port byte Proceed P [=address] [number] :
R 显示CPU内部寄存器的内容和全部标志位状态。 RF RXX 检查和修改寄存器内容命令 R 显示CPU内部寄存器的内容和全部标志位状态。 AX=0000 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=18A1 ES=18A1 SS=1800 CS=18C0 IP=0100 NV UP EI PL NZ NA PO NC 18C0:0100 1E PUSH DS -R [16位寄存器名] (AX, BX,CX,DX,SI,DI,IP,SP,CS,DS,ES,SS) Flags: OV/NV-DN/UP-EI/DI-NG/PL-ZR/NZ-AC/NA-PE/PO-CY/NC 显示和修改一个指定寄定器的内容和标志位的状态。 -RAX ↙ -AX 0000 :(XX) ↙ -RF ↙ NV UP EI PL NZ NA PO NC –(DN PE..) ↙
D 显示内存命令 D[地址] ↙( 默认长度L=80H128个字节,DS,当前地址) (默认DS:) CS:300 -D [地址范围] ↙ 显示指定内存范围的内容。-DES:100L300或 D100 3000 -D ↙ (128个字节) 从上一个D命令所显示的最后一个单元的下一个单元开始(首次CS:IP) 偏移地址,段地址为DS的内容,地址范围,可以指定段地址和起始偏移地址和终止偏移地址,或LXXXX。-D200 或-DDS:200 1A40:0200 30 20 32 33 34 35 36-37 38 39 F1 F2 A3 A4 F0 0_23456789…… 1A40:0210 AA 55
E [地址] [内容表] ↙用命令所给定的内容表去代替指定地址范围的内存单元内容。 ( 默认 DS,当前地址) E [地址] [内容表] ↙用命令所给定的内容表去代替指定地址范围的内存单元内容。 其中:内容表为一个十六进制数,也可以是用单引号括起的一串字符。 -E [地址] ↙ 逐个单元连续修改单元内容。(空格跳到下一单元,回车修改结束) -E200 ’AAAAAAA’ 20 33 44’88888’ (–D200 检查) -E200 ↙ 1A40:0200 41.32<空格> 41.<空格> 41.33 ↙
F 块填充内存命令/ M 内存移动命令 ( 默认长度L=80H128个字节,DS,当前地址) -F[ES:]200 L300或500 ‘124567’30 40 55‘5555’ ↙ M [源地址范围][目标起始地址] 把源地址范围的内容移至以目标起始地址开始的单元中。 其中源地址范围和目的起始地址可为偏移地址,段地址默认为DS的内容。 -M[CS:]200L50 [ES:]800 ↙
S 搜索指定内容命令/ C 块比较命令 S [地址范围][表] 在指定地址范围内搜索表中内容,搜索到就列出表中元素所在地址。 -S[ES:]200[L40] ‘123’33 44 55‘433’ ↙ 1A40:201 1A40:220 C [源地址范围],[目标地址] 从源地址起始的单元开始逐个比较,比较到源终止地址为止。比较结果如果不一致,则以[源地址][源内容][目的内容][目的地址]的形式显示结果。 -C[ES:]100L300 [CS:]2000 ↙ 1A80:0105 87 88 1A40:2005 1A80:0148 33 53 1A40:2148
U 反汇编命令 U [地址[范围]] 将指定范围内的代码以汇编 语言形式显示,同时显示该代码位于内存的地址和机器。 (默认段寄存器为CS,以U命令的最后一条指令地址的下一个单元作为起始地址;[初值CS:IP],范围长度为20H字节目标代码) -U[ES:]100[L200/ 120] ↙ 1A40:100 1E PUSH DS 1A40:101 A1 00 20 MOV AX,[2000] 1A40:104 BB 00 20 MOV BX,2000 :
A[段寄存器名]:[偏移地址] 将汇编语言程序指令逐行直接输入内存单元。(默认段寄存器CS,偏移地址为上次汇编尾地址(初值CS:IP)) -A[[CS:]100]↙ 或A 1A40:100 或A100设当前CS=1A40H 1A40:0100 MOV AX,100 ↙ 1A40:0102 MOV BX, 2000↙ 1A40:0106↙ (回车结束汇编输入) H 十六进制数据运算命令 H数据1 数据2 (将两十六进制数据相加、减结果显示在屏幕上。 -H 200 800 0A00 FA00
T 逐条指令跟踪与显示命令(Trace into) T[=地址] 单步执行当前指定地址处的指令(默认为CS:IP处),显示CPU所有寄存器内容和全部标志位的状态,以及下一条指令的地址和内容(同执行R命令) (默认段寄存器CS,偏移地址为当前IP指定地址(初值CS:100))。 AX=0000 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=18A1 ES=18A1 SS=1800 CS=18C0 IP=0100 NV UP EI PL NZ NA PO NC 18C0:0100 1E PUSH DS -T=[[CS:]100]↙ 或T=18C0:100或T=100设当前CS=18C0H AX=0000 BX=0000 CX=0000 DX=0000 SP=FFFC BP=0000 SI=0000 DI=0000 DS=18A1 ES=18A1 SS=1800 CS=18C0 IP=0101 NV UP EI PL NZ NA PO NC 18C0:0101 31 C0 XOR AX,AX
T 逐条指令跟踪与显示命令(Trace into) T[=地址][步数] 多条跟踪命令,从指定地址开始;若命令中用[地址]给定了起始地址,则从起始地址开始,若未给定,则从当前地址(CS:IP)开始,执行命令中的[条数]决定一共跟踪几条指令后返回DEBUG状态。 AX=0000 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=18A1 ES=18A1 SS=1800 CS=18C0 IP=0100 NV UP EI PL NZ NA PO NC 18C0:0100 1E PUSH DS -T=[[CS:]100] 5↙ -T5↙ -T=100 5 ↙ -T=18C0:100 5 ↙
P[=地址][值(若干次)](至下一指令前停止)类似SKIP。执行PROC, LOOP, INT 或REP后发一条命令返回到下一指令处。 P (Proceed) 越过(挂停)命令 P[=地址][值(若干次)](至下一指令前停止)类似SKIP。执行PROC, LOOP, INT 或REP后发一条命令返回到下一指令处。 -P=100 3↙ 断点将停在CS:109处 0AD8:0100 E8FE1E CALL 2000 0AD8:0103 E81A1F CALL 2020 0AD8:0106 E8271F CALL 2030 0AD8:0109 90 NOP : -P3↙ -P2↙ -P↙
G 运行/断点命令 G [=地址][ 地址[ 地址…]] -G=FFFF:0 热启动 执行用户正在调试的程序,其中=地址为执行的起始地址,默认段地址为CS中内容,或当前(CS:IP)。再后面的地址为断点地址。DEBUG规定最多设置10个断点地址。设置多个断点用于调试较大的程序,即程序中有多个模块、多个通路时用,比较方便,在执行时不论走哪条通路,程序都可以在断点处停下来,以便调整程序。 -G=FFFF:0 热启动 -G=100 200 热起始CS:100,断点CS:200 -G 2000:100↙ IP地址起到2000:100断点 -G=100 2000:100 3000:300 ↙两处断点 -G↙ ;连续运行 G200 300 ?
I 端口输入命令 /O 输出命令 I端口地址 从指定端口地址输入一个字节 -I3F8 ↙ (COM1数据接收) -I40 ↙ (时钟计数器) -279 ↙ (打印机状态口) -278 ↙ (打印机数据口) O 端口地址,字节值 向指定端口地址输出一个字节 -O3F8 55↙ (COM1数据发送) -O27A 30↙ (LPT1写控制字) N 文件命名命令向指定端口地址输出一个字节
文件操作命令N/L/W N [路径]文件名 指定读写操作文件名 L [起始装入地址][驱动器号][起始扇区号][所读扇区个数] (1)读文件:BX和CX中存放所读文件的字节数(长度BX:CX即8位HEX)。当读入的文件有扩展名.COM或.EXE,则始终装入CS:100H中,命令中指定了地址也没用;(2)读磁盘:把指定驱动器和指定扇区范围的内容读到内存的指定区域中。(默认隐含地址为CS:100H)例:L[2000:100] W[地址][驱动器号][起始扇区号][所写扇区个数] (1) 写文件:把指定地址中BX:CX长度的数据中应写入文件(默认段地址为CS) 。(2) 数据写盘:将调试的程序或数据写入指定的驱动器中。
实验一 基础实验及准备 实验一A 8086/8088指令与DEBUG 程序的使用 一、实验目的 1. 学习使用DEBUG程序的各种命令。 2. 利用DEBUG学习8086/8088 CPU指令系统。 3. 了解计算机取指令执行指令的工作过程。 4. 掌握用DEBUG调试程序。 二、基本实验任务 实验教材P84-89全部命令试操作,重点程序流控制和环境检查、设置,纪录操作和主要结果现象; 不清楚的8086/8088指令功能检查; 三、预习与实验检查 实验前请预习, 实验中教师检查;切忌应付和不懂装懂,有问题要敢问。
DEBUG程序使用注意事项 1. 了解中断向量表,中断向量,中断子程(任务5) 反汇编分析其中之一的代码;跟踪掌握某一中断的中断指令的执行过程 2. 掌握利用T, P, G命令的区别 3. 调试与检查任务 1)用A命令输入指令后,尝试各指令功能; 2)试用A命令输入程序后,先将程序写在硬盘上 3)注意连续运行G命令实验时在程序段的最后加INT 3 (单步)或 INT 20(正常中止) 4)DEBUG不支持符号编程, 标号的输入方法待自编汇编程序调试时观察。 4. 了解8088CPU取指令、执行指令的工作过程,分析死机原因.
运行汇编程序必备的软件环境:DOS操作系统;汇编软件系统。汇编系统盘应包含如下文件: 实验一 基础实验及准备 实验一B 8086/8088汇编语言程序设计与调试 ( 1)运行环境和编辑 运行汇编程序必备的软件环境:DOS操作系统;汇编软件系统。汇编系统盘应包含如下文件: MASM 宏汇编程序文件 LINK 连接程序文件 CREF 索引程序文件(也可不用) EDIT 文本编辑程序(或PE等文本编辑程序) 用户通过屏幕编辑程序EDIT(各功能)键入源程序,检查无误,可将源程序存到汇编系统盘上,该程序的扩展名为·ASM。(XXX.ASM) (2) MASM汇编程序:格式、宏、模块OBJ: 浮动汇编(相对关系)、段、变量待定位
执行宏汇编程序MASM----生成目标文件.OBJ,辅助文件LST,CRF(可选) 汇编链接过程 执行宏汇编程序MASM----生成目标文件.OBJ,辅助文件LST,CRF(可选) 用汇编语言编写的源程序必须是一个完整的源程序,才能经过宏汇编程序MASM的汇编,生成一个目标程序。为了完成汇编任务,汇编程序一般采用两遍扫描的方法,第一遍扫描源程序产生符号表、处理伪指令等,第二遍扫描产生机器指令代码、确定数据等。 OBJ将源程序的操作码部分变为机器码,但地址操作数是可浮动的相对地址,而不是实际地址,因此需经LINK连接文件进行连接才能形成可执行文件。 LST是列表文件把源程序和目标程序列表,以供检查程序用。 CRF是交叉索引文件,对源程序所用的各种符号进行前后对照的文件
C:\masm\masm ↙ [MYFILE[.asm][,mobj,mlst,mcrf]; 汇编链接过程 C:\masm\masm ↙ [MYFILE[.asm][,mobj,mlst,mcrf]; Microsoft (R) Macro Assemble Version 5.00 Copyright (C) Microsoft Corp 1981-1985,1987,All right reserved. Source filename [.ASM ]:MYFILE ↙ Object filename [MYFILE.OBJ ]:MYFILE ↙ Source listing [NUL.LST ]:MYFILE ↙ Cross-reference [NUL.CRF]:MYFILE ↙ 50678+410090 Bytes symbol space free 0 Warning Errors 0 Severe Errors MASM/R MASM/E----8087实模式/仿真库方式
LINK 多模块链接 用汇编语言编写的源程序经过汇编程序(MASM)汇编后产生了目标程序(.OBJ),该文件是将源程序操作码部分变成了机器码,但地址是可浮动的相对地址(逻辑地址),因此必须经过连接程序LINK连接后才能运行。连接程序LINK是把一个或多个独立的目标程序模块装配成一个可重定位的可执行文件,扩展名为.EXE文件。此外还可以产生一个内存映象文件,扩展名为.MAP。连接程序执行过程: D>LINK ↙(直接链接 P1+P2+P3[, PEXE,PMAP,LIB1+LIB2]/M;) (LINK/HELP---帮助开关) Microsoft® overlay link Version 3.60 Copyright ©Microsoft Corp 1983-1987 All right reserved Object Modules [.OBJ]:MYFILE ↙ Run File [MYFILE.EXE]:MYFILE ↙ List File [NUL.MAP]:MYFILE ↙[;] Libraries [.LIB]: ↙
内存映象文件(.MAP) 由连接程序LINK产生的扩展名为.MAP文件,它实际上是连接程序的列表文件,它给出了每个段的地址分配情况及长度,(加/M开关――外部变量相对地址。例如: D>TYPE MYFILE.MAP↙ Start Stop Length Name Class 00000H 0000FH 0010H DATA 00010H 0004FH 0040H STACK 00050H 0005FH 0010H CODE Origin Group [Address Publics by name 0900:0002 mmm 0010:0070 VV1 Address Publics by value 0010:0070 VV1 0900:0002 mmm ] Program entry point at 0005:0000
交叉索引文件(.CRF) 汇编后产生的交叉索引文件,扩展名为.CRF,它列出了源程序中定义的符号(包括:标号、变量等)和程序中引用这些符号的情况。 如果要查看这个符号表,必须使用CREF.EXE的文件,它根据.CRF文件建立一个扩展名为.REF的文件,而后再用DOS的TYPE命令显示,就可以看到这个符号使用情况表。具体操作方法如下: D>CREF↙ cref filename [.CRF]:MYFILE↙ list filename [MYFILE.REF]:↙ D>TYPE MYFILE.REF↙
执行、目标代码格式比较与调试 .EXE装入后各寄存器(段的分配)、已定义变量(数据)地址,N/F指针变量; .各伪指令的作用; .多模块(PUBLIC/EXTRN)链接;/M,8087指令实验。 .汇编指令与目标代码指令的差别。 .重要DOS/BIOS功能调用(控制台输入/输出) .不要试图跟踪 DOS/BIOS调用,尽量用断点或过程P命令 .选做:高级语言与汇编语言接口
调试工具 (1)DEBUG----命令行目标代码调试器 (2)CV—CodeView Microsoft公司源代码调试器 MASM/Zi myprog; Link/codeview myprog; (3)TD—Turbo Debuger Borland公司源代码调试器 TASM/zi myprog; 兼容MASM/Zi TLINK/v myprog+…; (4) Compuware Co.的NUMEGA Soft-ICE EXE,DLL,OCX,VxD