汇编实验大纲.docx
- 文档编号:5410573
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:18
- 大小:83.40KB
汇编实验大纲.docx
《汇编实验大纲.docx》由会员分享,可在线阅读,更多相关《汇编实验大纲.docx(18页珍藏版)》请在冰豆网上搜索。
汇编实验大纲
目录
实验1.1汇编语言程序的调试与运行2
实验1.2分支程序设计
(一)4
实验1.3分支程序设计
(二)6
实验1.4循环程序设计
(一)7
实验1.5循环程序设计
(二)10
实验1.6子程序结构11
附录:
用DEBUG调试程序13
实验1.1汇编语言程序的调试与运行
一.实验目的
1.学习数据传送和算术运算指令的用法
2.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。
二.实验内容
试编写一程序计算以下表达式的值。
w=(v-(x*y+z-2))/x
式中x、y、z、v均为有符号字数据。
设x、y、z、v的值存放在字变量X、Y、Z、V中,结果存放在双字变量W之中,
三.程序框图
图1.1算术表达式计算程序流程图
四.程序清单(带显示功能,但仅显示商)
DATASEGMENT
XDW2
YDW2
ZDW3
VDW10
WDW2DUP(?
)
DATAENDS
STACKSEGMENTSTACKPARASTACK'STACK'
DB200DUP(0)
BUFFERDB10DUP(?
)
STACKENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE,SS:
STACK
START:
MOVAX,SEGDATA
MOVDS,AX;DATA→AX
LEASI,BUFFER
MOVAX,X
IMULY;(x)*(y)→DX:
AX
MOVCX,AX
MOVBX,DX;(DX:
AX)→(BX:
CX)
MOVAX,Z
CWD;(Z)符号扩展
ADDCX,AX
ADCBX,DX;(BX:
CX)+(DX:
AX)→(BX:
CX)
SUBCX,2
SBBBX,0;(BX:
CX)-2→(BX:
CX)
MOVAX,V
CWD;(V)符号扩展
SUBAX,CX
SBBDX,BX;(DX:
AX)-(BX:
CX)→(DX:
X)
IDIVX;(DX:
AX)/X
MOVDL,AL
PUSHCX
MOVCL,4
SHRAL,CL
ORAL,30H
MOV[SI],AL
INCSI
MOVAL,DL
ANDAL,0FH
ORAL,30H
MOV[SI],AL
INCSI
MOVAL,'$'
MOV[SI],AL
MOVDX,OFFSETBUFFER
MOVAH,09H
INT21H
MOVAH,4CH
INT21H
CODEENDS;退出DOS状态
ENDSTART
五.调试步骤
1.编辑源程序,建立一个以后缀为.ASM的文件.
2.汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。
无错时继续第3步。
3.连接目标程序,产生可执行程序。
4.DEBUG调试可执行程序(使用–t,-p,-d,-q)。
在操作系统状态下,运行程序,并记录屏幕显示内容。
六.思考题
1.将上述程序改为既显示商又显示余数的程序。
2.画出带有显示结果功能的程序流程图
3.简单叙述上机步骤,调试方法。
实验1.2分支程序设计
(一)
一.实验目的
1.掌握分支结构程序的编制方法。
2.利用测试与转移指令实现分支
二.实验内容与要求
已知在内存中有一个字节单元X,存有带符号数据,要求计算出它的绝对值后,放入RESULT单元中。
请在程序中使用TEST指令来实现不同条件下的转移。
三.程序框图
图1.2求绝对值程序流程图
四.程序清单:
;计算绝对值
DATASEGMENT
XDB-15
RESULTDB?
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX;初始化
MOVAL,X;X取到AL中
TESTAL,80H;测试AL正负
JZNEXT;为正,转NEXT
NEGAL;否则AL求补
NEXT:
MOVRESULT,AL;送结果
MOVAH,4CH
INT21H;返回DOS
CODEENDS
ENDSTART;汇编结束
五.思考题
考虑能否用CMP指令实现上述的功能,如可能,请实现之
实验1.3分支程序设计
(二)
一.实验目的
1.掌握多分支结构程序的编制方法。
2.利用比较与转移指令实现分支。
二、实验内容与要求
编写计算下面函数值的程序:
1X>0
Y=0X=0
-1X<0
设输入数据为X、输出数据Y,且皆为字节变量。
三、程序流程图:
四.程序清单
DATASEGMENT
XDB-5
YDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX;初始化
MOVAL,X;X取到AL中
CMPAL,0;Al中内容和0比较
JGEBIG;大于等于0,转BIG
MOVBL,-1;否则为负数,-1送BL
JMPEXIT;转到结束位置
BIG:
JEEE;Al中内容是否为0,为0转EE
MOVBL,1;否则为大于0,1送BL
JMPEXIT;转到结束位置
EE:
MOVBL,0;0送BL
EXIT:
MOVY,BL;BL中内容送Y单元
MOVAH,4CH
INT21H;程序结束
CODEENDS
ENDSTART;汇编结束
五.思考题
考虑除了用多条条件转移指令实现多分支转移功能之外,能否有其他方法实现相同的功能?
实验1.4循环程序设计
(一)
一.实验目的
1.掌握循环程序设计的方法(两重性循环结构)
2.掌握正确分配与使用寄存器。
二.实验内容与要求
在一串给定个数的数中寻找最小值,并且放置至指定的存储单元。
每个数用16位表示
要求:
1.请大家自己建立存储一串数值的BUFFER变量。
并将最大值放入MAX存储单元中。
2.考虑在程序中将要使用哪些寄存器,及其相关功能。
3.考虑计数器的建立方法
三.程序框图
图1.3求最大值的程序框图
四.程序清单
DATASEGMENT
BUFFERDW1,2,3,5
COUNTEQU$-BUFFER
MAXDW?
DATAENDS
STACKSEGMENTPARASTACK'STACK'
DB64DUP(?
)
TOPEQU$-STACK
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
STARTPROCFAR
BEGIN:
PUSHDS
MOVAX,0
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVAX,SEGSTACK
MOVSS,AX
MOVAX,TOP
MOVSP,AX
MOVCX,COUNT
LEABX,BUFFER
MOVAX,[BX]
INCBX
DECCX
AGAIN:
CMPAX,[BX]
JGENEXT
MOVAX,[BX]
NEXT:
INCBX
LOOPAGAIN
RET
STARTENDP
CODEENDS
ENDBEGIN
五.思考题
指出控制循环程序的方法,并划分该程序的四个组成部分
实验1.5循环程序设计
(二)
一.实验目的
1.掌握循环程序结构的编程方法。
2.掌握控制循环的方法。
二.实验内容与要求
内容:
一编写程序完成求1+2+3+……N的累加和,直到累加和超过1000为止。
统计被累加的自然数的个数送CN单元,累加和送SUM。
三.实验步骤
1.自编程序,上机调试,完成上述功能。
2.指出程序中的四个组成部分,结构形式及控制循环的方法。
四.程序框图:
四.源程序:
DATASEGMENT
SUMDW?
CNDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX;初始化
MOVAX,0;0送AX
MOVBX,0;0送BX
LP:
INCBX;BX加1
ADDAX,BX;求累加和
CMPAX,1000;比较
JBELP;≤1000转
MOVSUM,AX
MOVCN,BX;送结果
MOVAH,4CH
INT21H;返回DOS
CODEENDS
ENDSTART;汇编结束
五.思考题(附加题)
在以BUF为首址的字存储区中存放有N个有符号数,现需将它们按大到小的顺序排列在BUF存储区中,试编写其程序。
实验1.6子程序结构
一.实验目的
1.掌握程序设计方法,合理划分层次
2.掌握子程序的调用与返回的方法
二.实验内容与要求
编制一程序,将一个给定的二进制数按位转换成相应的ASCII码字符串,送到指定的存储单元并显示。
如二进制数10010011转换成字符串为‘10010011’。
要求将转换过程写成子程序,且子程序应具有较好的通用性,而必须能实现对8位和16位二进制数的转换。
三.部分程序清单
DATASEGMENT
NUM8DB93H
NUM16DW0ABCDH
ASCBUFDB20DUP(0)
DATAENDS
STACKSEGMENTPARASTACK'STACK'
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVDX,0
MOVDL,NUM8;转换二进制数送DX
MOVCX,8;置位数8
LEADI,ASCBUF;字符串首址→DI
CALLBTASC;调用子程序BTASC
MOV[DI],BYTEPTR0DH
MOV[DI+1],BYTEPTR0AH
MOV[DI+2],BYTEPTR'$'
LEADX,ASCBUF
MOVAH,09H
INT21H
MOVDX,NUM16
MOVCX,16;置位数16
LEADI,ASCBUF
CALLBTASC
MOV[DI],BYTEPTR0DH
MOV[DI+1],BYTEPTR0AH
MOV[DI+2],BYTEPTR'$'
LEADX,ASCBUF
MOVAH,09H
INT21H
MOVAH,4CH
INT21H
BTASCPROC
PUSHAX;保存AX
MOVAL,0
CMPCX,8;比较8位数
JNEL1;直接转换16位数
MOVDH,DL;8位数转换送DH
L1:
ROLDX,1;DX最高位移入CF
RCLAL,1;CF移入AL最低位
ADDAL,30H
MOV[DI],AL
INCDI
MOVAL,0
LOOPL1
POPAX
RET
BTASCENDP
CODEENDS
ENDSTART
四.思考题
请画出此程序的程序框图
附录:
用DEBUG调试程序
一、实验目的
学习利用DEBUG调试程序的基本思想及方法
二、实验环境:
1.硬件:
PC微机
2.软件:
DOS系统、EDIT.EXE、MASM.EXE、LINK.EXE、DEBUG.EXE
三、实验内容
利用DEBUG调试程序,可以将一个可执行程序(如.EXE、.COM等)装入内存中,并接管对程序运行的控制权,通过采取如反汇编、断点运行、单步执行、寄存器内容修改等方法,对可执行程序进行跟踪、调试,以找出其中的设计错误,然后再对源程序进行相应修改,重新生成正确的可执行程序。
1.准备被调试程序:
假定所有有关文件均在当前路径C:
\MYTEST>下,按照实验一的步骤生成一个被调试的可执行程序(如TEST.EXE),参考程序如下:
DATASEGMENT
STRDB‘Hello,World!
$’
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETSTR
MOVAH,09H
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2.进入DEBUG环境:
(其中斜体部分由键盘输入。
)
C:
\MYTEST>DEBUGTEST.EXE↘
-
其中,短线‘-’作为DEBUG环境的操作提示符,在此提示符下,可以输入各种DEBUG命令,对可执行程序TEST.EXE进行跟踪调试。
3.主要调试命令:
1)反汇编命令U:
将存储器中的二进制数据翻译成较有意义的助记符形式,以帮助理解。
一般常用以下格式:
a)-U↘:
从当前IP处开始,对连续约32字节内容反汇编。
如对TEST.EXE,刚装入DEBUG时的IP=0000,则在输入U命令后有如下显示:
-U↘
12B7:
0000B8B612MOVAX,12B6
12B7:
00038ED8MOVDS,AX
12B7:
0005BA0000MOVDX,0000
12B7:
0008B409MOVAH,09
12B7:
000ACD21INT21
12B7:
000CB44CMOVAH,4C
12B7:
000ECD21INT21
12B7:
0010EB51JMP0063
12B7:
00128B867AFMOVAX,[BP+FF7A]
………………
12B7:
001F8B4604MOVAX,[BP+04]
-
在上例中,12B7:
0000表示CS:
IP的内容(其中CS的值是动态值);B8B612代表该处存放的二进制数据,亦即指令MOVAX,12B6的机器代码;当连续约32字节的数据反汇编完后,重新回到DEBUG提示符“-”下,如果再键入U命令,则将继续对后面的内存区反汇编。
特别应该注意的是,由于反汇编命令针对内存区的二进制数据,而被调试程序仅占内存区的某一部分,故反汇编出来的内容并非全是被调试程序的代码,如上例中的JMP0063以后的部分,显然不是TEST.EXE的内容。
另外还需注意,DEBUG默认使用十六进制。
b)–U0123↘:
从指定的IP=0123处开始,对连续约32字节内容反汇编。
c)–U01230143↘:
从指定的IP=0123处开始反汇编,直至指定的0143处结束。
2)显示寄存器命令R:
显示或修改寄存器的内容。
一般常用以下形式:
a)-R↘:
显示所有寄存器当前的内容及当前将执行的指令。
如对TEST.EXE,在程序运行之前,键入R命令:
-R↘
AX=0000BX=0000CX=0020DX=0000SP=0000BP=0000SI=0000DI=0000
DS=12A6ES=12A6SS=12B6CS=12B7IP=0000NVUPEIPLNZNAPONC
12B7:
0000B8B612MOVAX,12B6
-
在显示寄存器内容时,标志寄存器F(或程序状态字寄存器PSW)表示成各个分离的标志位,其意义如下表所示:
溢出
方向
中断
符号
零
辅助进位
奇偶
进位
0
NV
UP
DI
PL
NZ
NA
PO
NC
1
OV
DN
EI
NG
ZR
AC
PE
CY
b)-RAX↘:
显示指定的AX寄存器当前的内容,并等待键入新值;如果不作修改,可直接回车。
如:
-RAX↘
AX0000
:
1234↘
-
c)-RF↘:
显示标志寄存器F各个标志位的内容,并等待键入新的标志位;如果不作修改,可直接回车。
如:
-RF↘
NVUPEIPLNZNAPONC-ZR↘
-
3)运行命令G:
使程序在DEBUG控制下运行,一般有全程、断点运行两种方式。
a)-G↘:
控制程序由当前IP处运行,直至程序结束。
如果当前IP为初始值,其作用则相当于直接在DOS下运行程序,一般用于快速观察程序的运行情况。
b)-G0123↘:
控制程序由当前IP处运行,直至指定的断点IP=0123H处,程序暂停,显示各个寄存器的当前值及断点处指令,然后返回DEBUG提示符“-”下。
如对TEST.EXE,若想观察字符串显示的入口参数是否设置好,则可以断点运行至000A处:
-G000A↘
AX=09B6BX=0000CX=0020DX=0000SP=0000BP=0000SI=0000DI=0000
DS=12B6ES=12A6SS=12B6CS=12B7IP=000ANVUPEIPLNZNAPONC
12B7:
000ACD21INT21
-
断点一般选取在需要观察的地方,当程序停下来后,可以根据各方面的情况(如寄存器、缓冲区、标志等)来判断程序是否运行正确。
4)单步命令T:
控制程序运行一条指令后暂停,显示各个寄存器的当前值及断点处指令,然后返回DEBUG提示符“-”下。
如对TEST.EXE,若当前IP为初始值,则键入T命令后有如下显示:
-T↘
AX=12B6BX=0000CX=0020DX=0000SP=0000BP=0000SI=0000DI=0000
DS=12A6ES=12A6SS=12B6CS=12B7IP=0003NVUPEIPLNZNAPONC
12B7:
00038ED8MOVDS,AX
-
单步命令一般用于需对程序运行作仔细分析的地方,如判断分支转移、观察运算结果等。
若能综合运用断点及单步指令,则可大大提高DEBUG调试的速度及效率。
但应注意,当IP指针位于INT21H一类指令处时,执行T命令将会使程序进入该功能调用子程序中,因此,这种情况下最好不用T命令,而用断点运行命令-P跳过该类功能调用指令。
5)显示内存命令D:
以十六进制及ASCII两种方式显示内存区的二进制数据,通常用来观察数据段内的缓冲区内容。
一般常用以下二种形式:
a)-D↘:
从0000单元开始,连续显示128个内存单元的内容,如果继续键入D命令,则继续显示后128个单元内容。
如对TEST.EXE,若想观察字符串显示时的字符串内容是否正确,则可在程序断点运行至000A处,键入D命令:
-DDS:
0↘
12B6:
000048656C6C6F2C576F-726C642124000000Hello,World!
$...
12B6:
0010B8B6128ED8BA0000-B409CD21B44CCD21...........!
.L.!
12B6:
0020EB518B867AFF2BC6-40508A460898508B.Q..z.+.@P.F..P.
…………
12B6:
007083C4028B5E048A07-2AE489867AFF3BC6....^...*...z.;.
-
在上例中,128个单元分成8行,每行16个单元,每个单元的内容分别以十六进制形式和ASCII码形式显示。
如果该单元的内容不是可显示字符,则在ASCII区内显示为“.”。
b)–D01230143↘:
从指定的0123单元开始显示,直至指定的0143单元结束。
6)汇编命令A:
用于在DEBUG环境下直接键入汇编语言语句、生成较简单的可执行代码而不必经过完整的汇编语言编程步骤,或者用来在调试过程中临时修改某条指令。
如:
-A↘
127D:
0100MOVAH,02↘
127D:
0102MOVAL,6A↘
127D:
0104INT21↘
127D:
0106↘
-A0102↘
127D:
0102MOVDL,6A↘
127D:
0104↘
-
当键入汇编命令A后,将从当前IP或指定地址处提示输入汇编语句,每输入一条语句,DEBUG将其汇编成机器码,并存入相应的存储单元中,然后地址自动增加,继续提示输入下一条语句;如果直接回车,则结束汇编命令。
特别应注意的是,DEBUG默认使用十六进制,故在输入时不能使用H。
7)装载命令L:
用来将被调试程序重新装载进内存中,一般用于程序运行结束后需继续调试程序时,或需从头开始调试程序时。
如对TEST.EXE:
-G↘
Hello,World!
Programterminatednormally
-L↘-
退出命令Q:
键入此命令,即退出DEBUG状态,返回DOS。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 实验 大纲
![提示](https://static.bdocx.com/images/bang_tan.gif)