微机原理与接口实验指导书 - 图文

更新时间:2023-09-14 05:31:01 阅读量: 初中教育 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验一、调试软件的使用 .................................................................. 1 实验二、寄存器与存储器 .................................................................. 6 实验三、指令与寻址方式 .................................................................. 9 实验四、汇编语言程序设计 ............................................................ 11 实验五、宏程序设计 ........................................................................ 23 实验六、中断服务程序设计 ............................................................ 24

微机原理与接口实验指导书

实验一、调试软件的使用

【实验目的】

掌握调试软件的基本用法和常用命令,学会用调试软件观察计算机的内部结构,汇编、反汇编程序,跟踪、调试程序。 【实验内容】

1. 调试软件的基本操作。

2. 察看和修改寄存器与存储器内容。 3. 汇编与反汇编。 4. 跟踪和调试程序。 5. 简单程序设计。 【实验准备】

1. 复习调试软件的基本用法和常用命令。 2. 复习8086数据传送类指令。 3. 复习8086算术运算指令。 【实验步骤】

1. 调试程序DEBUG的启动与退出。

1) 启动DEBUG:在DOS提示符下键入:DEBUG?。进入后显示DEBUG提示符‘-’。 2) DEBUG帮助:在DEBUG提示符下键入:??。DEBUG会列出所有命令及使用方法简单提示,如下图:

1

微机原理与接口实验指导书

3) 十六进制数加减法:在DEBUG提示符下键入:H 1234 ABCD?。观察结果。

4) 退出DEBUG:在DEBUG提示符下键入:Q?。即可退出,进入DOS。

2. 显示与修改寄存器的内容。

1) 显示所有寄存器内容:在DEBUG提示符下键入:R?。显示:

2) 显示和修改指定寄存器内容:在DEBUG提示符下键入:RAX?。显示AX内容,如需修改,则直接键入要修改的值(图中1234),若不想修改,直接回车便可,如下图:

3) 显示修改标志寄存器:在DEBUG提示符下键入:RF?。显示当前标志,如需修改,则直接键入要修改的值(可按任意顺序),若不想修改,直接回车便可,注意标志位的缩写:0标志—NV UP DI PL NZ NA PO NC

1标志—OV DN EI NG ZR AC PE CY,如下图:

4) 请参照上述操作步骤,显示和修改各寄存器内容及标志寄存器内容,观察结果并记录。

3. 显示与修改存储器的内容。

1) 显示存储器的内容,格式:D[地址]或D[范围],如: D100?:显示100H单元开始的80个字节的内容。 D100 11F?:显示100H~11F单元的内容。

D100L8?:显示100H单元开始的8个字节的内容。

D?:显示上一个D命令显示单元的后续80个字节的内容。

2

微机原理与接口实验指导书

如下图:

2) 修改存储器的内容,格式:E地址 [数据 数据...]。注意:地址不能省略,但数据可以省略。省略数据列表时可以交互输入, 空格继续, 回车结束。如:

E DS:1000 1A 2B 3C 4D 5E,‘WINDOWS’?:将字节列表中给出的11个字节填入DS:1000开始的存储单元。

E100?:将从100单元开始逐个修改存储单元内容。 如下图:

4. 汇编与反汇编命令。

1) 汇编命令:格式:A[地址],若省略地址,则默认为当前的CS:IP。如:

A100?:从100单元开始逐句输入汇编指令,回车后DEBUG自动翻译成机器码,如下图:

3

微机原理与接口实验指导书

2) 反汇编命令:格式:U[地址]或U[地址范围],若省略地址,则默认为当前的CS:IP。如:

U100?:将100H单元开始的32个字节的内容翻译成汇编指令并显示,如下图:

5. 程序运行跟踪命令。

1) 运行命令:格式:G[=地址],若省略地址,则默认为当前的CS:IP。初次调试时不建议采用,可能会因为程序设计不当,造成意想不到的结果。

2) 跟踪命令:格式:T[=地址] [指令条数],若省略地址,则默认为当前的CS:IP。跟踪命令从指定的地址开始执行指令条数规定的指令后暂停,并显示寄存器内容和当前标志值。若不指定指令条数,则默认为1,即为单步跟踪。如下图:

3) 参照步骤1、2所述,观察并记录一下指令执行的结果:MOV、ADD、

4

微机原理与接口实验指导书

3) 输入机器指令,查看对应的符号指令。

E100 B8 34 12?:将机器指令输入到100H单元开始的3个字节中。 U100?:查看机器指令对应的符号指令。

4) 通过多条相关指令的格式对比,分析机器指令位格式。 2. 验证指令的功能。

1) 编写指令序列并运行。例如: MOV AX,1234 ADD AX,FFFF

2) 观察相关的寄存器、标志位和存储器单元的变化。

3) 参照前两个步骤,验证其他指令的功能。如:MUL、DIV、PUSH、POP、LOOP、CALL、RET、INT、IRET等指令 3. 验证寻址方式的作用。

1) 编写同一指令类型,但采用不同寻址方式的指令,分别运行并观察、分析指令运行的结果。例如:

MOV AX,1234 MOV AX,[1234] 【实验要求】

1. 指导书只给出操作方法的示例,实验人员应按照示例完成一定数量的实验操作。

2. 要详细记录实验过程和观察现象,通过表格、图形等形式分析实验结果,获取规律性的结论。

3. 如果对某项内容研究较深入,其他项目可以选做。

10

微机原理与接口实验指导书

实验四、汇编语言程序设计

【实验目的】

1. 熟悉汇编语言源程序的一般结构。 2. 熟悉常用伪指令的使用。

3. 掌握汇编程序MASM和连接程序LINK的使用方法和从源程序建立到生成可执行文件的汇编连接全过程。 【实验内容】

1. 建立汇编语言源程序文件.ASM。

2. 利用汇编程序将源文件汇编成用机器码表示的目标文件.OBJ。 3. 用连接程序把目标文件转化成可执行文件.EXE。 4. 运行可执行文件。 【实验准备】

1. 复习汇编语言程序上机过程。 2. 复习汇编语言语句格式及伪指令。 3. 复习汇编语言的段结构。 【实验步骤】

1. 汇编语言源程序的建立。

1) 选择一个或自编一个你熟悉的完整的汇编语言源程序。

2) 使用编辑程序录入。格式:EDIT [文件名]。如:在DOS提示符下,键入EDIT ABC.ASM?:用文本编辑程序打开或新建文件名为ABC.ASM的汇编语言源程序

3) 逐句输入源程序,输入完毕,保存。

2. 汇编为目标文件

1) 使用汇编程序MASM。格式:MASM [源文件名.asm],[目标文件名.obj],[列表文件名.lst],[交叉索引文件名.crf]。若省缺文件名,则MASM采用交互式提示输入。如下图:

11

微机原理与接口实验指导书

2) 注意汇编过程和结束后的错误与警告提示。MASM分警告错误(Warning Errors)和严重错误(Severe Errors)。出现严重错误时汇编不能进行,此时应分析错误提示,找出原因,仍用EDIT修改后重新汇编,直到错误为0为止。

3) 汇编正确,将至少产生目标文件(.OBJ)。

3. 用连接程序生成可执行文件

1) 目标文件不能直接运行,需要用到连接程序。连接程序LINK可将多个.OBJ文件(即一个程序的多个模块)连接生成一个可执行文件.EXE。格式:LINK [目标文件1.OBJ], [目标文件2.OBJ]…。若省缺文件名,则采用交互式输入。如下图:

2) 同样注意连接过程的错误与警告信息。若有错误,在分析错误提示,找出原因后,仍须用EDIT修改源程序,重新汇编,重新连接,直到错误为0为止。

4. 执行程序

1) 通过以上的操作我们得到了一个可直接执行的文件。在DOS提示符下键入文件名即可运行程序。如: ABC ?

2) 有时程序可执行了,但在屏幕上看不到结果或者不是我们预期的结果,这时我们就又要用到上个实验中的DEBUG程序进行察看或调试。

3) 直接调试可执行文件的方法。格式:DEBUG 文件名.EXE。 如:DEBUG ABC.EXE ?

参考程序。

功能:从内存中存放的10个无符号字节整数中找出最小数并保存在AL中。 DATA SEGMENT

BUF DB 23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FH CN EQU $-BUF DATA ENDS

STACK SEGMENT STACK 'STACK' STA DB 10 DUP(?) TOP EQU $-STA STACK ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK START: PUSH DS XOR AX,AX

12

微机原理与接口实验指导书

PUSH AX

MOV AX,DATA MOV DS,AX

MOV BX,OFFSET BUF MOV CX,CN DEC CX

MOV AL,[BX] INC BX

LP: CMP AL,[BX] JBE NEXT MOV AL,[BX] NEXT: INC BX DEC CX JNZ LP

MOV AH,4CH INT 21H CODE ENDS

END START 【实验要求】

1. 输入源程序,在实验报告中列出源程序清单。

2. 分析实验过程中出现的错误的原因,说明解决办法。 3. 执行程序,记录运行结果。 【程序设计示例】

一、顺序结构程序设计。 1.问题

编程计算数学表达式:(W-(X*Y+Z-220))/X,并将结果(商和余数)存入RESULT开始的数据区中。其中W、X、Y、Z均为16位有符号数。

2. 设计思想

1) 本实验将用到加减乘除运算。

2) 16位乘法结果可能有32位,因此本实验中的加减运算要考虑32位。 3) 计算步骤依照表达式中的先后次序。

13

微机原理与接口实验指导书

3.流程图: 4.程序

DATA SEGMENT

W DW -303 X DW 1000 Y DW -15 Z DW 20

RESULT DW 2 DUP(?) DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,X IMUL Y

MOV CX,AX MOV BX,DX MOV AX,Z CWD

ADD CX,AX ADC BX,0 SUB CX,220 SBB BX,0 MOV AX,W CWD

SUB AX,CX

14

开始 程序初始化,计算X*Y 计算X*Y+Z 计算X*Y+Z-220 计算W-(X*Y+Z-220) 计算W-(X*Y+Z-220)/X 结束

微机原理与接口实验指导书

SBB DX,BX IDIV X

MOV RESULT,AX MOV RESULT+2,DX MOV AH,4CH INT 21H CODE ENDS

END START 二、分支结构程序设计。 1. 问题

在数据区中定义三个带符号数的字节变量,编写程序将其中的最大数找出来送到MAX单元。 2. 设计思想

1) 本实验将用到带符号数比较转移指令。

2) 可先比较两个数,选出其中大者,再与第三个数比较。

3. 程序流程图

开始

程序初始化,AL?X

Y AL>Y?

N AL?Y

Y AL>Z?

N AL?Z A MAX?AL

15

结束 微机原理与接口实验指导书

4.程序

DATA SEGMENT

X DB 115 Y DB 23 Z DB -20 MAX DB ? DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,X CMP AL,Y JG NEXT MOV AL,Y NEXT: CMP AL,Z JG OK MOV AL,Z OK: MOV MAX,AL MOV AH,4CH INT 21H CODE ENDS

END START 三、循环程序设计 1.问题

编程将数据段STR1单元开始的N个字符移到STR2开始的区域。

2. 设计思想

1) 本实验为数据块移动操作,既可用MOV传送指令,也可用串操作指令。

2) 可以从数据块的首地址开始也可从末地址开始。

2. 参考流程图(MOV指令,首地址开始):

16

微机原理与接口实验指导书

开始 程序初始化,SI?STR1首地址, DI?STR2首地址,CX?循环次数 Y 实现单个字符的传送

地址指针加1调整

N

Y 结束

4. 参考程序。

DATA SEGMENT

STR1 DB ‘WHAT IS YOU NAME?’,0AH,0DH,’$’ CN EQU $-STR1 STR2 DB CN DUP(?) DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV CX,CN LEA SI,STR1 LEA DI,STR2 LP: MOV AL,[SI] MOV [DI],AL INC SI INC DI LOOP LP

MOV AH,4CH INT 21H CODE ENDS

END START

17

CX-1=0? 微机原理与接口实验指导书

四、子程序设计 1.问题

从键盘向缓冲区BUF输入若干位十进制数的ASCII码,转换成二进制数存于BIN开始的字单元中。BUF中的数字以0DH结束。

2. 设计思想

1) 本实验将用到DOS功能调用的1号功能。

2) 可以边读键盘输入边存入到BUF开始的缓冲区,0DH结束。

3) 设输入的十进制数为d4d3d2d1d0(不超过65535,化为二进制数后为16位)。则d4d3d2d1d0=((((0?10+d4)?10+d3)?10+d2)?10+d1)?10+d0。

4) 可把di+1?10+di设计为子程序,调用次数=输入数据位数。

3. 参考程序

DATA SEGMENT

BUF DB 5 DUP(?) BIN DW ? DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA SI,BUF MOV CX,0 MOV AH,1 SCAN: INT 21H CMP AL,0DH JE CVT SUB AL,30H MOV [SI],AL INC SI INC CX JMP SCAN CVT: LEA SI,BUF LEA DI,BIN CALL CHANGE MOV AH,4CH INT 21H ;子程序:CHANGE CHANGE PROC NEAR PUSH DX PUSH BX MOV AX,0 MOV DX,10

18

微机原理与接口实验指导书

NEXT: PUSH DX MUL DX POP DX MOV BL,[SI] MOV BH,0 ADD AX,BX INC SI LOOP NEXT MOV [DI],AX POP BX POP DX RET CHANGE ENDP CODE ENDS

END START 五、中断调用程序设计 1.问题

1) 接收键盘输入的字符。

2) 将其中的小写字母转换为大写字母,放到输入缓冲区。 3) 遇到回车符表示本次输入结束,显示输入缓冲区的内容。 4) CTRL+C表示程序结束。

2. 设计思想

1) 用DOS中断中的01H号功能实现读键盘输入,用09H号功能实现显示。

2) 边读入字符边判别边存放,若是大写字母(41H~5AH)不转换,若是小写字母(61H~7AH)则转换,若是回车符(0DH)则显示缓冲区的内容,若是CTRL+C(03H)则结束程序。

3) 显示缓冲区内容时要在末尾添加0AH,’$’。

3. 参考程序。

DATA SEGMENT

BUF DB 80 DUP(?) DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX

MOV BX,OFFSET BUF

LP: MOV SI,0 LP1: MOV AH,1

INT 21H CMP AL,03H

19

本文来源:https://www.bwwdw.com/article/7gdh.html

Top