微机原理与接口实验指导(学生用)2012.11

更新时间:2023-09-19 10:42:01 阅读量: 小学教育 文档下载

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

《微机原理与接口技术》实验指导 实验学时:8学时,实验数4个

实验1:汇编指令与寻址方式(2学时)

一. 实验目的

1. 学会使用MASM FOR WINDOWS 集成实验环境共享版软件。 2. 熟悉80x86寻址方式及基本指令的功能。 3. 掌握汇编语言程序的上机过程。

4. 掌握利用DEBUG的单步指令T来观察各寄存器的状态,特别是状态标志寄存器的状态。 二. 实验内容

1. 学习MASM FOR WINDOWS 软件

包括:简单入门程序、操作数的寻址方式、DEBUG的T命令等。 2. 学习状态标志寄存器各标志位在DEBUG中的显示形式 顺序 1 2 3 4 5 6 7 8 标志位名字 OF 溢出(有/无) DF 方向(减/增) IF 中断(允许/屏蔽) SF 符号(负/正) ZF 零(是/否) AF 辅助进位((有/无) PF 奇偶(偶/奇) CF 进位(有/无) 置位=1 OV DN EI NG ZR AC PE CY 复位=0 NV UP DI PL NZ NA PO NC 3. 汇编语言程序的上机过程 在MASM FOR WINDOWS集成实验环境的主界面下

第一步:点击第二行的“新建”,在程序模板的相应位置输入下列程序(黑体部分),点击第二行的:“保存”,取名为比如EX11.ASM的源程序;

DATA SEGMENT DATA CODE

NUM DB 82H, 68H, 88H SUM DB ?

ENDS SEGMENT

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

MOV DS,AX

MOV AH, 4CH INT 21H

ENDS

END START

第二步:点击第一行的“运行”,在下拉菜单中选择“编译成目标文件(OBJ)”,再选择“生成可执行文件(EXE)”,最后点击“运行”。程序运行后将自动回到主界面。

如果程序有错误,则在编译过程中有错误提示(错误行和错误原因),改正后再保存,

重新编译,直到编译成功为止。

第三步:点击第一行的“运行”,在下拉菜单中选择“DEBUG调试”,在调试状态下,依次输入单步指令 T,观察各寄存器和标志寄存器的内容的变化,并回答下列问题。

DEBUG的单步执行命令T的作用:从CS:IP开始执行程序,每执行一条停下来。执行后都将显示各寄存器的内容、标志位的状态、本条指令的CS:IP地址,本条指令的机器码和下一条要执行的指令。

如在EX11.EXE程序中,第一条指令为 ASART开始的 MOV AX,DATA,执行了T后,显示:

还可以连续执行几条,如T 6,结果如下:(超过6,将显示不下)

(1) 代码段第一条可执行指令MOV AX, DATA对应的机器代码为 H,它是一个 字节指令。

(2) 执行完MOV DS, AX指令后,数据段寄存器DS的内容为 H,源程序在数据段中定义的数据82H、68H和88H被装入的存储单元的物理地址分别为 H、 和 H。

(3) 程序中第一条ADD AL, [BX] 指令是一个 字节指令,该操作数所在存储单元的逻辑地址(DS): (BX)为 ,其物理地址为 H;执行完该指令后(AL)= H,CF= ,OF= ,ZF

= ,SF= ,AF= ,PF= ;若两操作数为无符号数,计算结果是否正确 ?若两操作数为带符号数,计算结果是否正确 ?若计算结果正确,结果是正数还是负数 ?

(4) 执行完第二条ADD AL, [BX] 指令后(AL)= H,CF= ,OF= ,ZF= ,SF= ,AF= ,PF= 。若两操作数为无符号数,计算结果是否正确 ?若两操作数为带符号数,计算结果是否正确 ?若计算结果正确,结果是正数还是负数 ? (5)

4.将下列源程序汇编为EX12.EXE文件,使用DEBUG的T命令执行,并回答以下问题。 STACK STACK CODE

SEGMENT

STL DW 100H DUP(?) ENDS SEGMENT

ASSUME CS:CODE,SS:STACK

AX, STACK SS,AX

SP,LENGTH STL

指令MOV SUM, AL执行完后,注意观察(DS):0003H单元中值的变化,该单元的

值变为 H。

START: MOV

MOV

MOV CODE

MOV AX, 0101101100001010B MOV BX, 0100110010100011B PUSH AX PUSH BX ADD AX,BX POP AX POP BX AND AX,BX MOV AH,4CH INT 21H END START

ENDS

(1) 代码段的前三条指令MOV AX, STACK、MOV SS, AX和MOV SP, LENGTH STL的功能为堆栈初始化,试问执行完这三条指令后,堆栈的栈底所在单元的逻辑地址(SS): (SP)为 ;执行PUSH AX指令后堆栈指针寄存器(SP)= H,此时,(SS): (SP+1)和(SS): (SP)单元的值为 H;执行完PUSH BX后 (SP)= H,此时,(SS): (SP+1)和(SS): (SP)单元的值为 H;执行完POP AX后(SP)= H;执行完POP BX后(SP)= H;

此时(AX)= H,(BX)= H。

(2) 执行ADD AX, BX指令后(AX)= H,CF= ,OF=___ __ _,ZF=__ ____,SF= ______,AF= ______,PF= ______;

(3) 执行AND AX, BX指令后(AX)= H,CF= ,OF= ,ZF= ,SF= ,AF= ,PF= 。

5. 将下列指令汇编成为程序EX13.EXE,上机运行,观察汇编后给出的出错信息,将指令改正后再上机验证。

(1) MOV BP, BL

(3) MOV [BX],20H

(4) INC [SI]

(5) ADD AX,[SI+DI]

(6) SHL AX,3

(7) PUSH [2000H]

(8) POP AL

(9) MOV CS,AX

(10) MOV DS,1000H

三. 实验报告要求

1. 写出实验内容中任务3和任务4中所有问题的正确答案。

2. 写出实验内容中任务5的错误指令的错误原因,对可以改正的指令给出其正确形式。

3. 简要说明汇编语言程序设计的步骤,每一步使用什么工具,生成什么类型的文件。 4. 写出实验小结,内容包括实验心得(收获)、不足之处或今后应注意的问题等。

(2) MOV [BX],[BP]

实验2:汇编语言的调试与运行(2学时)

一.实验目的

1. 学习使用DEBUG程序的各种命令。 2. 掌握用DEBUG调试自编程序的方法。 二.实验内容 1. 进入DEBUG

以实验1的EX11.ASM的源程序为例,在主菜单下通过编辑生成EX11.ASM文件,汇编生成EX11.OBJ文件,通过连接生成EX11.EXE文件,再选择“运行----DEBUG”。 2. 学习使用DEBUG

DEBUG程序是一种专门为分析和调试汇编语言程序而设计的一种调试工具。它能使程序设计者接触到机器内部,具有跟踪程序执行、观察中间运行结果、显示和修改寄存器或存储单元内容、装入或显示、修改任何文件、完成磁盘读写等多种功能。经常用到的DEBUG指令有: (1) 单步执行命令T(也叫跟踪命令)

格式:T [N]];(N小于等于6)

从CD:IP开始执行程序,每执行1或(N)条停下来。执行后都将显示各寄存器的内容、标志位的状态、本条指令的CS:IP地址,本条指令的机器码和下一条要执行的指令。 (2) 显示、修改寄存器命令R

格式:R[寄存器名]

若缺省寄存器名,则显示当前所有寄存器内容、状态标志及将要执行的下一条指令的地址、及其指令代码及汇编语句形式等。如 R

若给出寄存器名称,则显示该寄存器的内容并可进行修改。如: R AX

(3) 显示内存单元内容命令D

格式: D[段地址:偏移地址]

如:D ES:0,将显示ES:0000~0070共128个单元的内容。

屏幕左边为每行的首地址(段:偏移量)。中间为从指定地址开始的128个内存单元的内容,用十六进制的格式输出, 右边为内存单元中的数据对应的相应可显示的ASCII码字符。没有对应的ASCII码就用.来代替。

本文来源:https://www.bwwdw.com/article/0xrh.html

Top