东南大学微机实验报告.doc

上传人:b****2 文档编号:1640147 上传时间:2022-10-23 格式:DOC 页数:10 大小:293.50KB
下载 相关 举报
东南大学微机实验报告.doc_第1页
第1页 / 共10页
东南大学微机实验报告.doc_第2页
第2页 / 共10页
东南大学微机实验报告.doc_第3页
第3页 / 共10页
东南大学微机实验报告.doc_第4页
第4页 / 共10页
东南大学微机实验报告.doc_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

东南大学微机实验报告.doc

《东南大学微机实验报告.doc》由会员分享,可在线阅读,更多相关《东南大学微机实验报告.doc(10页珍藏版)》请在冰豆网上搜索。

东南大学微机实验报告.doc

《微机实验及课程设计》实验报告学号08010424

东南大学

《微机实验及课程设计》

实验报告

实验一指令与汇编语言基础

实验二汇编语言程序设计

姓名:

柳佳男学号:

08010424

专业:

自动化实验室:

计算机硬件技术

实验时间:

2012年04月10日报告时间:

2012年04月16日

评定成绩:

审阅教师:

一.实验目的与内容

实验目的

1、了解命令行操作基本方式和基本命令,掌握PC环境下命令行方式的特点。

2、掌握汇编语言程序指令编辑基本框架程序,完成宏汇编、连接操作,实现运行;

3、熟练掌握动态调试程序TD/DEBUG常用命令或窗口功能,学会动态调试程序的基本方法。

4、利用框架程序检验8086/8088汇编语言(MASM/TASM)的各种指令性与指示性操作功能和语法,并了解它们与目标代码之间的关系;检验典型DOS/BIOS功能调用,实现简单的人机交互功能。

基本实验内容和要求(重点:

段存储结构和数据变量)

(1)掌握进入全屏命令行方式、修改环境的两种方法

(2)确定源程序的存放目录,构建个人实验环境;

(3)建立、编辑汇编源程序,构建典型的汇编程序框架;

(4)用汇编工具(MASM/TASM.EXE)汇编源程序产生OBJ目标文件;

(5)用链接程序(LINK/TLINK.EXE)产生EXE可执行文件;

(6)用调试工具软件(Debug.exe/TD.EXE)调试执行程序;

1)观察CPU寄存器、存储器环境;

2)单步、断点运行,观察中间结果;

3)完成正常执行;

4)修改中间运行环境(寄存器,存储器);

5)直接编写程序片断,验证指令功能

实验内容一:

编辑(EDIT):

基本的汇编语言格式:

段,变量,过程;汇编(MASM):

产生.LST文件;链接(LINK).MAP文件(调试观察源-目标关系)

多模块程序,.LST,.MAP文件(调试观察源-目标关系)

DOS/BIOS调用功能(I/O)调试验证

INT21H/INT16H

TASM/ziTLINK/vTD带符号(Symble)调试(观察源-目标关系)

实验内容二:

1.输入字符串,作大小写变换,显示结果

2.输入十进制数N(<=65535),转换成十六进制数,显示在屏幕上(有检错功能)

3.改写成子程序结构

4.N<=12时用递归算法实现阶乘;

5.采用双模块结构;采用软件中断调用(INT80H,用DEBUG跟踪调试)

二.基本实验原理

运行汇编程序必备的软件环境:

DOS操作系统;汇编软件系统。

汇编系统盘应包含如下文件:

MASM宏汇编程序文件(TASM)

LINK连接程序文件(TLINK)

CREF索引程序文件(也可不用)

EDIT文本编辑程序(或PE等文本编辑程序)

用户通过屏幕编辑程序EDIT(各功能)键入源程序,检查无误,可将源程序存到汇编系统盘上,该程序的扩展名为·ASM。

(XXX.ASM)

(2)MASM汇编程序:

格式、宏、模块èOBJ:

浮动汇编(相对关系)、段、变量待定位

执行宏汇编程序MASM----生成目标文件.OBJ,辅助文件LST,CRF(可选)

用汇编语言编写的源程序必须是一个完整的源程序,才能经过宏汇编程序MASM的汇编,生成一个目标程序。

为了完成汇编任务,汇编程序一般采用两遍扫描的方法,第一遍扫描源程序产生符号表、处理伪指令等,第二遍扫描产生机器指令代码、确定数据等。

OBJ将源程序的操作码部分变为机器码,但地址操作数是可浮动的相对地址,而不是实际地址,因此需经LINK连接文件进行连接才能形成可执行文件。

三.方案实现与测试

实验一:

以string程序为例

1)汇编过程

使用edit编辑文件

在DOS状态下,键入MASM则调入宏汇编程序,屏幕显示与操作如下:

string为源程序名(string.asm),方括号中是机器规定的默认文件名,默认只生成(string.obj)文件。

如果用户需要列表文件和交叉索引文件,则可在[NUL.LST]和[NUL.CRF]后键入文件名即可。

同样,按照下图中的方法,可以生成(string.map)文件

列表文件(.LST)是通过汇编程序(MASM)产生的,可以在DOS状态下用TYPE

命令显示或打印该文件,以便分析调试源程序。

列表程序由三部分组成:

(1)源程序和目标程序清单

(2)段信息汇总表

(3)符号汇总表

3)多模块程序

以string1和string2为例

文件中内容:

publicinput

extrndisp:

far

datasegment

inputdb100,100dup(0)

string1db0dh,0ah,'pleaseinputyourstrings',0dh,0ah,'$'

string2db0dh,0ah,'thestringsyouinputare:

',0dh,0ah,'$'

string3db0dh,0ah,'Doyouwanttocontinue(y/n):

',0dh,0ah,'$'

dataends

stackssegmentstack

db256dup(0)

stacksends

codesegment

assumecs:

code,ds:

data,ss:

stacks

mainprocfar

start:

movax,data

movds,ax

movax,stacks

movss,ax

loop1:

movdx,offsetstring1

movah,09h

int21h

movdx,offsetinput

movah,0ah

int21h

movdx,offsetstring2

movah,09h

int21h

calldisp

movdx,offsetstring3

movah,09h

int21h

movah,1

int21h

cmpal,'y'

jzloop1

movah,4ch

int21h

mainendp

codeends

endstart

文件中内容:

extrninput:

byte

publicdisp

codesegment

assumecs:

code

dispprocfar

start:

xorcx,cx

movcl,input[1]

movsi,2

again:

movdl,input[si]

cmpdl,61h

jbnext

cmpdl,7ah

janext

subdl,20h

next:

movah,02h

int21h

incsi

loopagain

ret

dispendp

codeends

endstart

将string1.asm和string2.asm汇编后链接

用type语句来查看string.map中的内容.

可以看出,由连接程序LINK产生的扩展名为.MAP文件,它实际上是连接程序的列表文件,它给出了每个段的地址分配情况及长度。

而且由于本例是多模块结构,实际上使用了两个代码段,因而图中显示了两个CODE段的地址范围,但是入口地址entrypoint只有一个。

4、DOS/BIOS调用功能(I/O)调试验证

用TD打开string.1文件,F7单步调试,观察执行int21H中断时各寄存器的内容变化情况。

5、TASM/ziTLINK/vTD带符号(Symble)调试(观察源-目标关系)

实验二

1.输入字符串,作大小写变换,显示结果

相应的程序及其调试已在实验一中完成,运行结果为

结果与预期相符.

2.输入十进制数N(<=65535),转换成十六进制数,显示在屏幕上(有检错功能)

3.改写成子程序结构

程序片段:

loop1:

movoutput,0000h

movdx,offsetstring1

movah,09h

int21h

movdx,offsetinput

movah,0ah

int21h

movright,1

callchange

cmpright,0

jzerror

movdx,offsetstring2

movah,09h

int21h

movax,output

movdl,ah

shrdl,4

calldisp

movdl,ah

anddl,0fh

calldisp

movdl,al

shrdl,4

calldisp

movdl,al

anddl,0fh

calldisp

jmpgo

运行结果:

用debug调试程序

4.N<=12时用递归算法实现阶乘;

MOVAX,N

CALLPCALC

MOVRESULT,AX

PCALCPROC

CMPAX,1;递归函数

JNZPCALC1

RET

PCALCENDP

PCALC1:

PUSHAX

DECAX

CALLPCALC;递归调用

POPBX

MULBX

RET

PCALCENDP

Debug单步调试程序,并且不断通过-d来观察栈顶的变化情况.发现在递归调用的过程中,IP的后续内容被不断压入栈中,递归返回时又被释放出来.

运行结果:

四.提高与创新研究

通过C++编译器,将高级语言转化为汇编语言

程序1hello.c

#include

 

intmain()

{

printf("Hello,world\n");

return0;

}

按照如下操作,可以生成含有二进制、汇编和高级语言的.cod文件

五.分析与总结

通过这几次试验,我基本上了解并掌握了如何完成宏汇编、连接操作,实现运行,以及用debug和TD进行程序的调试.通过TD和命令行调试,可以看到CPU寄存器和存储器的内容和地址等,也可以对其进行修改.

在编写调试程序的过程中出现了许多问题,

例如在十进制转化成十六进制的试验中,出现了如下错误

发现是‘shrdl,4‘这条语句出现错误,经分析,原来当移多位时,指令系统要求以为次数必须放在CL

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1