中南民族大学汇编实验报告.docx
《中南民族大学汇编实验报告.docx》由会员分享,可在线阅读,更多相关《中南民族大学汇编实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
中南民族大学汇编实验报告
中南民族大学
学生实验报告
院系:
计算机科学学院
专业:
计算机科学与技术
年级:
2012
课程名称:
80x86汇编语言
学号:
*****
姓名:
**********
2013年12月16日
年级
2012
班号
学号
专业
计算机科学与技术
姓名
实验名称
顺序程序设计
实验
类型
设计型
综合型
创新型
实
验
目
的
或
要
求
实验目的
掌握80X8632位汇编语言程序设计的基本步骤,分析问题,确立算法。
根据程序算法流程选择合适的指令编制汇编语言源程序。
要求
(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码,然后根据ASCII码的加减得到输入字符的前一个和后一个字符
成
绩
评
定
教师签名:
年月日
备注:
源代码附后,源代码要求有注释说明
年级
2012
班号
学号
专业
计算机科学与技术
姓名
实验名称
分支程序设计
实验
类型
设计型
综合型
创新型
实
验
目
的
或
要
求
目的
掌握分支程序设计的原理和方法,重点掌握各种分支程序中形成和判断条件而产生的程序段的设计方法和技巧。
要求
(1)如何产生条件
(2)如何对条件进行判断
(3)如何实现分支
实
验
原
理
(
算
法
流
程
)
题目:
计算给定函数值
.386
.MODELFLAT
ExitProcessPROTONEAR32stdcall,dwExitCode:
DWORD
INCLUDEio.h;headerfileforinput/output
crEQU0dh;carriagereturncharacter
LfEQU0ah;linefeed
.STACK4096;reserve4096-bytestack
.DATA;reservestoragefordata
stringBYTE20DUP(?
)
promptBYTE"Thisprogramistojudgethesignoftwonumber",cr,lf
BYTE"EntertheValuefornumber:
",0
resultBYTEcr,Lf,"Theresultis"
valueBYTE6DUP(?
)
BYTEcr,Lf,0
.CODE;startofmainprogramcode
_start:
movecx,2
movebx,0
Done:
outputprompt;promptforfirstnumber
inputstring,20;readASCIIcharacters
atodstring;converttointeger
cmpeax,0;storeinmemory
jnlL1
jmpL2
(写不完时,可另加附页。
)
组
内
分
工
(
可
选
)
L1:
incebx
L2:
dececx
cmpecx,0
jeendFor
jmpDone
endFor:
decebx
dtoavalue,ebx
outputresult
INVOKEExitProcess,0;exitwithreturncode0
PUBLIC_start;makeentrypointpublic
END;endofsourcecode
实
验
结
果
分
析
及
心
得
体
会
要掌握分支程序的实现,考虑到等于0的时候分支的划分,输出正确的函数值
成
绩
评
定
教师签名:
年月日
备注:
源代码附后,源代码要求有注释说明
年级
2012
班号
学号
专业
计算机科学与技术
姓名
实验名称
循环程序设计
实验
类型
设计型
综合型
创新型
实
验
目
的
或
要
求
目的
掌握循环程序设计的原理和方法,重点掌握循环程序结构的形式和常用循环程序的控制方法和技巧。
要求
(1)置循环参数的初值
(2)循环体构成
(3)如何实现循环控制
实
验
原
理
(
算
法
流
程
)
题目:
用表格形式显示ASCII字符
.386
.MODELFLAT
ExitProcessPROTONEAR32stdcall,dwExitCode:
DWORD
INCLUDEio.h;
crEQU0dh;
LfEQU0ah;
.STACK4096;
.DATA;reservestoragefor
prompt1BYTE"ThisprogramistodisplaythecharacterofASCIIfrom10hto100h",cr,lf,0
prompt2BYTElf,0
valueBYTE?
BYTE'',0
.CODE;startofmainprogramcode
_start:
outputprompt1
movvalue,10h
moveax,10h
movecx,16;promptforfirstnumber
whilepos:
cmpeax,100h
jgendwhile
outputvalue
incvalue
inceax
Loopwhilepos
(写不完时,可另加附页。
)
组
内
分
工
(
可
选
)
forcount:
outputprompt2
movecx,16
cmpeax,100h
jngwhilepos
endwhile:
INVOKEExitProcess,0;exitwithreturncode0
PUBLIC_start;makeentrypointpublic
END;endofsourcecode
实
验
结
果
分
析
及
心
得
体
会
显示ASCII码的所有字符时应是100h,而不是10h,否则会导致输出字符少
成
绩
评
定
教师签名:
年月日
备注:
源代码附后,源代码要求有注释说明
年级
2012
班号
学号
专业
计算机科学与技术
姓名
实验名称
子程序设计
实验
类型
设计型
综合型
创新型
实
验
目
的
或
要
求
目的
掌握子程序设计的原理和方法,重点掌握子程序编写和调用的过程以及堆栈操作和参数以及局部变量的概念。
要求
(1)编写子程序
(2)在主程序中调用子程序
(3)实现主程序与子程序的参数传递
实
验
原
理
(
算
法
流
程
)
题目:
求X的阶乘值
.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
班号
学号
专业
计算机科学与技术
姓名
实验名称
串操作指令的使用
实验
类型
设计型
综合型
创新型
实
验
目
的
或
要
求
目的
掌握串操作指令的用法,注意DF标识位以及源串、目标串的存储和改变。
要求
结合前面所学知识,综合进行串操作指令的使用。
实
验
原
理
(
算
法
流
程
)
题目:
设有一字符串已存放在STRBUF为首址的数据区中,编一程序找出其中的′.′字符,并将其存放地址输出。
.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
实
验
结
果
分
析
及
心
得
体
会
成
绩
评
定
教师签名:
年月日
备注:
源代码附后,源代码要求有注释说明