分支结构程序设计汇编语言资料.docx
《分支结构程序设计汇编语言资料.docx》由会员分享,可在线阅读,更多相关《分支结构程序设计汇编语言资料.docx(10页珍藏版)》请在冰豆网上搜索。
![分支结构程序设计汇编语言资料.docx](https://file1.bdocx.com/fileroot1/2023-1/29/8e04e0e7-af3b-42bd-84ae-cd003f319b22/8e04e0e7-af3b-42bd-84ae-cd003f319b221.gif)
分支结构程序设计汇编语言资料
汇编语言实验报告
实验名称:
分支结构程序设计
姓名:
学号:
班级:
一、实验内容
1.将程序1输入、汇编、连接并通过Debug调试和检查运行结果。
2.修改程序1完成将其中的最小数存入MIN单元。
3.将编写好的程序2输入、汇编、连接并通过Debug调试和检查运行结果。
4.将编写好的程序3输入、汇编、连接并通过Debug调试和检查运行结果。
二、实验目的
1.掌握分支程序的结构。
2.掌握分支程序的设计、编写及调试方法。
三、实验原理
1、汇编语言源程序编制完成后,在计算机上的操作过程分为四个阶段:
编辑、汇编、连接、运行调试(如图1)。
2、上机实验步骤:
1)确定源程序的存放目录
2)编辑ASM源程序
3)用MASM.EXE汇编程序产生OBJ目标文件
4)用LINK.EXE产生EXE可执行文件
5)执行程序
3、程序执行过程的跟踪
可以用Debug来跟踪一个程序的运行过程,这通常是必须要做的工作。
我们写的程序在逻辑上不一定总是正确,对于简单的错误,仔细检查一下源程序就可以发现;而对于隐藏较深的错误,就必须对程序的执行过程进行跟踪分析才容易发现。
为了观察程序的运行过程,可以使用Debug。
Debug可以将程序加载入内存,设置CS:
IP指向程序的入口,但Debug并不放弃对CPU的控制,这样,我们就可以使用Debug的相关命令来单步执行程序,查看每一条指令的执行结果。
4分支结构
汇编语言中的分支结构式一种很常用的结构,就像我们高级语言中的if结构一样。
对一些需要判断的很有用。
四、实验过程
1、实验环境
汇编语言程序设计的实验环境如下:
(1).硬件环境
微型计算机(Intelx86系列CPU)一台
(2).软件环境
Windows98/2000/XP操作系统
任意一种文本编辑器(EDIT、NOTEPAD(记事本)、UltraEDIT等)
汇编程序(MASM.EXE或TASM.EXE)
调试程序(DEBUG.EXE或TD.EXE)
文本编辑器建议使用EDIT或NOTEPAD,汇编程序建议使用MASM.EXE,连接程序建议使用LINK.EXE,调试程序建议使用TD.EXE。
2、实验步骤
(1)、用文件编辑器编写汇编语言程序,并以masm或asm为后缀命名,如:
1.asm(以下实验步骤均已此作为例子说明)。
(2)、进入dos,用masm编译所编写的汇编程序,生成1.obj,然后用link.exe连接1.obj文件,生成课执行文件1.exe.
(3)、执行1.exe.
(4)、由于在masm中执行了1.exe文件,以我们现在掌握的知识,并不能显示答案在屏幕中,所以用debug1.exe来打开这个文件,并用t命令一步一步的跟踪该程序的执行过程,验证此程序是否达到了我们想要达到的结果。
3、实验源程序代码及其结构分析
(1)求几个数中的最大数(1.ASM1.OBJ1.EXE)
代码如下:
DATASEGMENT
BUFDB38H,73H,1FH
MAXDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,BUF
CMPAL,BUF+1
JNBLP1
MOVAL,BUF+1
LP1:
CMPAL,BUF+2
JAELP2
MOVAL,BUF+2
LP2:
MOVMAX,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
运行结果如下:
最大数就是DS数据段中的第四个数
(2)判断几个数据是正数还是负数测试数据为:
38H,-5H,-32H,-44H,40H,-02H(2.ASM2.OBJ2.EXE)
代码如下:
DATASEGMENT
COUNTDB07H
BUFDB38H,-5H,-32H,-44H,40H,-02H
STRING1DB'FUSHU',0DH,0AH,'$'
STRING2DB'ZHENGSHU',0DH,0AH,'$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,00H
MOVCL,00H
MOVSI,OFFSETBUF
LP0:
MOVBL,[SI]
INCSI
INCCL
CMPCL,COUNT
JNLLP4
CMPAL,BL
JNLLP1
JMPLP2
LP1:
MOVDX,OFFSETSTRING1
MOVAH,09H
INT21H
JMPLP0
LP2:
MOVDX,OFFSETSTRING2
MOVAH,09H
INT21H
JMPLP0
LP4:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
运行结果如下:
(3)找出几个数据中最小的数测试数为:
38H,73H,1FH(11.ASM11.OBJ11.EXE)
代码如下:
DATASEGMENT
BUFDB38H,73H,1FH
MINDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,BUF
CMPAL,BUF+1
JBLP1
MOVAL,BUF+1
LP1:
CMPAL,BUF+2
JBLP2
MOVAL,BUF+2
LP2:
MOVMIN,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
结果如下:
(最小数据位于DS数据段的第四个数)
(4)测试的数据是-3,Y的结果保存在CX寄存器中:
(3.ASM3.OBJ3.EXE)
代码如下:
DATASEGMENT
XDB-03H
WORD1DB'Y=0',0DH,0AH,'$'
WORD2DB'Y=-1',0DH,0AH,'$'
WORD3DB'Y=1',0DH,0AH,'$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,X
MOVBL,00H
CMPAL,BL
JZLP1
JMPLP2
LP1:
MOVDX,OFFSETWORD1
MOVAH,09H
INT21H
MOVCL,00H
JMPLP5
LP2:
CMPAL,BL
JLLP3
JMPLP4
LP3:
MOVDX,OFFSETWORD2
MOVAH,09H
INT21H
MOVCL,-01H
JMPLP5
LP4:
MOVDX,OFFSETWORD3
MOVAH,09H
INT21H
MOVCL,01H
LP5:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
运行结果如下:
(5)判断几个数据的奇偶性(22.ASM22.OBJ22.EXE)
测试数据:
38H,-5H,-32H,-44H,40H,-02H
代码如下:
DATASEGMENT
COUNTDB07H
BUFDB38H,-5H,-32H,-44H,40H,-02H