中南民族大学汇编实验报告Word下载.docx
《中南民族大学汇编实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《中南民族大学汇编实验报告Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
设计型
综合型
创新型
实
验
目
的
或
要
求
实验目的
掌握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"
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
movchar3,al
outputlabel1
INVOKEExitProcess,0;
exitwithreturncode0
PUBLIC_start
END
结
果
析
及
心
得
体
会
要掌握将字符转换成ASCII码,然后根据ASCII码的加减得到输入字符的前一个和后一个字符
成
绩
评
定
教师签名:
年月日
备注:
源代码附后,源代码要求有注释说明
分支程序设计
目的
掌握分支程序设计的原理和方法,重点掌握各种分支程序中形成和判断条件而产生的程序段的设计方法和技巧。
(1)如何产生条件
(2)如何对条件进行判断
(3)如何实现分支
计算给定函数值
.DATA;
reservestoragefordata
stringBYTE20DUP(?
promptBYTE"
Thisprogramistojudgethesignoftwonumber"
EntertheValuefornumber:
0
resultBYTEcr,Lf,"
Theresultis"
valueBYTE6DUP(?
BYTEcr,Lf,0
.CODE;
startofmainprogramcode
movecx,2
movebx,0
Done:
outputprompt;
promptforfirstnumber
inputstring,20;
atodstring;
converttointeger
cmpeax,0;
storeinmemory
jnlL1
jmpL2
L1:
incebx
L2:
dececx
cmpecx,0
jeendFor
jmpDone
endFor:
decebx
dtoavalue,ebx
outputresult
PUBLIC_start;
makeentrypointpublic
END;
endofsourcecode
要掌握分支程序的实现,考虑到等于0的时候分支的划分,输出正确的函数值
循环程序设计
掌握循环程序设计的原理和方法,重点掌握循环程序结构的形式和常用循环程序的控制方法和技巧。
(1)置循环参数的初值
(2)循环体构成
(3)如何实现循环控制
用表格形式显示ASCII字符
reservestoragefor
ThisprogramistodisplaythecharacterofASCIIfrom10hto100h"
cr,lf,0
prompt2BYTElf,0
valueBYTE?
BYTE'
'
movvalue,10h
moveax,10h
movecx,16;
whilepos:
cmpeax,100h
jgendwhile
outputvalue
incvalue
inceax
Loopwhilepos
forcount:
outputprompt2
movecx,16
jngwhilepos
endwhile:
显示ASCII码的所有字符时应是100h,而不是10h,否则会导致输出字符少
子程序设计
掌握子程序设计的原理和方法,重点掌握子程序编写和调用的过程以及堆栈操作和参数以及局部变量的概念。
(1)编写子程序
(2)在主程序中调用子程序
(3)实现主程序与子程序的参数传递
求X的阶乘值
.STACK40960;
prompt1BYTE'
Thisprogramistocalculateanumbersfactorial'
Pleaseinputanumberthatisfrom0to10'
resultBYTE'
Theansweris'
valueBYTE11DUP(?
inputstring,11
atodstring
cmpeax,0
jlL1
cmpeax,10
jgL1
pusheax
callFACT
FACTPROCNEAR32
pushebp
movebp,esp
moveax,[ebp+8]
movecx,eax
jeL2
cmpeax,1
forcount:
mulecx
loopforcount
jmpL3
moveax,1
L3:
dtoavalue,eax
popebp
ret4
FACTENDP
串操作指令的使用
掌握串操作指令的用法,注意DF标识位以及源串、目标串的存储和改变。
结合前面所学知识,综合进行串操作指令的使用。
设有一字符串已存放在STRBUF为首址的数据区中,编一程序找出其中的′.′字符,并将其存放地址输出。
.DATA
Thisprogramwillchecka.fromastring,andoutputthepositionofthe."
Enterastring:
cr,Lf,0
stringBYTE80DUP(?
answer1BYTE"
Thestringnotexistthecharacter."
cr,Lf,0
answer2BYTEcr,lf,"
Thepostionofthe.is:
PosBYTE6DUP(?
),0
.CODE
inputstring,80;
readstring
leaeax,string
callstrpos
strposPROCNEAR32
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
strposENDP
PUBLIC_start
END