中南民族大学汇编语言实验报告.docx
《中南民族大学汇编语言实验报告.docx》由会员分享,可在线阅读,更多相关《中南民族大学汇编语言实验报告.docx(20页珍藏版)》请在冰豆网上搜索。
![中南民族大学汇编语言实验报告.docx](https://file1.bdocx.com/fileroot1/2023-2/21/91d16ce2-1df6-4cef-b485-d74d82b2b99d/91d16ce2-1df6-4cef-b485-d74d82b2b99d1.gif)
中南民族大学汇编语言实验报告
院系:
计算机科学学院
专业:
计算机科学与技术
年级:
2012级
课程名称:
汇编语言
学号:
姓名:
指导教师:
雷建云
2014年6月26日
年级
2012级
班号
学号
专业
计算机科学与技术
姓名
实验名称
字符显示
实验
类型
设计型
综合型
创新型
实
验
目
的
或
要
求
1. 题目:
输入一个字符,找出它的前导字符和后续字符,并按顺序显示这三个字符。
2.实验要求:
程序从键盘接收用户输入的一个字符后,然后分别找出它的前导字符和后续字符,再按顺序显示这三个字符。
在用户输入和显示字符之前都要有相应的提示信息。
3.提示:
从AL寄存器得到它的ASCII码,它的前导字符和后续字符的ASCII码分别比它的ASCII码少1或多1。
然后分别显示这三个字符。
实
验
原
理
(
算
法
流
程
)
.386
.MODELFLAT
ExitProcessPROTONEAR32stdcall,dwExitCode:
DWORD
INCLUDEio.h;headerfileforinput/output
crEQU0dh;carriagereturncharacter
LfEQU0ah;linefeed
.STACK4096;reserve4096-bytestack
.DATA
prompt1BYTE"Thisprogramwilloutputthreecharacter",cr,lf
BYTE"Enteracharacter:
",0
label1BYTEcr,Lf,"Thethreecharacteris",cr,lf
char3BYTE?
BYTEcr,Lf
char1BYTE?
BYTEcr,lf
char2BYTE?
BYTEcr,lf,0
char4byte5dup(?
)
.CODE
_start:
outputprompt1
inputchar4,3;readASCIIcharacters
moval,char4
movchar1,al
incal
movchar2,al
decal
decal
movchar3,al
outputlabel1
INVOKEExitProcess,0;exitwithreturncode0
PUBLIC_start
END
组
内
分
工
(
可
选
)
实
验
结
果
分
析
及
心
得
体
会
实验截图
心得体会
通过本次试验,我掌握的汇编语言的基本操作,及通过ASCII码对字符进行操作。
成
绩
评
定
教师签名:
年月日
年级
2012级
班号
学号
专业
计算机科学与技术
姓名
实验名称
计算函数值
实验
类型
设计型
综合型
创新型
实
验
目
的
或
要
求
1. 题目:
计算给定函数值
2.实验要求:
编制程序,计算下面函数值
其中,从键盘输入x,y,输出数据为a。
输入输出时候都要求有提示信息。
3.提示:
这个给出两种方法如下:
(1)先输入x和y,然后用嵌套的IF结构来分别判断并给a赋值。
(2)分别为x和y设置一个标志变量,当值大于等于0时该变量等于1,当值小于0时该变量等于0。
然后用这两个变量进行异或操作,结果赋值给a。
(这个需要用到xor指令)。
实
验
原
理
(
算
法
流
程
)
.386
.MODELFLAT
ExitProcessPROTONEAR32stdcall,dwExitCode:
DWORD
INCLUDEio.h;headerfileforinput/output
crEQU0dh;carriagereturncharacter
LfEQU0ah;linefeed
.STACK4096;reserve4096-bytestack
.DATA
prompt1byte"pleaseinputx:
",0
prompt2byte"pleaseinputy:
",0
stringbyte10dup(?
)
outstr1bytecr,lf,"a="
avaluebyte6dup(?
),cr,lf,0
.CODE
_start:
outputprompt1
inputstring,10
atoistring
movbx,ax
outputprompt2
inputstring,10
atoistring
movcx,0
cmpbx,0
jgeL1
cmpax,0
jlL2
L1:
cmpax,0
jgeL3
jmpL4
L2:
movcx,-1
jmpL4
L3:
movcx,1
L4:
itoaavalue,cx
outputoutstr1
INVOKEExitProcess,0;exitwithreturncode0
PUBLIC_start
END
组
内
分
工
(
可
选
)
实
验
结
果
分
析
及
心
得
体
会
实验截图
心得体会
在试验中,根据提示输入两个整数,通过与0比较进行跳转,最后赋值输出。
成
绩
评
定
教师签名:
年月日
年级
2012级
班号
学号
专业
计算机科学与技术
姓名
实验名称
用表格形式显示字符
实验
类型
设计型
综合型
创新型
实
验
目
的
或
要
求
1. 题目:
用表格形式显示ASCII字符
2.实验要求:
按15行×16列的表格形式显示ASCII码为10H-100H的所有字符,即以行为主的顺序及ASCII码递增的次序依次显示对应的字符。
每16个字符为一行,每行中的相邻两个字符之间用空白符或空格符(ASCII码为0或20H)隔开。
实
验
原
理
(
算
法
流
程
)
.386
.MODELFLAT
ExitProcessPROTONEAR32stdcall,dwExitCode:
DWORD
INCLUDEio.h;headerfileforinput/output
crEQU0dh;carriagereturncharacter
LfEQU0ah;linefeed
.STACK4096;reserve4096-bytestack
.DATA;reservestoragefordata
promotBYTE"TheprogramistoprintAsciifrom10hto100h",cr,Lf,0
lineDWORD?
rowDWORD?
ccfBYTE"",0
crlfBYTEcr,Lf,0
charBYTE1DUP(?
)
.CODE;startofmainprogramcode
_start:
outputpromot
movrow,0
movline,0
movchar,0Fh
doFirstWhile:
incline
cmpline,15
jgendFirstWhile
movrow,0
doSecondWhile:
incrow
cmprow,16
jgendSecondWhile
addchar,1
outputchar
outputccf
jmpdoSecondWhile
endSecondWhile:
outputcrlf
jmpdoFirstWhile
endFirstWhile:
INVOKEExitProcess,0;exitwithreturncode0
PUBLIC_start;makeentrypointpublic
END;endofsourcecode
组
内
分
工
(
可
选
)
实
验
结
果
分
析
及
心
得
体
会
实验截图
心得体会
在试验中,通过两个循环控制输出字符的行和列;程序用记事本打开,运行后只能输出部分字符,想查看完整输出需用编辑器打开。
成
绩
评
定
教师签名:
年月日
年级
2012级
班号
学号
专业
计算机科学与技术
姓名
实验名称
求X的阶乘
实验
类型
设计型
综合型
创新型
实
验
目
的
或
要
求
题目:
求X的阶乘值
2.实验要求:
输入一个整型数(不超过10),求出其阶乘值后输出,求阶乘的算法用子程序来实现。
3.提示:
可以用递归来实现,也可以用简单的循环来实现。
实
验
原
理
(
算
法
流
程
)
.386
.MODELFLAT
ExitProcessPROTONEAR32stdcall,dwExitCode:
DWORD
INCLUDEio.h;headerfileforinput/output
crEQU0dh;carriagereturncharacter
LfEQU0ah;linefeed
.STACK40960;reserve4096-bytestack
.DATA;reservestoragefordata
prompt1BYTE'Thisprogramistocalculateanumbersfactorial',cr,lf
BYTE'Pleaseinputanumberthatisfrom0to10',cr,lf,0
stringBYTE20DUP(?
)
resultBYTE'Theansweris'
valueBYTE11DUP(?
)
BYTEcr,lf,0
.CODE;startofmainprogramcode
_start:
L1:
outputprompt1
inputstring,11
atodstring
cmpeax,0
jlL1
cmpeax,10
jgL1
pusheax
callFACT
INVOKEExitProcess,0;exitwithreturncode0
FACTPROCNEAR32
pushebp
movebp,esp
moveax,[ebp+8]
movecx,eax
cmpeax,0
jeL2
cmpeax,1
jeL2
dececx
forcount:
mulecx
loopforcount
jmpL3
L2:
moveax,1
L3:
dtoavalue,eax
outputresult
popebp
ret4
FACTENDP
PUBLIC_start;makeentrypointpublic
END;endofsourcecode
组
内
分
工
(
可
选
)
实
验
结
果
分
析
及
心
得
体
会
实验截图
心得体会
通过本试验,我进一步了解了子程序的设计与调用。
成
绩
评
定
教师签名:
年月日
年级
2012级
班号
学号
专业
计算机科学与技术
姓名
实验名称
查找字符串中某字符的位置
实验
类型
设计型
综合型
创新型
实
验
目
的
或
要
求
1.题目:
设有一字符串已存放在STRBUF为首址的数据区中,编一程序找出其中的′.′字符,并将其存放地址输出。
2.实验要求:
输入字符串,查找字符’.’所在的位置,并输出。
3.提示:
(1)如果字符串中不存在’.’字符则应该输出“Notfound”。
(2)如果字符串中存在多个’.’字符,则先试着输出第一个’.’的位置,然后设法输出所有的’.’的位置。
实
验
原
理
(
算
法
流
程
)
.386
.MODELFLAT
ExitProcessPROTONEAR32stdcall,dwExitCode:
DWORD
INCLUDEio.h;headerfileforinput/output
crEQU0dh;carriagereturncharacter
LfEQU0ah;linefeed
.STACK4096;reserve4096-bytestack
.DATA
prompt1BYTE"Thisprogramwillchecka.fromastring,andoutputthepositionofthe.",cr,lf
BYTE"Enterastring:
",cr,Lf,0
stringBYTE80DUP(?
)
answer1BYTE"Thestringnotexistthecharacter.",cr,Lf,0
answer2BYTEcr,lf,"Thepostionofthe.is:
"
PosBYTE6DUP(?
),0
.CODE
_start:
outputprompt1
inputstring,80;readstring
leaeax,string
pusheax
callstrpos
INVOKEExitProcess,0;exitwithreturncode0
strposPROCNEAR32
pushebp
movebp,esp
pushedi
movedi,[ebp+8]
movebx,-1
moval,'.'
movecx,0
cld
Forcount:
cmpBYTEPTR[edi],0
jeendfor
incecx
scasb
jneForcount
Found:
movebx,ecx
dtoaPos,ebx
outputanswer2
jmpForcount
endfor:
cmpebx,0
jgL2
L1:
outputanswer1
L2:
popedi
popebp
ret4
strposENDP
PUBLIC_start
END
组
内
分
工
(
可
选
)
实
验
结
果
分
析
及
心
得
体
会
实验截图
心得体会
通过本次试验,我基本掌握了串的操作,以及对源串和目标串的处理。
成
绩
评
定
教师签名:
年月日