汇编实验大纲Word下载.docx
- 文档编号:18398088
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:18
- 大小:83.40KB
汇编实验大纲Word下载.docx
《汇编实验大纲Word下载.docx》由会员分享,可在线阅读,更多相关《汇编实验大纲Word下载.docx(18页珍藏版)》请在冰豆网上搜索。
MOVCX,AX
MOVBX,DX;
(DX:
AX)→(BX:
CX)
MOVAX,Z
CWD;
(Z)符号扩展
ADDCX,AX
ADCBX,DX;
(BX:
CX)+(DX:
SUBCX,2
SBBBX,0;
CX)-2→(BX:
MOVAX,V
(V)符号扩展
SUBAX,CX
SBBDX,BX;
AX)-(BX:
CX)→(DX:
X)
IDIVX;
AX)/X
MOVDL,AL
PUSHCX
MOVCL,4
SHRAL,CL
ORAL,30H
MOV[SI],AL
INCSI
MOVAL,DL
ANDAL,0FH
MOV[SI],AL
MOVAL,'
$'
MOVDX,OFFSETBUFFER
MOVAH,09H
INT21H
MOVAH,4CH
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求绝对值程序流程图
四.程序清单:
;
计算绝对值
XDB-15
RESULTDB?
CODE
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>
Y=0X=0
-1X<
设输入数据为X、输出数据Y,且皆为字节变量。
三、程序流程图:
四.程序清单
DATASEGMENT
XDB-5
YDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
MOVDS,AX;
MOVAL,X;
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;
程序结束
ENDSTART;
考虑除了用多条条件转移指令实现多分支转移功能之外,能否有其他方法实现相同的功能?
实验1.4循环程序设计
(一)
1.掌握循环程序设计的方法(两重性循环结构)
2.掌握正确分配与使用寄存器。
在一串给定个数的数中寻找最小值,并且放置至指定的存储单元。
每个数用16位表示
要求:
1.请大家自己建立存储一串数值的BUFFER变量。
并将最大值放入MAX存储单元中。
2.考虑在程序中将要使用哪些寄存器,及其相关功能。
3.考虑计数器的建立方法
三.程序框图
图1.3求最大值的程序框图
四.程序清单
DATASEGMENT
BUFFERDW1,2,3,5
COUNTEQU$-BUFFER
MAXDW?
STACKSEGMENTPARASTACK'
DB64DUP(?
TOPEQU$-STACK
ASSUMECS:
CODE,DS:
DATA,SS:
STARTPROCFAR
BEGIN:
PUSHDS
MOVAX,0
PUSHAX
MOVDS,AX
MOVAX,SEGSTACK
MOVSS,AX
MOVAX,TOP
MOVSP,AX
MOVCX,COUNT
LEABX,BUFFER
MOVAX,[BX]
INCBX
DECCX
AGAIN:
CMPAX,[BX]
JGENEXT
LOOPAGAIN
RET
STARTENDP
ENDBEGIN
指出控制循环程序的方法,并划分该程序的四个组成部分
实验1.5循环程序设计
(二)
1.掌握循环程序结构的编程方法。
2.掌握控制循环的方法。
内容:
一编写程序完成求1+2+3+……N的累加和,直到累加和超过1000为止。
统计被累加的自然数的个数送CN单元,累加和送SUM。
三.实验步骤
1.自编程序,上机调试,完成上述功能。
2.指出程序中的四个组成部分,结构形式及控制循环的方法。
四.程序框图:
四.源程序:
SUMDW?
CNDW?
MOVAX,0;
0送AX
MOVBX,0;
0送BX
LP:
INCBX;
BX加1
ADDAX,BX;
求累加和
CMPAX,1000;
比较
JBELP;
≤1000转
MOVSUM,AX
MOVCN,BX;
INT21H;
CODEENDS
五.思考题(附加题)
在以BUF为首址的字存储区中存放有N个有符号数,现需将它们按大到小的顺序排列在BUF存储区中,试编写其程序。
实验1.6子程序结构
1.掌握程序设计方法,合理划分层次
2.掌握子程序的调用与返回的方法
编制一程序,将一个给定的二进制数按位转换成相应的ASCII码字符串,送到指定的存储单元并显示。
如二进制数10010011转换成字符串为‘10010011’。
要求将转换过程写成子程序,且子程序应具有较好的通用性,而必须能实现对8位和16位二进制数的转换。
三.部分程序清单
NUM8DB93H
NUM16DW0ABCDH
ASCBUFDB20DUP(0)
DB100DUP(?
ASSUMEDS:
CODE,SS:
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
MOVDX,NUM16
MOVCX,16;
置位数16
LEADI,ASCBUF
CALLBTASC
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
LOOPL1
POPAX
BTASCENDP
四.思考题
请画出此程序的程序框图
用DEBUG调试程序
一、实验目的
学习利用DEBUG调试程序的基本思想及方法
二、实验环境:
1.硬件:
PC微机
2.软件:
DOS系统、EDIT.EXE、MASM.EXE、LINK.EXE、DEBUG.EXE
三、实验内容
利用DEBUG调试程序,可以将一个可执行程序(如.EXE、.COM等)装入内存中,并接管对程序运行的控制权,通过采取如反汇编、断点运行、单步执行、寄存器内容修改等方法,对可执行程序进行跟踪、调试,以找出其中的设计错误,然后再对源程序进行相应修改,重新生成正确的可执行程序。
1.准备被调试程序:
假定所有有关文件均在当前路径C:
\MYTEST>
下,按照实验一的步骤生成一个被调试的可执行程序(如TEST.EXE),参考程序如下:
STRDB‘Hello,World!
$’
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETSTR
MOVAH,09H
INT21H
MOVAH,4CH
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
00038ED8MOVDS,AX
0005BA0000MOVDX,0000
0008B409MOVAH,09
000ACD21INT21
000CB44CMOVAH,4C
000ECD21INT21
0010EB51JMP0063
00128B867AFMOVAX,[BP+FF7A]
………………
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
0000B8B612MOVAX,12B6
-
在显示寄存器内容时,标志寄存器F(或程序状态字寄存器PSW)表示成各个分离的标志位,其意义如下表所示:
溢出
方向
中断
符号
零
辅助进位
奇偶
进位
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
000ACD21INT21
断点一般选取在需要观察的地方,当程序停下来后,可以根据各方面的情况(如寄存器、缓冲区、标志等)来判断程序是否运行正确。
4)单步命令T:
控制程序运行一条指令后暂停,显示各个寄存器的当前值及断点处指令,然后返回DEBUG提示符“-”下。
如对TEST.EXE,若当前IP为初始值,则键入T命令后有如下显示:
-T↘
AX=12B6BX=0000CX=0020DX=0000SP=0000BP=0000SI=0000DI=0000
DS=12A6ES=12A6SS=12B6CS=12B7IP=0003NVUPEIPLNZNAPONC
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!
$...
0010B8B6128ED8BA0000-B409CD21B44CCD21...........!
.L.!
0020EB518B867AFF2BC6-40508A460898508B.Q..z.+.@P.F..P.
…………
007083C4028B5E048A07-2AE489867AFF3BC6....^...*...z.;
.
在上例中,128个单元分成8行,每行16个单元,每个单元的内容分别以十六进制形式和ASCII码形式显示。
如果该单元的内容不是可显示字符,则在ASCII区内显示为“.”。
b)–D01230143↘:
从指定的0123单元开始显示,直至指定的0143单元结束。
6)汇编命令A:
用于在DEBUG环境下直接键入汇编语言语句、生成较简单的可执行代码而不必经过完整的汇编语言编程步骤,或者用来在调试过程中临时修改某条指令。
-A↘
127D:
0100MOVAH,02↘
0102MOVAL,6A↘
0104INT21↘
0106↘
-A0102↘
0102MOVDL,6A↘
0104↘
当键入汇编命令A后,将从当前IP或指定地址处提示输入汇编语句,每输入一条语句,DEBUG将其汇编成机器码,并存入相应的存储单元中,然后地址自动增加,继续提示输入下一条语句;
如果直接回车,则结束汇编命令。
特别应注意的是,DEBUG默认使用十六进制,故在输入时不能使用H。
7)装载命令L:
用来将被调试程序重新装载进内存中,一般用于程序运行结束后需继续调试程序时,或需从头开始调试程序时。
如对TEST.EXE:
-G↘
Hello,World!
Programterminatednormally
-L↘-
退出命令Q:
键入此命令,即退出DEBUG状态,返回DOS。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 实验 大纲