当前位置:文档之家› 硬件基础实验指导书与答案

硬件基础实验指导书与答案

《计算机硬件基础》课程实验指导书辽宁工程技术大学软件学院2017年5月目录64位操作系统下使用MASM (3)实验上机操作范例 (5)实验一CPU结构 (15)实验二指令格式 (22)//实验三循环程序设计 (25)实验四综合程序设计(一) (32)实验五综合程序设计(二) (36)实验六高级汇编技术 (42)64位操作系统下使用MASM1.安装DOSBox。

双击DOSBox0.74-win32-installer.exe。

2.运行DOSBox。

双击桌面的DOSBox快捷方式,如图1所示。

图1 运行DOSBOX虚拟机3.将MASM文件夹里的全部文件拷贝到一个目录下,比如d:\masm下,然后将这个目录挂载为DOSBox的一个盘符下,挂载命令为Mount c d:\masm 。

然后切换到挂载的c盘,如图2所示。

图2 挂载masm文件夹3.编译汇编源程序,如图3所示。

图3 汇编源程序4.连接和运行源程序,如图4所示。

图4连接和运行源程序实验上机操作范例【范例】完成具有如下功能的分段函数1 X>0Y = 0 X=0-1 X<0其中:X存放在内存单元中,Y为结果单元。

【问题分析】根据题意画出程序流程图,如图1所示。

图1 分段函数的程序流程图根据程序流程图编写如下程序DSEG SEGMENTX DW ?Y DW ?DSEG ENDSCSEG SEGMENTASSUME CS: CSEG, DS: DSEGSTART:MOV AX, DSEGMOV DS, AXLEA SI, XMOV AX, [SI]AND AX, AXJNS LP1MOV Y, 0FFH ; X<0JMP END1LP1: JNZ LP2MOV Y, 00HJMP END1LP2: MOV Y, 01HEND1: MOV AH, 4CHINT 21HCSEG ENDSEND START汇编语言程序的开发分为以下4个部分:编辑(生成.asm文件)—→汇编(生成.obj文件)—→连接(生成.exe文件)—→调试。

下面介绍汇编语言源程序从编辑到生成一个可执行文件(.exe文件)的过程。

利用Microsoft公司提供的MASM6.15版本的工具包(包括MASM.EXE、LINK.EXE、ML.EXE、DEBUG32.EXE等),如图2所示。

图2 G盘下的MASM615工具包下面的例子按以下几个步骤完成:(1)先编写一个fenduan.asm文件;(2)保存并通过运行masm.exe生成目标文件fenduan.obj;(3)再利用link.exe生成可执行文件fenduan.exe;(4)运行fenduan.exe文件;(5)运行debug32 fenduan.exe后即可对程序进行跟踪调试。

1.通过DOSbox调用MASM6.15图3 挂载masm6.15将masm汇编工具文件夹g:\masm615\挂载到DOSbox虚拟机的C盘下。

命令为mount c g:\masm615,然后,进入虚拟盘符C盘下,即g:\masm615下。

2.编辑源程序在masm615文件下建立记事本,把文件扩展名改为.asm并进行保存,这时弹出图4所示窗口,单击“是”。

图4 重命名对话框双击fenduan.asm文件,编写汇编语言源程序,如图5所示。

图5 记事本中编写汇编语言源程序2、汇编汇编的命令格式是:masm 文件名.asm (扩展名.asm可以省略)图6 汇编fenduan.asm文件汇编fenduan.asm文件,在DOS环境下键入―masm fenduan.asm‖,按回车。

如图6所示生成fenduan.obj文件,显示的信息含义为:Object filename [FENDUAN.OBJ]: ←是否改动输出OBJ文件名,如不改就按回车键―ENTER‖。

Source listing [NUL.LST]: ← 是否需要列表文件(LST),不需要就按回车键。

Cross-reference [NUL.CRF]: ←是否需要对照文件(CRF),不需要则按回车键。

51670 + 464874 Bytes symbol space free0 Warning Errors ←警告错误,表示编译器对某些语句不理解,通常是输入错误。

0 Severe Errors ←严重错误,会造成程序无法执行,通常是语法结构错误。

如果没有一个错误存在,即可生成OBJ文件。

OBJ中包含的是编译后的二进制结果,它还无法被DOS载入内存中加以执行,必须加以连接(Linking)。

以LINK将OBJ文件(FENDUAN.OBJ)链结成EXE 文件(FENDUAN.EXE)。

3、连接连接的命令格式:link 文件名.obj (扩展名.obj可以省略)图7 连接fenduan.obj文件连接fenduan.obj文件,在DOS环境下键入―link fenduan.obj‖,按回车。

如图7所示生成了fenduan.exe文件,显示的信息含义为:Microsoft (R) Overlay Linker Version 3.60Copyright (C) Microsoft Corp 1983-1987. All rights reserved.Run File [SMILE.EXE]: ← 是否改动输出EXE文件名,如不改就ENTER。

List File [NUL.MAP]: ← 是否需要列表文件(MAP),不需要则ENTER。

Libraries [.LIB]: ←是否需要库文件,要就键入文件名,不需要则ENTER。

LINK : warning L4021: no stack segment← 由于COM文件不使用堆栈段,所以错误信息。

"no stack segment"并不影响程序正常执行。

4、调试调试的命令格式是:DEBUG32 文件名.exe ←.exe可以省略。

若调试fenduan.exe文件,如图14所示在DOS环境下键入―debug fenduan.exe‖,按回车,这时进入debug动态调试窗口。

先用命令U反汇编整个程序,查看每条指令的物理地址,其显示内容如图8和9所示。

图8 调试fenduan.exe图9 用u命令反汇编fenduan程序在这里,出现的反汇编指令如下所示:内存地址指令代码反汇编的程序代码1CA6:0000 B8A51C MOV AX, 1CA5 ;数据段的首地址DS =1CA51CA6:0003 8ED8 MOV DS, AX1CA6:0005 8D360000 LEA SI, [0000] ;变量X的偏移地址00001CA6:0009 8B04 MOV AX, [SI]1CA6:000B 23C0 AND AX, AX1CA6:000D 7909 JNS 00181CA6:000F C7060200FF00 MOV WORD PTR [0002],00FF ;变量Y的偏移地址0002 1CA6:0015 EB12 JMP 0029 ;跳转到该程序段偏移地址为0029处执行1CA6:0017 90 NOP1CA6:0018 7509 JNZ 00231CA6:001A C70602000000 MOV WORD PTR [0002],00001CA6:0020 EB07 JMP 00291CA6:0022 90 NOP1CA6:0023 C70602000100 MOV WORD PTR [0002],00011CA6:0029 B44C MOV AH,4C1CA6:002B CD21 INT 21假设我们给变量X赋值为F723H,如图10所示。

图10 为变量X赋值从反汇编地址中找到执行的起始地址为0000到002B。

然后执行,如图11所示。

图11 设置断点如图12所示查看Y变量中的值,通过反汇编命令我们知道Y变量的偏移地址为0002H。

图12 查看Y变量此时,我们观察到X变量为F723H时,X小于0,则Y应为-1(即FFH),说明调试成功。

实验一CPU结构一、实验目的1.了解CPU内部结构,掌握查看有关寄存器的方法。

2.掌握数据在内存中的存放方式和内存操作数的寻址方式。

3.熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。

4.掌握汇编语言源程序的组成格式。

5.掌握汇编语言源程序的编辑、调试及运行方法。

二、实验准备知识1.DEBUG程序的启动DEBUG是专门为汇编语言设计的一种汇编语言调试工具,它通过单步执行,设置断点连续执行等方式为汇编语言程序员提供了非常有效的调试手段。

在DOS提示符下,可输入命令:C>DEBUG [d:][path][文件名][ 参数1][参数2]其中文件名是被调试文件的名称,它必须是执行文件(.EXE),两个参数是运行被调试文件时所需要的命令参数,在DEBUG程序调入后,出现提示符―–‖,此时,可键入所需的DEBUG命令。

在启动DEBUG时,如果输入了文件名,则DEBUG程序把指定文件装入内存。

用户可以通过DEBUG的命令对指定文件进行修改,显示和执行。

如果没有文件名,则是以当前内存的内容进行工作。

2.DEBUG的主要命令1)汇编命令A格式:– A [起始地址]功能:该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。

2)反汇编命令U(1)格式1:– U [起始地址]功能:该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U 命令的最后一条指令的下一个单元开始显示32个字节。

(2)格式2:– U [起始地址终止地址]格式3:– U [起始地址L 字节数]功能:该命令对指定范围的内存单元进行反汇编。

例如:3)运行命令G格式:– G [= 起始地址1][断定点地址2[断点地址3……]]功能:从指定地址开始执行程序。

在设定的断点处程序暂停,并显示全部寄存器内容和下一条要执行的指令。

一般设置断点前最好用U命令查看一下指令开始的地址。

断点数最多为10个。

如:– G=100 1084)跟踪命令(单步执行)T格式1:– T [=起始地址]格式2:– T [=起始地址指令条数]功能:从指定地址开始执行程序,每次执行一条指令,然后显示各寄存器的内容和状态寄存器的内容,及以助记符形式表示的下一条指令。

如:– T=1005)显示内存单元内容的命令D格式1:– D [起始地址]格式2:– D [起始地址终止地址]格式3:– D [起始地址L 字节数]功能:显示指定内存单元的内容。

6)修改内存单元内容的命令E(1)用给定的内容代替指定范围的单元内容格式:– E 地址内容表例如:– E 2000:0100 F3 "XYZ" 8D其中F3、"X"、"Y"、"Z"和8D各占一个字节,用这五个字节代替原内存单元2000:0100到0104的内容,"X"、"Y"、"Z"将分别存入其ASCII码值。

相关主题