北京工业大学微机原理实验报告2.docx

上传人:b****2 文档编号:12893713 上传时间:2023-04-22 格式:DOCX 页数:14 大小:301.51KB
下载 相关 举报
北京工业大学微机原理实验报告2.docx_第1页
第1页 / 共14页
北京工业大学微机原理实验报告2.docx_第2页
第2页 / 共14页
北京工业大学微机原理实验报告2.docx_第3页
第3页 / 共14页
北京工业大学微机原理实验报告2.docx_第4页
第4页 / 共14页
北京工业大学微机原理实验报告2.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

北京工业大学微机原理实验报告2.docx

《北京工业大学微机原理实验报告2.docx》由会员分享,可在线阅读,更多相关《北京工业大学微机原理实验报告2.docx(14页珍藏版)》请在冰豆网上搜索。

北京工业大学微机原理实验报告2.docx

北京工业大学微机原理实验报告2

 

微机原理实验报告

—实验二熟悉汇编程序建立

及其调试方法

 

姓名:

学号:

 

一、实验目的

1、熟悉汇编语言源程序的框架结构,学会编制汇程序。

2、熟悉汇编语言上机操作的过程,学会汇编程序调试方法。

二、实验内容

1、学习编写汇编语言源程序的方法,了解数据存放格式。

2、阅读给出的程序,找出程序中的错误。

3、通过调试给出的汇编语言源程序,了解并掌握汇编语言程序的建立、汇编、链接、调试、修改和运行等全过程。

三、实验预习

1、阅读实验指导第一章的内容,了解汇编语言程序建立、汇编、链接、调试的全过程。

2、下面的汇编语言源程序有错误的,试给程序加注释。

通过调试手段找出程序中的错误并修改之。

写出程序的功能,画出程序流程图。

(1)程序修改前:

STACKSG:

SEGMENTPARASTACK‘STACK’;不能有冒号

DB256DUP(?

STACKSGENDS

DATASG:

SEGMENTPARA‘DATA’;不能有冒号

BLOCKDW0,-5,8,256,-128,96,100,3,45,6,512

DW23,56,420,75,0,-1024,-67,39,-2000

COUNTEQU20

MAXDW?

DATASGENDS

CODESG:

SEGMENT;不能有冒号

ASSUMESS:

STACKSG,CS:

CODESG

ASSUMEDS:

DATASG

ORG100H

BEGINMOVDS,DATASG;BEGIN:

应改为MOVAX,DATASG

MOVDS,AX

LEASI,BLOCK

MOVCX,COUNT

DECCX

MOVAX,[SI]

CHKMAXADDSI,2;应加冒号CHKMAX:

CMP[SI],AX

JLENEXT

MOVAX,[SI]

DECCX;删除

NEXT:

LOOPCHKMAX

MOVMAX,AX

MOVAH,4CH

INT21H

CODESGENDS

ENDBEGIN

(2)程序修改后:

STACKSGSEGMENTPARASTACK‘STACK’

DB256DUP(?

STACKSGENDS

DATASGSEGMENTPARA‘DATA’

BLOCKDW0,-5,8,256,-128,96,100,3,45,6,512

DW23,56,420,75,0,-1024,-67,39,-2000

COUNTEQU20

MAXDW?

DATASGENDS

CODESGSEGMENT

ASSUMESS:

STACKSG,CS:

CODESG

ASSUMEDS:

DATASG

ORG100H

BEGINMOVAX,DATASG

MOVDS,AX

LEASI,BLOCK

MOVCX,COUNT

DECCX

MOVAX,[SI]

CHKMAX:

ADDSI,2

CMP[SI],AX

JLENEXT

MOVAX,[SI]

NEXT:

LOOPCHKMAX

MOVMAX,AX

MOVAH,4CH

INT21H

CODESGENDS

ENDBEGIN

(3)程序注释:

STACKSGSEGMENTPARASTACK'STACK'

DB256DUP(?

STACKSGENDS;定义堆栈段

DATASGSEGMENTPARA'DATA';数据段定义

BLOCKDW0,-5,8,256,-128,96,100,3,45,6,512

DW23,56,420,75,0,-1024,-67,39,-2000;定义变量BLOCK包含20个字

COUNTEQU20;COUNT=20

MAXDW?

;定义字变量MAX并不赋值

DATASGENDS

CODESGSEGMENT;代码段定义

ASSUMESS:

STACKSG,CS:

CODESG;说明STACKSG是堆栈段

ASSUMEDS:

DATASG;CODESG是代码段,DATASG是数据段

ORG100H

BEGIN:

MOVAX,DATASG

MOVDS,AX;DS指向DATASG

LEASI,BLOCK;取BLOCK的有效地址给SI

MOVCX,COUNT;CX=20

DECCX;CX=CX-1

MOVAX,[SI];将DS:

[SI]里的值送到AX

CHKMAX:

ADDSI,2;SI=SI+2

CMP[SI],AX;比较DS:

[SI]与AX值的大小

JLENEXT;如果DS:

[SI]的值小于AX里的值,则跳转到NEXT

MOVAX,[SI];将DS:

[SI]的值送到AX

NEXT:

LOOPCHKMAX;循环CHKMAX

MOVMAX,AX;将AX的值送到变量MAX

MOVAH,4CH;结束

INT21H

CODESGENDS

ENDBEGIN

 

(4)程序的流程图:

Y

N

N

Y

(5)程序的功能:

找出20个数中的最大值并保存。

四、实验步骤

1、建立汇编语言源程序,对建立的汇编语言源程序进行编译、链接。

2、运行DEBUG调试程序,装入被调试程序,用U命令查看调入的程序,记录代码段基值和数据段基值,用R命令查看并记录下当前寄存器内容。

代码段段基值:

164F数据段段基值:

162C

AX=0000BX=0000CX=0536DX=0000SP=0100BP=0000

SI=0000DI=0000DS=162CES=162CSS=163CCS=164FIP=0100

3、用D命令查看并记录下内存中数据存放格式。

(注:

在教室没有做完,回来用自己电脑做的,所以段基值不一样)

4、用T命令单步运行程序,观察各条指令执行结果,以及对寄存器、标志位、内存单元的影响,若找出程序中的错误,用Q命令退出DEBUG环境,修改汇编语言源程序,重复上述步骤,直至整个程序无误。

5、若将LEASI,BLOCK语句改为LEASI,BLOCK+2*COUNT-2,并将ADDSI,2改为SUBSI,2,重新运行程序,观察运行结果:

1)建立汇编语言源程序,对建立的汇编语言源程序进行编译、链接。

2)运行DEBUG调试程序,装入被调试程序,用U命令查看调入的程序,记录代码段基值和数据段基值,用R命令查看并记录下当前寄存器内容。

代码段段基值:

164F数据段段基值:

162C

AX=0000BX=0000CX=0536DX=0000SP=0100BP=0000

SI=0000DI=0000DS=162CES=162CSS=163CCS=164FIP=0100

3)用D命令查看并记录下内存中数据存放格式

4)用T命令单步运行程序,观察各条指令执行结果,以及对寄存器、标志位、内存单元的影响。

和之前的结果一样。

6、若重新给出一组数据,可用E命令输入新数据后运行程序,观察并记录运行结果。

(注:

在教室没有做完,回来用自己电脑做的,所以段基值不一样)

 

7、若要求找出数据区中最小数,程序将如何修改,试上机调试。

(将JLENEXT改为JGENEXT)

DATASEGMENTPARA'DATA'

BLOCKDW0,-5,8,256,-128,96,100,3,45,6,512

DW23,56,420,75,0,-1024,-67,39,-2000

COUNTEQU20

MAXDW?

DATAENDS

STACKSEGMENTPARASTACK'STACK'

DB256DUP(?

STACKENDS

CODESEGMENT

ASSUMESS:

STACK,CS:

CODE

ASSUMEDS:

DATA

ORG100H

BEGIN:

MOVBX,DATA

MOVDS,BX

LEASI,BLOCK

MOVCX,COUNT

DECCX

MOVAX,[SI]

CHKMAX:

ADDSI,2

CMP[SI],AX

JGENEXT

MOVAX,[SI]

DECCX

NEXT:

LOOPCHKMAX

MOVMAX,AX

MOVAH,4CH

INT21H

CODEENDS

ENDBEGIN

实验结果如下:

(注:

在教室没有做完,回来用自己电脑做的,所以段基值不一样)

 

五、实验习题与思考

1.在装入被调试程序后,如何知道分配给该用户程序的数据段在内存中的位置?

答:

在DEBUG环境中用R命令进行检验。

2.数据区以什么形式存放用符号数的?

答:

以补码形式存放有符号数。

3.修改前、后程序在执行时有何区别(提示:

观察数据指针的变化)

答:

修改前SI递增(顺序比较),修改后SI递减(倒叙比较)。

4.程序执行完毕,结果存放在何处?

答:

内存MAX中。

5.总结一下CS,IP,SS,DS,ES被设置的区别?

答:

CS,DS,SS,ES都用ASSUME伪指令来设置,IP通过ORG伪指令来设置。

6.观察伪指令PARA和ORG的作用。

答:

PARA用来说明本段的段的起始地址能被16整除,即DS:

0000下一行是DS:

0010。

ORG用来指定当前位置的偏移地址。

 

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

当前位置:首页 > IT计算机

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

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