汇编实验指导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)平方表