C语言上机实验一.docx

上传人:b****5 文档编号:11636930 上传时间:2023-03-29 格式:DOCX 页数:18 大小:1.88MB
下载 相关 举报
C语言上机实验一.docx_第1页
第1页 / 共18页
C语言上机实验一.docx_第2页
第2页 / 共18页
C语言上机实验一.docx_第3页
第3页 / 共18页
C语言上机实验一.docx_第4页
第4页 / 共18页
C语言上机实验一.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

C语言上机实验一.docx

《C语言上机实验一.docx》由会员分享,可在线阅读,更多相关《C语言上机实验一.docx(18页珍藏版)》请在冰豆网上搜索。

C语言上机实验一.docx

C语言上机实验一

仲恺农业工程学院实验报告纸

计算机科学与工程(院、系)计算机专业计机093班微机原理与接口技术课

学号2009102143姓名实验日期2012-5-16教师评定

实验一汇编语言设计

内容一使用MASM.EXE和LINK.EXE

一、实验目的

1.熟悉MASM.EXE和LINK.EXE的使用方法。

2.了解debug调试工具,观察程序的执行过程和对寄存器和内存单元的影响。

二、实验预习要求

1.按照题目要求在实验前编写好实验中的程序段。

三、实验内容

1、首先在硬盘上建立一个文件夹,例如:

D:

\MASM,如下图所示。

 

2、下载MASM.EXE和LINK.EXE到D:

\MASM文件夹里,下图。

 

3、经过以上两步,我们已经做好了准备工作,接下来书写程序。

我们的程序要求为,计算y=a×b+c-18,a、b、c均为带符号的8位二进制数据,为了实验观看实验结果,我们假设a=34H、b=56H、c=E7H。

程序源代码如下(分号后面内容为注释内容,可以不输入):

CCEQU18;伪指令定义CC

STACKSEGMENT;堆栈段起始

DW256DUP(?

);在堆栈段中预留了256个字的内容

TOPLABELWORD;TOP为栈顶偏移地址

STACKENDS;堆栈段结束

DATASEGMENT;数据段起始

DAT1DB34H;DAT1为题中操作属数a,为字节,存于数据段中

DAT2DB56H;DAT2为题中操作书b,为字节,存于数据段中

DAT3DB0E7H;DAT3为题中操作书c,为字节,存于数据段中

DATYDW?

;DATY为题中计算结果预留空间,为字,存于数据段中

DATAENDS;数据段结束

CODESEGMENT;代码段起始

ASSUMECS:

CODE,DS:

DATA,SS:

STACK;分配段地址对应关系

START:

MOVAX,DATA;START为标号,MOV语句将DATA数据段地址送AX

MOVDS,AX;将AX内容送入DS,赋予DS数据段DATA段地址

MOVAX,STACK;将STACK堆栈段地址送入AX

MOVSS,AX;将AX内容送入SS,赋予SS堆栈段STACK的段地址

MOVSP,OFFSETTOP;SP设初值

MOVAL,DAT1;取a,直接寻址方式

MOVBL,DAT2;取b,直接寻址方式

IMULBL;AX<-AL*BL,即将a*b的值存入AX

MOVBX,AX;将AX内容保存至BX

MOVAL,DAT3;取c,直接寻址方式

CBW;由于c是8位有符号数,所以做符号扩展至AH

ADDAX,BX;AX<-AX+BX,完成将a*b+c结果存入AX操作

SUBAX,CC;AX<-AX-18

MOVDATY,AX;将a*b+c-18的值,存放至数据段中偏移地址DATY的内存中

MOVAH,4CH;将4CH存入AH,为了下句调用DOS21号中断

INT21H;调用DOS21中断,由AH=4CH决定返回DOS操作系统

CODEENDS;代码段结束

ENDSTART;程序结束

将以上代码保存为扩展名为.ASM的文件的方法如下:

点击“开始”菜单“运行”notepad,打开记事本程序,在记事本中输入如上代码,如下图。

 

然后,选择“文件”下拉菜单,选择“令存为”选项打开“另存为”对话框,选择保存位置为“D:

\MASM”,文件名为“Sample.asm”(一定要注意扩展名必须为.asm或.ASM,大小写无所谓),保存类型为“所有文件”,如下图。

 

4、这时候D:

\MASM文件夹下就有3个文件了,分别为“MASM.EXE”、“LINK.EXE”和“SAMPLE.ASM”。

将sample.asm文件汇编为扩展名为.obj的文件,如下图,首先进入DOS环境下的D:

\MASM目录,然后使用MASMSAMPLE.ASM命令。

 

使用DOS的DIR命令查看当前目录下的文件,已经变为4个,多了一个sample.obj文件,见下图。

然后,使用LINK.EXE,将SAMPLE.OBJ文件链接生成可执行文件SAMPLE.EXE,下图。

 

使用DOS的DIR命令,可以查看到,又多了一个名为sample.exe文件,请自行查看。

5、这时候,我们可以执行sample.exe,可以看到执行正常,但是没有任何输出,这是因为,我们只是改变了内存单元和寄存器的数据,并没有输出,所以,我们需要使用debug来调试程序,观察程序的执行过程,和对寄存器和内存单元的影响,如下系列图示。

至此为止,我们的任务已经圆满完成,计算出了a*b+c-18的内容(114DH),并存入了相应的内存单元中,请自己结合上例,独自完成。

四、实验步骤

1、编译源程序生产OBJ文件

2、链接OBJ文件生产执行文件

3、调试执行文件

思考题:

在Debug过程中,自己可以通过e指令修改内存单元内容,使得程序完成a、b、c不是我们预定内容(34H、56H、E7H)的求解过程。

 

五、实验报告要求

1.小结MASM和LINK的使用方法

答:

首先使用命令行进入存放MASM.EXE和LINK.EXE的文件夹,然后使用MASM编译源程序,格式为MASM源程序文件名.asm,成功编译完源程序后会生成一个OBJ文件,然后使用LINK链接OBJ文件,格式为LINK源文件名称.obj,成功链接后会生成一个执行文件。

2.完成思考题,并写出过程。

思考题:

在Debug过程中,自己可以通过e指令修改内存单元内容,使得程序完成a、b、c不是我们预定内容(34H、56H、E7H)的求解过程。

反汇编程序可以看到第一条指令:

MOVAX,13DA和第六条指令:

MOVAL,[0000],由此可知数据段的首地址是13DA:

0000;

查看内存中13DA:

0000地址的内容可以发现a、b、c的值存放的地方。

修改a的值为03,b的值为08,c的值为0C,再次查看内存内容,确认修改成功。

运行程序,查看内存内容,a*b+c-18=3*8+12-18=18,18的十六进制为12,所以程序运行成功。

内容二Debug的常用调试命令和方法

一、实验目的

1.熟悉掌握Debug的常用调试命令和使用方法。

二、实验预习要求

1.复习实验内容一的内容,按照题目要求在实验前编写好实验中的程序段。

三、实验任务

1、在Dos界面输入命令“debug”(引号不用输入),然后回车(如下图所示),进入Debug调试系统。

 

2、如果要查看各寄存器的内容,使用“R”指令(如下图所示)。

 

3、如要修改某寄存器的内容,可以使用指令“rXX”的方法(XX为某寄存器的名字)。

如要将寄存器AX的内容修改为1234。

如下图所示。

 

4、接下来,可以尝试更改其他寄存器的内容,比如将DS修改为5A7B。

5、反汇编指令“U”,例如下图所示,反汇编自段地址CS(0B06),IP为200开始的连续的12条语句。

可以自己随便的试一下。

 

6、如果想查看某个内存单元中的内容的话,就需要用到“D”命令了。

如下图所示,查看DS为段寄存器,偏移地址(有效地址EA)为0800开始的内存单元的内容。

(请注意当前DS的值)

 

请思考,如何查看以ES为段地址,500位偏移地址的内存单元中的内容呢?

答案当然是输入:

DES:

0500了,自己试一下吧。

你还可以尝试查看一下其他内存单元的内容。

7、我们看到了某个内存单元的值,但是不是我们想要的,例如,看到了DS:

8000的字节内容是02(上图,0B06:

080002),而我们需要它为4A。

如何把它改为4A呢?

需要使用一个新的指令--“E”。

如下图的修改过程。

 

修改内存单元值就这么简单。

那么,接下来尝试查看ES:

0500的内存单元内容,然后将其修改为5B,然后修改ES:

0501的内容为7C,并检查结果。

8、现在到了要写指令的时候了,比如,你想看一下这条语句究竟是如何执行的:

MOVAL,05。

那么,请看下图所示。

 

9、接下来我们给一个具体的例子,完整演示一个验证过程。

例:

设DS=2000H,BX=1000H,AX=8040H,(21000H)=A0H,(21001H)=50H,执行MOVAX,[BX]的结果是?

解:

这是一个寄存器间接寻址问题,首先求得EA,EA=BX=1000H;然后求得该有效地址对应的相邻两个字节(一个字)的内存单元的物理地址。

物理地址(低)=16×段地址+EA=16×DS+EA=16×2000H+1000H=21000H

物理地址(高)=16×段地址+EA+1=16×DS+EA+1=16×2000H+1001H=21001H

(注意段地址默认为DS)而由设知(21000H)=A0H,(21001H)=50H所以AL=A0H,AH=50H即AX=50A0H,那么使用Debug验证的过程如下系列图所示:

 

 

 

至此,此验证过程就完成了!

10、退出Debug,使用命令“q”。

四、实验步骤

 

五、内容二实验报告要求

1.小结Debug的使用方法

答:

首先打开命令行窗口,然后输入DEBUG就可以进入DEBUG模式,如果需要调试某一个程序,则需要进入执行文件的文件夹,然后输入DEBUG执行文件名称.EXE,当完成调试任务时,可以使用Q命令退出并返回操作系统。

2.验证:

DS=6000H,BX=1000H,DATA=0008H,(61008H)=66H,(61009H)=55H,执行MOVAX,DATA[BX]的结果。

首先进入DEBUG模式,然后修改DS的值为6000H,修改BX的值为1000H,修改内存地址61008的内容为66H,修改内存地址61009的内容为55H,然后写入指令MOVAX,0008[BX],最后执行并验证结果,指令DATA[BX]实际上就是DS:

DATA[BX],即61008的地址,66H送到AL寄存器里,55H送到AH寄存器里,所以AX的值变为5566H。

六、实验总结

通过本次实验,我学会了如何编写、编译和链接汇编程序,并且通过DEBUG命令和T命令观察了程序的执行情况和寄存器的值的变化情况,使我对各个寄存器的功能有了更深的了解。

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

当前位置:首页 > 求职职场 > 简历

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

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