实验1初级程序的编写与调试实验.docx

上传人:b****3 文档编号:12698714 上传时间:2023-04-21 格式:DOCX 页数:15 大小:99.42KB
下载 相关 举报
实验1初级程序的编写与调试实验.docx_第1页
第1页 / 共15页
实验1初级程序的编写与调试实验.docx_第2页
第2页 / 共15页
实验1初级程序的编写与调试实验.docx_第3页
第3页 / 共15页
实验1初级程序的编写与调试实验.docx_第4页
第4页 / 共15页
实验1初级程序的编写与调试实验.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

实验1初级程序的编写与调试实验.docx

《实验1初级程序的编写与调试实验.docx》由会员分享,可在线阅读,更多相关《实验1初级程序的编写与调试实验.docx(15页珍藏版)》请在冰豆网上搜索。

实验1初级程序的编写与调试实验.docx

实验1初级程序的编写与调试实验

南昌大学实验报告

学生姓名:

吴文君学号:

6100410227专业班级:

106

实验类型:

■验证□综合□设计□创新实验日期:

2011-10-2实验成绩:

实验1初级程序的编写与调试实验

(一)

一.实验目的MOV

1.熟悉DEBUG命令;学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。

对于U命令、N命令、W命令等,也应该试用一下;

2.掌握数据在内存中的存放方式和内存操作数的几种寻址方式,段寄存器和物理地址计算;

3.熟悉数据传送指令、算术运算指令、逻辑指令、循环指令的使用。

4.掌握简单的汇编语言程序编写与调试。

二.实验内容

1.内存操作数及各种寻址方式使用;

2.求累加和程序;

3.多字节加法程序;

4.数据串搬家程序;

5.段寄存器概念及字符串传送指令练习。

三.实验要求

1.仔细阅读有关DEBUG命令的内容,对有关命令,要求事先准备好使用的例子;

2.阅读数据传送指令、算术运算指令、逻辑指令、循环指令的使用方法

3.用DEBUG的有关命令调试本实验中的求累加和程序、多字节加法程序、程序段

四.实验环境

PC微机;

DOS操作系统或Windows操作系统;

MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境。

五.实验步骤

1.内存操作数及各种寻址方式使用

MOVAX,1234立即寻址方式

MOV[1000],AX寄存器寻址方式

MOVBX,1002立即寻址方式

MOVBYTEPTR[BX],20

MOVDL,39立即寻址方式

INCBX

MOV[BX],DL寄存器寻址方式

DECDL

MOVSI,3

MOV[BX+SI],DL基址变址寻址方式

MOV[BX+SI+1],DL

MOVWORDPTR[BX+SI+2],2846相对基址变址寻址方式

步骤:

(1)用A命令键入上述程序,并用T命令逐条运行。

完成了输入上面的指令;

(2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。

第一条指令执行后:

第一条指令是立即寻址方式

第二条指令执行后:

第三条指令执行后

第四条

第五条

第六条

注意D命令显示结果中右边的ASCII字符及双字节数存放法。

2.求累加和程序:

程序:

MOVBX,1000

MOVCX,10

SUBAX,AX

LOP:

ADDAL,[BX]

ADCAH,0

INCBX

J:

LOOPLOP

INT3

步骤:

(1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址值代替;

-a

137C:

0100movbx,1000

137C:

0103movcx,10

137C:

0106subax,ax

137C:

0108addal,[bx]

137C:

010Aadcah,0

137C:

010Dincbx

137C:

010Eloop0108

137C:

0110int3

137C:

0111

-

(2)用命令NAA将此程序命名为文件AA(文件名可任取);

-n

-AA

137C:

000A

(3)用R命令将BX:

CX改为程序长度值(即最后一条指令后面的地址减去开始地址;

-rbx

BX0000

:

0000

-rcx

CX0000

:

0010

(4)用命令W100将此程序存到AA命名的磁盘文件中;

-w

Writing00010bytes

(5)用命令Q退出DEBUG;

-q

E:

\MASM611\BIN>

(6)用命令DEBUGAA再次调入DEBUG和文件AA,可用U命令检查调入程序;

E:

\MASM611\BIN>debugaa

-u

137C:

0100BB0010MOVBX,1000

137C:

0103B91000MOVCX,0010

137C:

010629C0SUBAX,AX

137C:

01080207ADDAL,[BX]

137C:

010A80D400ADCAH,00

137C:

010D43INCBX

137C:

010EE2FBLOOP010B

137C:

0110CCINT3

137C:

01110000ADD[BX+SI],AL

137C:

01130000ADD[BX+SI],AL

137C:

01150000ADD[BX+SI],AL

137C:

01170000ADD[BX+SI],AL

137C:

01190000ADD[BX+SI],AL

137C:

011B0034ADD[SI],DH

137C:

011D006B13ADD[BP+DI+13],CH

若调入DEBUG时忘了加AA文件名,可用N命令和L命令将文件调入;

(7)用E命令在内存地址1000H处键入16个数字;

-e1000

137C:

100000.1500.5600.2500.3500.1500.5400.2100.54

(8)用命令G=100J(J用实际地址代替),使程序运行并停在断点J上,检查AX,BX的值是否符合你的预计值;

-g010e

AX=0015BX=1001CX=0010DX=0000SP=FFEEBP=0000SI=0000DI=0000

DS=137CES=137CSS=137CCS=137CIP=010ENVUPEIPLNZNAPONC

137C:

010EE2FBLOOP0108

符合预计值

-t

AX=0015BX=1001CX=0010DX=0000SP=FFEEBP=0000SI=0000DI=0000

DS=137CES=137CSS=137CCS=137CIP=010ENVUPEIPLNZNAPONC

137C:

010EE2FBLOOP0108

(9)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样,若不一样,检查程序是否有错;

AX=0015BX=1001CX=000FDX=0000SP=FFEEBP=0000SI=0000DI=0000

DS=137CES=137CSS=137CCS=137CIP=0108NVUPEIPLNZNAPONC

137C:

01080207ADDAL,[BX]DS:

1001=56

-t

AX=006BBX=1001CX=000FDX=0000SP=FFEEBP=0000SI=0000DI=0000

DS=137CES=137CSS=137CCS=137CIP=010ANVUPEIPLNZNAPONC

137C:

010A80D400ADCAH,00

-t

AX=006BBX=1001CX=000FDX=0000SP=FFEEBP=0000SI=0000DI=0000

DS=137CES=137CSS=137CCS=137CIP=010DNVUPEIPLZRNAPENC

137C:

010D43INCBX

-t

AX=006BBX=1002CX=000FDX=0000SP=FFEEBP=0000SI=0000DI=0000

DS=137CES=137CSS=137CCS=137CIP=010ENVUPEIPLNZNAPONC

137C:

010EE2F8LOOP0108

-t

AX=006BBX=1002CX=000EDX=0000SP=FFEEBP=0000SI=0000DI=0000

DS=137CES=137CSS=137CCS=137CIP=0108NVUPEIPLNZNAPONC

137C:

01080207ADDAL,[BX]DS:

1002=25

程序没错。

执行到loop语句是跳回到指定的地址

(10)重复G、J与T,再检查AX是否正确;

(11)用G命令使程序运行到结束,检查AX值是否正确。

-g

AX=042FBX=1010CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000

DS=137CES=137CSS=137CCS=137CIP=0110NVUPEIPLNZACPONC

137C:

0110CCINT3

-

3.多字节加法程序

程序:

MOVDI,1000

MOVCX,8

MOVSI,2000

CLC

LOP:

MOVAL,[SI]

ADC[DI],AL

INCSI

INCDI

LOOPLOP

INT20

步骤:

(1)用命令键入此程序

-a

137C:

0100movdi,1000

137C:

0103movcx,8

137C:

0106movsi,2000

137C:

0109clc

137C:

010Amoval,[si]

137C:

010Cadc[di],al

137C:

010Eincsi

137C:

010Fincdi

137C:

0110loop010a

137C:

0112int

^Error

137C:

0112int20

137C:

0114

-

(2)用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一个8字节加数,均为低字节在前面。

-e1000

137C:

100000.1200.2300.4500.12

-e2000

137C:

200000.2300.1200.1200.12

执行后:

-g114

Programterminatednormally

-d1000

137C:

10003535572400000000-0000000000000000

137C:

10100000000000000000-0000000000000000

137C:

10200000000000000000-0000000000000000

137C:

10300000000000000000-0000000000000000

137C:

10400000000000000000-0000000000000000

137C:

10500000000000000000-0000000000000000

137C:

10600000000000000000-0000000000000000

137C:

10700000000000000000-0000000000000000

4.数据串搬家程序

(1)用A命令键入下列程序:

MOVSI,1000

MOVDI,1500

MOVCX,0FH

LOP:

MOVAL,[SI]

MOV[DI],AL

INCSI

INCDI

DECCX

JNZLOP

INT20

(2)用A命令DB伪指令在1000H键入下列字符串:

‘IBM_PCCOMPUTER'

137C:

1000

-a1000

137C:

1000DB'IBM_PCCOMPUTER'

137C:

100F

3.用G命令运行此程序,并用D命令检查目的地址处的字符与源串是否一致

运行后:

-G114

Programterminatednormally

-D1500

137C:

150049424D5F50432043-4F4D505554455200IBM_PCCOMPUTER.

137C:

15100000000000000000-0000000000000000................

137C:

15200000000000000000-0000000000000000................

137C:

15300000000000000000-0000000000000000................

137C:

15400000000000000000-0000000000000000................

137C:

15500000000000000000-0000000000000000................

137C:

15600000000000000000-0000000000000000................

137C:

15700000000000000000-0000000000000000................

是一致的、、、

-

5.自编程序

用16位减法指令编一个32位(4字节)数减法程序,两个源数及结果存放地址同多字节加法程序,调试并做记录。

-a

137C:

0100movax,2345

137C:

0103movcx,1234

137C:

0106movbx,5678

137C:

0109movdx,3456

137C:

010Csubcx,dx

137C:

010Esbbax,bx

137C:

0110

执行后:

AX=2345BX=5678CX=1234DX=3456SP=FFEEBP=0000SI=0000DI=0000

DS=137CES=137CSS=137CCS=137CIP=010CNVUPEIPLNZNAPONC

137C:

010C29D1SUBCX,DX

-t

AX=2345BX=5678CX=DDDEDX=3456SP=FFEEBP=0000SI=0000DI=0000

DS=137CES=137CSS=137CCS=137CIP=010ENVUPEINGNZACPECY

137C:

010E19D8SBBAX,BX

-t

AX=CCCCBX=5678CX=DDDEDX=3456SP=FFEEBP=0000SI=0000DI=0000

DS=137CES=137CSS=137CCS=137CIP=0110NVUPEINGNZACPECY

137C:

011075F7JNZ0109

注意结果的高位在ax中。

低位在cx中。

六.实验报告要求

1.各项实验记录,可以用截图或文字进行说明。

2.要求你修改的程序的清单(修改后)和调试记录,源程序请添加适当的注释。

3.自编程序原稿及调试后修正稿,写出原稿错在那里。

七.简答题

1.MOVBYTEPTR[BX],20

MOVWORDPTR[BX+SI+2],2846

上述指令中BYTEPTR及WORDPTR伪操作不加行不行?

试一试。

不行

2.用G命令运行多字节加法程序,并用D命令检查其结果(存放在哪里?

),是否正确?

对。

G命令式将程序执行完,执行后D后面加上你所要差的地址就行了。

存放到【1000】中。

3.将多字节加法程序中的INT20H指令改为INT3,有何区别?

若这条指令不加,行不行?

试一试。

行,改为int3后则停留在dos界面,没有区别;若不加指令,可行。

4.数据串搬家程序中的目的地址改为1002H,再运行此程序,看能不能把1000H开始的字符串搬到1002H开始的地方去?

修改程序以做到这一点。

不能,可以将目的地址改为1015h

八、实验总结

熟悉dos的基本操作

发现很多课本上没介绍的操作。

还有里面的细节很重要

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

当前位置:首页 > 法律文书 > 调解书

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

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