合肥师范学院计算机科学与技术系汇编语言实验报告

2019-02-15 11:25

实验一 汇编语言的源程序的输入

一 实验目的

1.初步了解汇编语言源程序的书写格式和要求。

2.学会使用EDIT、MASM、LINK、DEBUG等软件工具。

3.熟练掌握在计算机上编辑、汇编、连接及运行汇编语言程序的方法。 二 实验环境 微型计算机一台

DOS或WINDOWS操作系统,MASM开发套件。 三 实验要求

为运行汇编语言程序至少要在磁盘上建立以下文件:

(1)编辑程序,如EDIT.EXE,用来编辑汇编源程序

(2)汇编程序,如MASM.EXE,将汇编源程序汇编生成目标代码文件。

(3)连接程序,如LINK.EXE,连接目标代码程序和库函数代码生成可执行程序文件。 (4)调试程序,如DEBUG.EXE。 四 实验内容

上机编辑、汇编、连接、运行下列汇编源程序: assume cs:code code segment

s1: db 'Good,better,best,','$' s2: db 'Never let it rest,','$' s3: db 'Till good is better,','$'

s4: db 'And better,best.','$'

s: dw offset s1,offset s2,offset s3,offset s4 row: db 2,4,6,8 start: mov ax,cs mov ds,ax

mov bx,offset s mov si,offset row mov cx,4 ok: mov bh,0 mov dh,[si] mov dl,0 mov ah,2 int 10h mov dx,[bx] mov ah,9 int 21h add bx,2 inc si loop ok

mov ax,4c00h int 21h

code ends end start

五 实验步骤

一、将edit、masm、link等程序拷贝在C盘根目录下

鼠标左键单击开,运行,键入command命令,进入DOS方式。 二、汇编语言源程序的建立

程序要求是:在屏幕上显示四句英文诗。设定源程序的文件名为aaa.asm。 在DOS状态下键入以下命令:C:\\ > EDIT

进入EDIT后,用File主菜单下的“new”新建文件输入源程序,用File主菜单下的“save”保存文件为才C:\\aaa.asm。然后通过选择File菜单下的Exit项退出EDIT编辑环境。 三、将源程序文件汇编成目标程序文件 C:\\> MASM aaa.asm MASM宏汇编程序的主要功能有以下3点:

(1)检查源程序中存在的语法错误,并给出错误信息。 (2)若源程序经汇编后没有语法错误,则产生扩展名为aaa.obj的目标程序文件。 (3)若源程序中使用了宏指令,则汇编程序将展开宏指令。 四、用连接程序生成可执行程序文件

经汇编以后产生的目标程序文件(aaa.obj文件)并不是可执行程序文件,必须经过连接以后,才能成为可执行文件(即扩展名为aaa.exe)。 C:\\ >LINK aaa.obj

LINK在最后一行会给出 “LINK : warning L4021: no stack segment”的警告信息。该信息不影响可执行程序的生成和正常运行,程序运行时会自动使用系统提供的默认堆栈。 五、程序的执行

当我们建立了正确的可执行文件以后,就可以直接在DOS状态下执行该程序。 C:\\> aaa.exe

在屏幕的2、4、6、8行依次显示:

dGood,better,best, Never let it rest, Till good is better, And better,best.

实验二 DEBUG的使用及程序调试方法

一 实验目的

掌握DEBUG下的主要命令及在DEBUG下编写简单程序、调试程序的方法。 二 实验环境 微型计算机一台

DOS或WINDOWS操作系统,MASM开发套件。 三 实验原理

DEBUG是专门为汇编语言设计的调试工具软件,它通过单步、设置断点等方式,为使用者提供了非常有效的调试手段。在DEBUG下所有输入的数据都是十六进制,所以不需要后面加H。并且不区分大、小写字母。 四 实验内容

一、熟悉DEBUG常用命令的功能和用法。 R命令:显示修改寄存器内容 Q命令:退出debug调试程序 D命令:显示内存单元的内容

E命令:修改内存单元内容

U命令:将内存中的机器指令翻译成汇编指令 T命令:以单步方式执行程序

A命令:以汇编指令的形式在内存中写入机器指令 G命令:运行可执行程序

二、利用DEBUG调试简单的汇编语言程序。

①下列程序段执行完后,BX寄存器的内容是什么? MOV MOV

CL, 3 BX, 0B7H

ROL BX,1 ROR BX, CL

②下列程序段中的每条指令执行完后,AX寄存器及CF、SF、ZF和OF的内容是什么? MOV AX, 0 DEC AX

ADD AX, 7FFFH ADD AX, 2 NOT AX

SUB AX, 0FFFFH ADD AX, 8000H SUB AX, 1 AND AX, 58D1H SHL AX, 1 SAR AX, 1 NEG AX ROR AX, 1

③编程练习:将10000H~1000FH这段空间设置为栈,其中将SP设置为0010H且使栈空间为空。设置AX=001AH,BX=001BH。利用栈,交换AX和BX中的数据。 五 实验步骤

一、将edit、masm、link等程序拷贝在C盘根目录下;

鼠标左键单击开,运行,键入command命令,进入DOS方式。 二、在DOS状态下键入以下命令:C:\\ >DEBUG

进入DEBUG后,在光标提示处输入R命令查看各寄存器内容。 使用R REG命令,如R AX修改各寄存器内容。

使用RF命令,查看和修改FLAGS标志寄存器中各个标志位的状态。 使用D SA:EA命令查看内存中从SA:EA开始80H个单元的内容。

使用E SA:EA 数据 数据 数据??命令向内存中从SA:EA处开始写入数据

使用A命令,输入汇编指令:mov dx,efefh,使用T命令单步执行该指令并查看dx。 使用U SA:EA命令对指定内存单元中的内容进行反汇编。 使用Q命令退出debug程序。

三、在DOS状态下键入以下命令:C:\\ >DEBUG

使用A命令,依次输入: MOV CL, 3 MOV BX, 00B7 ROL BX,1 ROR BX, CL

使用T命令单步执行或使用G命令(注意设置断点),运行结果(BX)=___________ 四、在DOS状态下键入以下命令:C:\\ >DEBUG

使用A命令,依次输入:

MOV AX, 0 (AX)=_____CF=_____SF=_____ZF=_____OF=_____ DEC AX (AX)=_____CF=_____SF=_____ZF=_____OF=_____

ADD AX, 7FFF (AX)=_____CF=_____SF=_____ZF=_____OF=_____ ADD AX, 2 (AX)=_____CF=_____SF=_____ZF=_____OF=_____ NOT AX (AX)=_____CF=_____SF=_____ZF=_____OF=_____ SUB AX, FFFF (AX)=_____CF=_____SF=_____ZF=_____OF=_____ ADD AX, 8000 (AX)=_____CF=_____SF=_____ZF=_____OF=_____ SUB AX, 1 (AX)=_____CF=_____SF=_____ZF=_____OF=_____ AND AX, 58D1 (AX)=_____CF=_____SF=_____ZF=_____OF=_____ SHL AX, 1 (AX)=_____CF=_____SF=_____ZF=_____OF=_____ SAR AX, 1 (AX)=_____CF=_____SF=_____ZF=_____OF=_____ NEG AX (AX)=_____CF=_____SF=_____ZF=_____OF=_____ ROR AX, 1 (AX)=_____CF=_____SF=_____ZF=_____OF=_____

五、在DOS状态下键入以下命令:C:\\ >DEBUG

使用R SS命令使(SS)=1000H,使用R SP命令使(SP)=0010H

使用E 1000:0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00命令使堆栈区为空。 使用R AX命令使(AX)=001AH,R BX命令使(BX)=001BH 使用A命令,依次输入:push ax push bx pop ax

pop bx

使用T命令单步执行,观察指令执行时堆栈区的变化情况。

实验三 简单程序的编写与调试

一 实验目的

1.进一步熟悉DEBUG命令;

2.熟悉汇编指令的功能及应用;

3.掌握简单的汇编语言程序编写与调试。 二 实验环境

微型计算机一台

DOS或WINDOWS操作系统,MASM开发套件。 三 实验要求

1.熟练掌握常用DEBUG命令;

2.熟练掌握数据传送指令、比较指令、转移指令和循环指令并能够进行简单程序设计; 3.用DEBUG的有关命令调试简单程序。

四 实验内容

1、比较AX、BX、CX中带符号数的大小,将最大的数放在AX中。试编写此程序段。

2、已知存储器中有一个首地址为ARRAY的8个字的数组,现要求数组中的每个数加1(不考虑溢出),试编写完成此功能的程序段。

3、将存储器中从DS:1000H单元开始的10个字节的数据累加求和。 4、使用DEBUG对上述编写的程序进行调试。

五 实验步骤

1、比较AX、BX、CX中带符号数的大小,将最大的数放在AX中。试编写此程序段。 1)程序:

cmp ax,bx jge next0 xchg ax,bx next0: cmp ax,cx jge next1 xchg ax,cx next1: ?

2)使用DEBUG调试:

使用r reg命令在ax、bx、cx中预置三个大小不同的数。

使用a命令输入汇编源程序,注意在符号地址输入时,应输入其对应的数值地址。 使用t命令单步执行,再使用r命令可观察到程序全部执行后,ax中内容为最大数。

2、已知存储器中有一个首地址为ARRAY的8个字的数组,现要求数组中的每个数加1(不考虑溢出),试编写完成此功能的程序段。 1)程序:

mov cx,8

lea bx,array

rotate: inc word ptr [bx] add bx,2 loop rotate 2)使用DEBUG调试:

使用e命令从某一内存单元开始预置一个8个字的数组。

使用a命令输入汇编源程序,注意在符号地址输入时,应输入其对应的数值地址。 使用t命令单步执行,再使用d命令可观察到程序全部执行后,数组中的每一个元素加1。 3、将存储器中从DS:1000H单元开始的10个字节的数据累加求和。 1)程序:

mov bx,1000 mov cx,10 sub ax,ax

lop: add al,byte ptr [bx] adc ah,0 inc bx

loop lop


合肥师范学院计算机科学与技术系汇编语言实验报告.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:构筑社会消防安全“防火墙”工程档案资料凤凰城、足玉堂、大世界

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: