汇编语言实验指导0404.docx

上传人:b****9 文档编号:26340982 上传时间:2023-06-17 格式:DOCX 页数:18 大小:26.61KB
下载 相关 举报
汇编语言实验指导0404.docx_第1页
第1页 / 共18页
汇编语言实验指导0404.docx_第2页
第2页 / 共18页
汇编语言实验指导0404.docx_第3页
第3页 / 共18页
汇编语言实验指导0404.docx_第4页
第4页 / 共18页
汇编语言实验指导0404.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

汇编语言实验指导0404.docx

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

汇编语言实验指导0404.docx

汇编语言实验指导0404

 

《汇编语言》

实验指导书/实验报告

 

毕津滔、王嘉鹏、朱国晗

2011年4月编制

 

专业:

班号:

学号:

姓名:

哈尔滨工业大学华德应用技术学院

计算机应用技术系

实验一DEBUG调试程序和汇编程序的上机操作

ADEBUG调试程序的使用

一、实验目的

学会在DOS环境下使用DEBUG调试程序

二、DEBUG调试程序

1.DEBUG调试程序的启动

C>DEBUG↙(回车)

屏幕显示DEBUG的提示符“—”,在此之后,可以键入任一DEBUG命令。

2.退出DEBUG

—Q↙(回车)

3.DEBUG的命令清单

(1)显示内存单元内容的命令—D

格式:

D地址显示从指定地址开始的128个字节的内容。

D范围显示指定范围的内存内容。

D从上次D命令结束位置接着显示。

例1:

从数据段偏移地址FF40H单元开始,显示40H个字节的内容。

DFF40L40↙(回车)

(2)修改内存单元内容的命令—E

格式:

E地址表用表中内容替代指定地址开始的内存块内容。

E地址显示指定地址的1个字节的内容,输入新值按空格键进

入到下一字节位置;按“—”键返回到上一字节;按回车键则结束E命令。

(3)填充命令—F

格式:

F范围表用表中内容反复赋值以填充指定范围的内存块。

(4)显示修改寄存器—R

格式:

R显示并可修改指定寄存器的内容。

R寄存器名显示并可修改标志寄存器的内容。

RF显示并可修改标志寄存器的内容。

(5)汇编命令—A

格式:

A地址从指定地址开始汇编,结果写入内存。

A若不指定地址则从上次A命令结束位置开始汇编。

首次

则从CS:

100H开始汇编。

注:

汇编语句中不能使用名字。

A命令只识别指令和DB,DW伪指令。

(6)反汇编命令—U

格式:

U[地址]从指定地址或上次U命令结束位置开始把内存16字节

(40列显示格式)或32字节(80列显示格式)内容反汇编。

U范围把指定地址范围的内存块全部进行反汇编。

(7)跟踪命令—T

格式:

T[=地址]从指定地址(缺省为当前CS:

IP地址)执行一条指令,

并显示寄存器内容,标志位的状态和下一条指令。

T[=地址]条数单步方式指定行指定条数的各条指令。

(8)执行命令—G

格式:

G=地址从指定地址开始执行直至程序结束。

G从当前CS:

IP位置开始执行,直至程序结束。

G地址断点地址从指定或当前地址开始执行,遇到断点则停止,

并显示寄存器和标志的值以及断点处指令。

(9)命名命令—N

格式:

N文件名为L命令和w命令指定要操作和文件。

N文件参数为要执行的文件指定参数。

例:

Nfile1.exe

L

Nfile2.datfile3.dat

G

上述第一个N命令为随后的L命令指定文件名,L命令将文件file1.exe装入内存,第二个命令为执行file.exe文件指定参数,最后G命令运行file1.exe文件。

(10)装入命令—L

格式:

L[地址]

把N命令给出的盘文件装入到以指定地址或CS:

100H开始的内存区中。

L地址盘号起始扇区扇数

把指定磁盘(盘号0—A驱,盘号1—B驱)的指定数目的逻辑扇区装入到指定地区开始的内存区。

例2:

L04BA:

010020F6D

该L命令是把C盘(盘号2)从第15(即0F)逻辑扇区开始的,6DH个逻辑扇区内容,装入到内存中以04BA:

0100H开始区域。

(11)写命令—W

格式:

W地址盘号其始扇区扇数

把指定地址开始的内存块写入指定磁盘的几个逻辑扇区中,长度由扇区容量,扇数确定。

W地址

把指定地址(缺省为CS:

100H)开始内存快(块字节长度由BX:

CX寄存器给出)写入磁盘。

注:

W命令不允许写具有EXE和HEX展名文件。

例3:

把从CS:

100开始的连续3040H个字节的内存块写入到文件MYFILE中,在DEBUG启动后,连续进行如下操作:

①—RCX(回车)

显示CX当前值

键入:

3040(回车)(将3040送入CX)

②—RBX(回车)

显示BX当前值

键入:

:

0000(回车)(将0000H送入BX)

③—NMYFILE(回车)(给待写文件命令)

④—W(回车)

(12)比较指令—C

格式:

C范围地址

比较两个内存块的内容,范围用第一个起始地址和块长或起始地址、结束地址说明,地址是第二块的起始地址。

(13)16进制运算指令—H

格式:

H值1值2求值l,值2的和与差(全为16进制数)。

(14)写端口命—O

格式:

O端口地址字节把一个字节数据由指定的端口输出。

(15)读端口命令—I

格式:

I端口地址从指定端口输入一个字节并显示。

(16)传送命令—M

格式:

M范围地址把指定范围的内容传送到指定的地址开始的内存块中。

(17)检索命令—S

格式:

S范围字符串在指定范围内检索某个字符串。

(18)退出命令一Q

格式:

Q结束DEBUG的运行,不保存内存中的被调试文件(若要保存,先用W

指令),返回DOS。

4.使用DEBUG命令的注意事项

(1)DEBUG命令只采用16进制数;故不要加“H”后缀。

(2)标志寄存器的8个标志位的值采用符号标志;分别表示标志的值1和0。

溢出标志OF:

OV(溢出),NV(不溢出)

方向标志DF:

DN(减量),UP(增量)

中断允许标志IF:

EI(允许),DI(禁止)

符号标志SF:

NG(负),PL(正)

零标志ZF:

ZR(零),NZ(非零)

进位标志CF:

CY(有),NC(无)

奇偶标志PF:

PE(偶),PO(奇)

辅助进位标志AF:

AC(有),NA(无)

(3)在“—”提示符下键入命令关键字符,若命令带有参数则应在关键字符后紧跟着输入第一个参数,不要随意加空格符,因为空格符是参数之间的间隔符。

(4)命令结尾应按回车键,此命令才生效,除e命令外,一个命令执行完重新给出“—”DEBUG提示符。

使用A命令时,每输入一条指令就按一次回车键,屏幕立即显示下一个地址,若要结束A命令,则不要输入指令只按回车键。

(5)令中的地址参数以段:

偏移量给出,若只给出偏移量,则使用的缺省段A,U,G,T,L,W诸命令的缺省段是CS,C,D,E,F,M,S诸命令的缺省段是DS。

(6)使用W写命令之前要记住检查或修改BX,CX积存器的值使其等于或大于欲写入文件的字节长度值。

(7)DEBUG承认Ctrl+Break(中止)、Ctrl+Nomlock(暂停显示)等DOS控制键功能。

三、实验内容

1.数据传送指令(MOV)

例1.已知ALPHA=1234H

DS=2000HAX=2600H

SI=0020H

BX=1020H

ARRAY=1000H

①MOVALPHA,AX

②MOVARRAY[BX][SZ],AL

③MOVDX,AX

HLT

第一条指令执行后(21234H)=00H(21235)=26H

第二条指令执行后(22274H)=00H

第三条指令执行后DX=2600HAX=2600H

例2.内存中首地址MEM1的2个字节数传送到首地址为MEM2的区域中

已知DS=2000H

MEM1=1000H

(21000H)=04H

(21001H)=05H

MEM2=1050H

(21050H)=?

(21051H)=?

MOVAL,MEM1

MOVMEM2,AL

MOVAL,MEM1+1,AL

MOVMEM2+1,AL

HLT

同学利用课堂讲过的传送指令和各种寻址方式编写程序

例3.地址传送指令与数据传送指令区别

LEABX,7865H;地址7865H→BX

MOVCL,7865H;(7865)→CL

HLT;(7865)=31H

例4.寄存器间接寻址和寄存器寻址区别

MOVAX,BX;BX中操作数→AX中←1234

MOVAL,[BX];在数据段中将BX指示地址内容→AX

HLT;设BX=1234(1234H)=7878H→AL

2.算术逻辑指令

例1MOVBL,5

MOVCL,4

ADDBL,CL

MOVAL,BL

HLT

例2.如AX=0012H,BX=0034H,要求把它们装配在一起形成AX=1234H。

MOVAX,0012H

MOVBX,0034H

MOVCX,08H

ROLAX,CL

ADDAX,BX

利用课堂上讲过的算术逻辑指令自己编程序

注:

进入DEBUG,使用A命令将程序写入内存,使用G命令执行,再用U命令返汇编,用D命令显示程序存储区,用R命令显示各寄存器的内容,并用T命令单步执行各条指令,最后用Q命令退出DEBUG。

B.汇编语言程序上机操作

一.实验目的

1.学会汇编语言程序上机操作,包括汇编语言程序的编辑、汇编、链接、调试和运行;

2.学会常用的伪指令使用,掌握汇编语言的分段结构。

二.汇编语言程序的上机过程。

1.使用EDIT.EXE编辑软件编辑汇编语言文本,得到扩展名为ASM的汇编语言程序的源文件

2.使用MASM.EXE汇编程序,对汇编语言源程序进行汇编,得到扩展名为.OBJ的目标码文件

3.使用LINK.EXE链接程序,对目标码文件进行链接,得到扩展名为EXE的地址浮动的可执行文件

4.使用DEBUG命令加载汇编语言程序(EXE)到内存,然后在DEBUG环境下调试汇编语言程序

5.在DOS环境下,键入汇编语言程序名,程序加载到内存,并被执行。

三.实验内容

1.用EDIT命令建立汇编语言源程序文件(ASM)

例:

把40个字母a的字符串从源缓冲区传送到目的缓冲区

C:

\MASM>EDITEX-MOVS.ASM(回车)

在进入全屏幕编辑环境后,逐条键入源程序的各条指令

DATASEGMENT

SOURE_BUFFERDB40DUP(‘a’)

DATAENDS

EXTRASEGMENT

DEST_BUFFERDB40DUP(?

EXTRAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,ES:

EXRRA

MAINPROCFAR

START:

PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVAX,EXTRA

MOVES,AX

LEASI,SOURE_BUFFER

LEADI,DEST_BUFFER

CLD

MOVCX,40

REPMOVSB

RET

MAINENDP

CODEENDS

ENDSTART

最后按下F3键,E键,将EX-MOVS.ASM文件存盘,并退出,如果按下F3键后,再按Q键,则不存盘退出。

2.用宏汇编命令MASM产生目标文件(OBJ)

C\MASM>MASMEX-MOVS.ASM↙(回车)

在MASM宏汇编程序被调入内存并显示版本信息之后,MASM对输入,输出的文件依次提出4个问题,以汇编EX-MOVS.ASM文件为例,回答如下:

SOURCEFILENAME[EX-MOVS.ASM]:

↙(回车)

OBJECTFILENAME[EX-MOVS.ASM]:

↙(回车)

SOURCELISTING[NUL.LST]:

↙(回车)

CROSSREFERENCE[NUL.CRF]:

↙(回车)

第一个提示询问被汇编源文件名,如果在宏调用时就写出文件名,此时回车就可(没有写入文件名,键入文件名后回车),又出现第二个提示,询问目标文件名,若同意括号中的缺省文件名,按回车键即可,否则键入新的文件名后再回车。

第三个提示询问是否建立列表文件,直接回车表示不要:

若要,则在键入列表文件之后再回车,最后询问是否要建立交叉索引文件,回答与对第三个提示的回答类似。

四个问题回答完毕,MASM立即开始汇编工作。

汇编过程结束时,如屏幕提示有错,应重新使用EDIT命令,根据提示错误的行号从前至后修改,存盘退出,再次进入宏汇编,上述过程可能需反复多次,直至汇编通过。

3.用LINK命令产生可执行文件(EXE)

汇编后建立的目标码文件必须经过链接才能成为一个可执行文件

C\MASM>LINKEX-MOVS↙(回车)

启动LINK程序后,也依次提出4个问题以链接EX-MOVS.OBJ文件为例,回答如下:

OBJECTMODULES[EX-MOVS.BOJ]:

↙(回车)

RUNFILE[EX-MOVS.EXE]:

↙(回车)

LISTFILE[NULMAP]:

↙(回车)

LIBRARIES[.LIB]:

↙(回车)

首先询问被链接的各目标码文件名(其扩展名为OBJ)。

当键入不止一个文件时,中间应以加号相连,最后按回车键,第二个询问时问你是否建立运行文件,若同意括号中的缺省文件名,按回车键印可。

第三个询问是否建立连接映像文件,其扩展名为[MAP]。

它给出每个段在存储器的分配情况。

最后一个询问是要你输入欲键入的库文件名,也可能是多个,若无库文件,直接回车即可。

4个问题回答完,LINK程序立即开始工作。

LINK链接程序运行后,最后形成一个代码类、数据类、堆栈类大模块,称之为装入模块。

他是可浮动的,具有可重定位性,每当运行时,装入模块在内存中的实际有效位置要由DOS根据当时的运行环境、内存分配来定。

4.程序执行

EX-MOVS.EXE文件是一个可执行文件,在DOS环境下只需键入该文件名即可把该文件装入内存并执行之。

C\MASM>EX-MOVS(回车)

5.在DEBUG环境下运行程序

[EXE]件也可以在DEBUG下加载。

例如

C\MASM>DEBUGEX-MOVS.EXE↙(回车)

这样,我们就可以使用DEBUG命令来控制程序的运行。

一般来说,对于我们自己设计的程序,在DEBUG下加载,然后用DEBUG命令控制程序的运行。

便于发现程序的错误,加以修改源程序,重新汇编,链接,然后再运行。

如此反复多次,最终就可完成程序的调试。

在实验中,在DEBUG下加载EX-MOVS.EXE后,做下述工作:

C\MASN>DEBUGEX-MOVS.EXE↙(回车)

1.使用U命令

—U

18F4:

0000lEDUSHDS

000l2BC0SUBAX,AX

000350PUSHAX

0004B8F618MOVAX,18F6

00078ED8MOVDS,AX

0009B8F918MOVAX,18F9

000C8EC0MOVES,AX

000E8D360000LEASI[0000]

00128D3EOO00LEADI[0000]

0016FCCLD

00l7F92800MOVCX,0028

代码段段地址偏移地址机器代码汇编

18F400lAF3REPZ

00lBA4MOVSB

00lCCBPETF

断点,程序执行到此就结束

根据反汇编清单中,得到CS:

18F4

DS:

18F6

ES:

18F9

断点:

00le

2.使用D命令

—D18F6:

0↙

61......61......61......61

61......61......61......61

61......61——共有40个‘a’

注:

因为(DS)=18F6,所以上条指令是查看DS段的内容。

一D18F9:

0↙无40个‘a’

注:

因为(ES)=18F9,所以上条指令是查看ES段的内容。

使用D命令观察数据段内容有40个‘a’,观察附加段内容无40个‘a’

3.使用G命令

—G1C↙

因为IC偏移量是程序搬运结果的位置,所以运行程序完成40个‘a’搬运到附加段中,此时附加段有40个‘a’,同时数据段40个‘a’也存在。

4.程序运行之后再看内存变化

—D18F6:

0↙61......61......61,61......61

61......61......61,61......61

61......61

—D18F9:

0↙61......61......61,61......61

61......61......61,61......61

61......61

5.退出Q命令

—Q退出DEBUG

四、自己设计一个简单程序,上机调试。

实验二分支程序设计和DOS调用

一、实验目的

掌握汇编语言中分支程序的设计方法和DOS调用

二、实验内容

1、设变量X为带符号整数,要求:

1)如果X的值大于零,变量Y赋值为l。

2)如果X的值等于零,变量Y赋值为0。

3)如果X的值小于零,变量Y赋值为-1。

DATASEGMENT

XDB2

YDB?

DATAENDS

CODESEGMENT

ASSCMECS:

CODEDS:

DATA

START:

PUSHDS

MOVAX,0

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVAL,X

CMPAL,0

JGEBIR

MOVAL,0FFH

JMPEQLL

BIR:

JZEQLL

MOVAL,1

EQLL:

MOVY,AL

CODEENDS

ENDSTART

2、在DEBUG下加载文件名.EXE后做下述工作

注:

完成下面的工作需要手动修改源文件中X的初始值,以满足不同条件

1)使用U命令,根据反汇编的程序清单找到DS的段地址

2)使用D命令,观察到数据段中X单元和Y单元的值

3)使用G命令运行程序

4)使用D命令,观察到数据段中X单元和Y单元的值;反复使用2),3),4)步进行观察。

三、程序清单

1、按照上述实验过程同学自己设计程序。

要求画出流程图,写出程序清单,调试步骤及结果。

1)比较两个无符号数的大小(量个数放在内存S3的连续两个单元中),将大数存入MAX单元中。

2)试编一程序,求三个带符号数据中的最大值,并将最大值存入MAX单元中,设三个带符号数分别在三个变量X,Y,Z中存储。

3)根据MODE单元中编号0-7分别转向L0-L7标号处,执行L0-L7处分别完成显示‘0-7’字符,即当MODE=0时,转向L0标号,完成显示‘0’,当MODE=7时,转向L7标号,完成显示‘7’。

4)根据输入值(0-4)的不同,执行不同的操作,用转移标法编写程序。

实验三循环程序设计和DOS调用

一实验目的

熟悉循环程序的设计方法

二实验内容

在以BUF为首地址的字节单元中存放CNT个无符号数,找出其中最大数,送入MAX字节单元中:

1)特以BUF为首地址的数据区中存有八个无符号数,分别为l、2、3、100、23、78、90、134。

2)数据个数求法:

数据末地址减去首地址,用符号CNT表示,即CNT=末地址-首地址。

3)放最大数单元用MAX符号地址表示。

4)使用U命令,得到反汇编清单,找到DS段地址。

5)使用D命令,观察数据内容。

6)使用G命令,运行程序。

7)使用D命令,看数据段数据变化。

8)程序运行结果把最大数送入MAX单元。

三、程序清单

DATASEGEMENT

BUFDB1,2,3,100,23,78,90,134

CNTEQU$—BUF

MAXDB?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVCX,CNT-1

MOVBX,OFFSETBUF

MOVAL,[BX]

LOOP1:

INCBX

CMPAL,[BX]

JAENEXT

MOVAL,[BX]

NEXT:

DECCX

JNZLOOPl

MOVMAX,AL

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

四、程序设计(画出流程图、写出程序清单及调试步骤和结果)

1.统计数据块中正数和负数个数(设有7个数,分别为-32,25,36,-18,-64,0,-3)

2.统计学生成绩,设有10个学生的成绩分别为56,69,84,82,73,88,89,63,100和80分,试编写程序分别统计低于60分,60-69分,70-79分,80-89分,90-99分以及100分的人数,并存放到S5,S6,S7,S8,S9以及S10单元中。

3.在字符串中查找空格字符(ASCII码位20H),找到显示Y,否则显示N。

4.根据键盘输入值N,计算前N项和(N<=10)

分析:

这是循环程序,键盘输入值位循环次数,如果输入值是0,则不循环;否则如果输入的是5,则AL=1+2+3+4+5=15,执行5次循环。

 

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

当前位置:首页 > 小学教育 > 小学作文

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

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