中南大学 汇编语言实验报告Word格式文档下载.docx
- 文档编号:19530332
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:20
- 大小:20.67KB
中南大学 汇编语言实验报告Word格式文档下载.docx
《中南大学 汇编语言实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《中南大学 汇编语言实验报告Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
end
四、实验结果
DEBUG调试如下:
五、实验心得
编了这个程序之后发现,想要真正理解一个程序都是需要掌握众多助记符的用法以及它的意思,只有了解并明白了这些之后才可以分析程序或者是编写简单的小程序。
实验二起泡排序算法的程序实现
(1)掌握循环程序的设计方法。
(4)学会针对不同的问题,选用不同的组织循环的方法。
二、实验原理
循环结构分DO_WHILE和DO_UNTIL两种,无论使用哪种循环结构,循环程序一般应包括以下几部分:
①循环初始化。
它包括设置循环次数的初始值、地址指针的初始设置等。
②循环体。
这是循环工作的主体,包括要重复执行的操作,以及循环的修改部分。
修改部分包括地址指针的修改、循环控制条件的修改等。
③循环控制部分。
它是控制循环的关键,判断循环条件满足与否。
特别要注意循环入口和循环次数的正确设置、地址指针及循环控制条件的修改等。
否则会得不到期望的结果。
起泡排序算法的程序实现
DATASSEGMENT
BUFFERDB100DUP(?
)
XDB5DUP(?
STRING1DB"
PLEASEINPUTDATAS:
"
"
$"
STRING2DB"
AFTERSORTIS:
SHIFTDB13,10,'
$'
SPACEDB20H,'
DATASENDS
STACKSSEGMENT
DB256DUP(?
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS,ES:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
MOVES,AX
MOVAX,STACKS
LEASI,BUFFER
MOVCX,0
LEADX,STRING1
MOVAH,09H
INT21H
L1:
MOVAH,01H;
/////////////////键盘输入转成数
CMPAL,0DH
JEL2
CMPAL,20H
JEL3
XORAH,AH
SUBAX,30H
XCHGAX,BX
MOVDX,10
MULDX
ADDBX,AX
JMPL1
L3:
INCCX
MOV[SI],BL
ADDSI,1
XORBX,BX
L2:
LEADX,SHIFT
LEADI,X
MOV[DI],CL
LABLE2:
PUSHCX
LABLE:
MOVAL,[SI]
CMPAL,[SI+1]
JBEL4
XCHGAL,[SI+1]
MOV[SI],AL
L4:
ADDSI,1;
跳到回车处理;
空格处理;
/////////////存储到buffer中;
/////////排序算法
POPCX
LOOPLABLE2
LEADX,STRING2
LEADI,BUFFER
L7:
MOVCX,2
MOVBH,[DI]
L6:
MOVCL,4
ROLBX,CL
MOVDL,BL
ANDDL,0FH
CMPDL,9
JBEL5
ADDDL,7
L5:
ADDDL,30H
MOVAH,02H
LOOPL6
INCDI
LEADX,SPACE
LEASI,X
MOVBL,[SI]
CMPBL,0
DECBL
JGEL7
MOVAH,4CH
CODESENDS
ENDSTART
四、实验结果;
/////////////////////显示字符
1.在进行循环程序设计时,要注意循环初始化、内外层循环的控制、循环结束条件等的设置,对整个程序的执行逻辑要非常清楚,这样可以避免死循环等意外情况的出现。
2.多层循环的控制更为复杂,编写代码时,要注意注释重要的循环控制部分,这样思路才不会乱。
同时要对照流程图,随时观察代码的逻辑思路是否正确。
3.当要观察排序结果时,可利用D命令,显示数据段的内容,检查程序是否正常运行。
实验三查找匹配字符串
查找匹配字符串:
程序接收用户键入的一个关键字以及一个句子。
如果句子中不包含关键字则显示‘NOmatch!
’;
如果句子中包含关键字则显示‘MATCH’,且把该字在句子中的位置用十六进制数显示出来。
DATASEGMENT
mess1DB'
Enterkeyword:
'
'
mess2DB'
EnterSentence:
mess3DB'
Matchatlocation:
mess4DB'
NOTMATCH.'
13,10,'
mess5DB'
Hofthesentence'
changeDB13,10,'
stoknin1labelbyte
max1db10
act1db?
stokn1db10dup(?
stoknin2labelbyte
max2db50
act2db?
stokn2db50dup(?
DATAENDS
此处输入堆栈段代码
CODESEGMENT
*************************************代码段
code,ds:
data,es:
data
pushds
subAX,AX
subBX,BX
subDI,DI
subSI,SI
pushAX;
为返回dos并清空后面要用到的寄存器
MOVAX,DATA
LEADX,mess1
MOVah,09
INT21h;
输出Enterkeyword
LEADX,stoknin1
MOVah,0ah;
用21号中段的0ah号功能获取关键字
INT21h
cmpact1,0
jeexit;
如果为空直接退出程序
a10:
********************************输入Sentence并判断
LEADX,change
输出回程,换行
LEADX,mess2
输出EnterSentence:
LEADX,stoknin2
MOVah,0ah
用21号中段的0ah号功能获取句子
MOVAL,act1
CBW
MOVCX,AX;
保存关键字长度到cx
PUSHCX;
cx入栈
MOVAL,act2
cmpAL,0
jea50;
保存句子长度到al,若句子为空则跳转显示notmatchSUBAL,act1
jsa50;
若句子长度小于关键字长度,则跳转显示notmatchINCAL
LEABX,stokn2;
将句子的首地址放进BX
MOVDI,0
MOVSI,0
a20:
****************************************比较,内循环
MOVAH,[BX+DI]
CMPAH,stokn1[SI];
遇见字符不相等就跳转到a30
jnea30
INCSI
DECCX;
没遇到一个相等的字符,cx-1,cx不为0则比较下一个字符,当cx为0是说明关键字比较完
CMPCX,0
jea40
jmpa20
a30:
*****************************************外循环,BX+1,清空si,di继续内循环比较INCBX
DECAL
jea50
pushCX
a40:
*****************************************match,将bx减去句子的首地址加一得到关键字所在位置,调用二进制转十六进制子函数将位置输出
SUBBX,offsetstokn2
INCBX
LEADX,mess3
CALLbtoh
LEADX,mess5
jmpa10
****************************************二进制转换十六进制
btohPROCNEAR
MOVCH,4
MOVAL,BL
andAL,0fh
addAL,30h
cmpal,3ah
jlprintit
printit:
MOVdl,al
MOVah,2
decch
ret
btohendp
a50:
*****************************************显示notmatch
LEADX,mess4
exit:
CODEENDS
END
与第一次实验相比这次用到了数据段,应该注意数据段的定义和使用。
此外应该注意单个字符时的“边缘”情况,因为这时指针的移动和关键字的长度是一致的,但是这并不意味着,两个字符串匹配。
实验四求Fibonacci递归数
一、实验目的:
掌握子程序的设计方法,熟悉递归程序的设计。
二、实验要求:
掌握递归程序的调用、返回及入口、出口的传递方法。
程序接受由用户键入的数N,根据给定的N值,计算Fibonacci数。
Fibonacci数的公式如下:
Fib
(1)=1;
当n=1
Fib
(2)=1;
当n=2
Fib(n)=Fib(n-1)+Fib(n-2)
此处输入数据段代码
RESULTDB1D,24DUP(0)
XDB1D,24DUP(0)
MESS1DB0DH,0AH,'
Pleaseinputadata:
MESS2DB0DH,0AH,'
Theresultis:
MESS3DB0DH,0AH,'
InputQ/qtoquit.'
MESS4DB0DH,0AH,'
======================'
FLAGDW0DH
MESSERRORDB0DH,0AH,'
Inputerror,pleasere-enter.'
QUITDB0DH,0AH,'
YouhavetypedQ/qtoexit.'
DW128DUP(?
MOVSS,AX
此处输入代码段代码
REINPUT:
PUSHAX
PUSHBX
PUSHDX
PUSHSI
PUSHDI
MOVAH,09
LEADX,MESS4
LEADX,MESS3
LEADX,MESS1
MOVBX,0
INPUT:
MOVAH,01
CMPAL,'
q'
;
JZEND_
Q'
CMPAL,0DH;
JZCONT
0'
JBERROR;
:
JNBERROR
SUBAL,30H
MOVCX,10D
MULCX
JMPINPUT
ERROR:
LEADX,MESSERROR
JMPREINPUT
END_:
LEADX,QUIT
RET
CONT:
MOVCX,BX;
CMPCX,2
JLEPRINT;
SUBCX,2;
NEXT:
MOVDI,CX
MOVCX,25
ADDE:
MOVDL,X[SI]
MOVDH,RESULT[SI]
ADDDL,DH;
MOVRESULT[SI],DL
MOVX[SI],DH;
CMPDL,10D
JAEGREAT;
JMPGOON
GREAT:
SUBRESULT[SI],10D;
ADDX[SI],1;
GOON:
LOOPADDE
MOVCX,DI
LOOPNEXT
PRINT:
LEADX,MESS2
MOVSI,24
DISPLAY1:
CMPFLAG,0;
JNZN2
CMPRESULT[SI],0
JZN3
ADDFLAG,1
N2:
MOVDL,RESULT[SI];
N3:
DECSI
LOOPDISPLAY1
MOVFLAG,0
MOVRESULT[0],1D
MOVSI,1
MOVCX,24
INITIAL:
MOVRESULT[SI],0
MOVX[SI],0
LOOPINITIAL
POPDI;
POPSI
POPDX
POPBX
POPAX
JMPREINPUT;
在程序的制作过程中,遇到了很多意想不到的困难,自己一个人解决起来有很大的困难,于是也少不了同学的帮助,深刻体会到开发程序不只是一两个人就能很好地完成的,要大家互相帮助,共同探讨问题,才能更好的解决困难。
实验五分类统计字符个数
掌握分支程序设计的原理与方法,重点掌握各种程序中形成和判断条件而产生的程序段的设计方法和技巧。
掌握分支程序的调用及基本子程序的编写,判断程序运行的顺序。
程序接受用户输入一行字符,并按照字符串中字符所属的类型分类,将结果输出(例如:
aaabb1234&
中,字母5,数字4,其他字符1)
STRING1DB'
InputYourString:
$'
输入提示信息
STRING2DB'
Digit:
各类字符提示信息
STRING3DB'
UpLetter:
STRING4DB'
LowLetter:
STRING5DB'
Others:
DIGITDB0;
数字
ALPHAUDB0;
大写字母
ALPHALDB0;
小写字母
OTHERSDB0;
其他
LEADX,STRING1;
显示输入提示信息
MOVAH,9
MOVCX,100;
设置循环次数主够大
MOVAH,1;
中断调用,单字符输入
CMPAL,0DH;
若输入回车符则结束
JZOVER2
CMPAL,30H
JBOTHER;
若
CMPAL,39H;
若>
39H(9),跳转进一步比较
JAHIGHER1
JMPDIGITAL;
DIGIT++
HIGHER1:
CMPAL,41H;
if
JBOTHER
CMPAL,5AH;
if>
5AH(Z),跳转继续比较
JAHIGHER2
JMPUALPHA;
ALPHAU++
HIGHER2:
CMPAL,61H;
CMPAL,7AH;
7AH(z),OTHERS++
JAOTHER
JMPLALPHA;
ALPHAL++
JMPOVER;
比较结束
OTHER:
INCOTHERS;
OTHERS++
JMPOVER
DIGITAL:
INCDIGIT;
LALPHA:
INCALPHAL;
UALPHA:
INCALPHAU;
OVER:
NOP
LOOPL1;
循环,输入下一字符
OVER2:
CALLENDLINE;
回车换行
LEADX,STRING2;
输出提示信息
XORAX,AX
MOVAL,DIGIT;
将统计的数字送AX,为输出做准备
CALLDISPLAY;
调用输出两位数字的子程序
CALLENDLINE;
下同
LEADX,STRING3
MOVAL,ALPHAU
CALLDISPLAY
CALLENDLINE
LEADX,STRING4
MOVAL,ALPHAL
LEADX,STRING5
MOVAL,OTHERS
ENDLINEPROCNEAR;
控制输出格式,输出回车换行子程序
MOVAH,2
MOVDL,0AH
MOVDL,0DH
ENDLINEENDP
DISPLAYPROCNEAR;
输出两位数字的子程序
MOVBL,10;
10送BL
DIVBL;
AX/BL,AL=商,AH=余数
PUS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中南大学 汇编语言实验报告 中南 大学 汇编语言 实验 报告