汇编实验指导1

  • 格式:doc
  • 大小:258.50 KB
  • 文档页数:24

《汇编语言程序设计》实验指导书

1 《汇编语言程序设计》实验指导书

实验1 DEBUG的使用

1、实验目的

掌握DEBUG常用命令的使用;熟悉8086CPU内部有多少寄存器;掌握访问段式存储器结构地址的表示方法。

2、实验内容

将数据段中的两个数求和,结果保存在数据段中。源程序、机器语言程序如下:

CS:0100 Al 00 00MOV AX,[0000]

CS:0103 03 06 02 00ADD AX,[0002]

CS;0107 A3 04 00MOV [0004],AX

CS:010A CB RETF

数据段内容如下:

DS:0000 2301 2500;两个已知数

3、实验步骤

(1)用E命令键人上述机器语言程序和数据段的初值。

—E DS:000 2301 2500

—E DS:006 2A 2A 2A (2A为*标记,是为便于查看数据段内容而设置)

—E CS:100 A1 00 00 03 06 02 00

—E CS:107 A3 04 00 CB

(2)用D命令检查数据段、代码段内容。

—D DS:0

—D CS:100

(3)用T命令逐条执行上述程序,注意观察每条指令执行后相应寄存器的变化。

(4)用U命令反汇编本程序。

—U 100 10A

(5)用R命令修改IP的内容为0100重新执行上述程序。

—R IP

显示:IP 010A

:0100

(6)用G命令运行程序。

—G =CS:0100 107

观察:IP=AX=

—G =CS:0100 10A

观察:IP=AX=

4、实验思考题

(1)用A命令输入源程序:

CS:0100 MOV AX,FFFF

STC

0104 MOV DS,AX

MOV BX,DS

MOV ES,BX

MOV CX,ES 《汇编语言程序设计》实验指导书

2 MOV SS,CX

MOV DX,SS

MOV SP,DX

MOV BP,SP

MOV SI,BP

MOV DI,SI

JNB 012l

XOR AX,DI

JNZ 0125

CLC

JMP 0104

0121 OR AX,DI

JZ 0100

0125 HLT

(2)用T命令单步执行上述程序。观察结果,并注意标志寄存器的变化。

《汇编语言程序设计》实验指导书

3 实验2 汇编语言程序的基本操作(汇编指令及寻址方式)

1、实验目的

了解汇编语言程序的基本结构,初步掌握用汇编语言设计、编写、调试和运行程序的方法。

2、实验内容

(1)试编写—程序,比较两个字符串STRINGl和STRING2所含的字符是否相同。若相同,则显示'Match';否则,显示'No match'。

参考程序如下:

DATA SEGMENT

STRINGl DB „Move the cursor backward.‟

STRING2 DB „Move the cursor backward.‟

MESSlDB „Match.‟,13,10,„$‟

MESS2DB „NO Match!‟,13,10,„$‟

DATAENDS

PROGSEGMENT

ASSUMECS:PROG,DS:DATA,ES:DATA

START:MOVAX,DATA

MOVDS,AX

MOVES,AX

LEASI,STRINGl

LEADI,STRING2

CLD

MOVCX,25

REPZCMPSB

JZMATCH

LEADX,MESS2

JMPSHORT DISP

MATCH: LEADX,MESSl

DISP: MOVAH,09

1NT21H

MOV AH,4CH

INT 21H

PROGENDS

ENDSTART

(2)两字节的二进制数加法

要求:在存储单元A起有两字节的无符号加数,在单元B起有两个字节的无符号被加数,求其两数相加,结果存回A单元处。设二进制数低字节数在前,高字节数在后。

分析:二进制数相加,可用二进制加法指令实现。如为多字节相加,应先从低字节数开始相加,然后再进行高字节数相加。高字节数相加时还应该考虑低字节数相加时有否进位(CF=1),故应使用带进位的加法指令。

参考程序如下:

DATA SEGMENT

A DB 5CH,85H;两字节运算数 《汇编语言程序设计》实验指导书

4 B DB 43H,0ABH

DATA ENDS

CODE SEGMENT

ASSUMECS:CODE,DS:DATA

START:MOVAX,DATA

MOVDS,AX

MOVSI,0;置位移量初值

MOVAL,A[SI] ;取加数低位

ADDAL,B[SI];两数相加

MOVA[SI],AL;存回A单元

INCSI;调整位移量

MOVAL,A[SI];取加数高位

ADCAL,B[SI];带进位加

MOVA[SI],AL;存回A单元

MOVAH,4CH

INT21H

CODE ENDS

ENDSTART

本程序没有考虑把相加结果的进位存入存储单元中。如有进位,则在CF中。程序中使用SI作变址寻址,是考虑多字节加法而引入的。可以通过它调整字节地址而简化多字节的加法运算。实际上,对于只有两个字节的加法,可以不引入变址寻址,而使用直接寻址完成字节相加。如高字节的相加可表示为:

MOVAL,A+1

ADCAL,B+1

本题也可以使用字加法指令实现。两个字节为—个字,故使用—条二进制字加法指令就可以了。其程序如下:

DATASEGMENT

WADW855CH

WBDW0AB43H

WCDW?

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START: MOVAX,DATA

MOVDS,AX

MOVAX,WA;取加数

ADDAX,WB;两数相加

MOVWC,AX;存结果

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

本程序将运算结果存入字单元WC中。

上面程序表明:加法运算时,应先进行低位数相加,然后再进行高位数相加,此时要《汇编语言程序设计》实验指导书

5 考虑数间的进位问题。这在多字节运算时是必须要考虑的。

3、实验步骤

(1)调用全屏幕编辑程序EDlT建立ASM文件。

C>EDIT

输入实验内容1的源程序并以SAMPLE.ASM为文件名将文件存盘。

(2)用汇编程序MASM 对源文件SAMPLE.ASM 汇编并产生目标文件SAMPLE.OBJ。

C>MASM SAMPLE

如汇编指示有错误,则需重新调用编辑程序修改程序中的错误,直至汇编通过为止。

(3)用连接程序LINK产生执行文件SAMPLE.EXE。

C>LINK SAMPLE

(4)执行程序。

可直接从DOS状态执行程序。

C>SAMPLE

显示器上显示出程序的运行结果。

Match.

(5)依照上述四个步骤,完成对其余实验内容的操作。

4、实验思考题

对实验内容1修改两个字符串的内容,使它们互不相同,再观察程序的运行结果。 《汇编语言程序设计》实验指导书

6 实验3 顺序程序设计

1、实验目的

进—步掌握汇编语言程序的基本结构,掌握汇编语言顺序程序设计、编写、调试和运行的方法。

2、实验内容

(1)输入—个字符串STRING(长度不超过8字节)。换行后,再输入出“THE

STRINGIS;”。数据段可定义如下:

DSEG SEGMENT

MAXLEN DB 9

ACTLEN DB ?

STRING DB 9 DUP(?)

MESSGDB 0DH,0AH,„THE STRING IS:$‟

DSEG ENDS

提示:程序可采用0AH功能调用输入字符串,用09H功能调用输出字符串

(2)计算(W—(X×Y+Z—540))/X。其中X、Y、Z、W均为16位带符号数,要求上式计算结果的商存人AX寄存器中,余数存人DX寄存器。参考程序如下:

DATASEGMENT

XDW1200H

YDW0034H

ZDW0F045H

WDW034AH

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START: MOVAX,X

IMULY

MOVCX,AX

MOVBX,DX

MOVAX,Z

CWD

ADDCX,AX

ADCBX,DX

SUBCX,540

SBBBX,0

MOVAX,W

CWD

SUBAX,CX

SBBDX,BX

IDIVX

MOVAH,4CH:

INT21H

CODEENDS

ENDSTART

(3)平方表