汇编实验报告.docx
- 文档编号:8186778
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:16
- 大小:59.08KB
汇编实验报告.docx
《汇编实验报告.docx》由会员分享,可在线阅读,更多相关《汇编实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
汇编实验报告
年级
2009
班号
组号
学号
专业
软件工程
姓名
实验名称
分支与循环程序设计
实验室
9203
实
验
目
的
或
要
求
掌握分支程序设计的原理和方法,重点掌握各种分支程序的形成和判断条件二产生的程序段的设计方法和技巧
掌握循环程序设计的原理和方法,重点掌握循环程序结构的形式和常用循环程序的控制方法和技巧
实
验
原
理
(
算
法
流
程
)
.386
.MODELFLAT
INCLUDEio.h
ExitProcessPROTONEAR32stdcall,dwExitCode:
DWORD
crEQU0dh;carriagereturncharacter
LfEQU0ah
maxNbrsEQU100;linefeedcharacter
.STACK4096;reserve4096-bytestack
.DATA;reservestoragefordata
prompt0BYTE"寻找另一个数字?
(y/n)",0
prompt1BYTE"寻找?
",0
arraydword5,10,20,-10,20
keyworddword?
countdword?
nbrEltsdword5
labelkeybyte11dup(?
),0
inarraybyte"是元素",cr,lf,0
Notarraybyte"不在数组中",cr,lf,0
.CODE
_start:
outputprompt1;输入关键字
inputlabelkey,11
atodlabelkey
movkeyword,eax
movcount,0
leaebx,array;将关键字加在数组最后
moveax,nbrelts
imuleax,4
addebx,eax
moveax,keyword
mov[ebx],eax
leaebx,array;取数组地址从头开始扫描
whileloop:
inccount
moveax,[ebx]
cmpeax,keyword;判断数组元素是否与关键值相等
jeendwhileloop
addebx,4;不等继续找下一个元素ebx+4
jmpwhileloop
endwhileloop:
movecx,count;判断是否是在数组外找到
cmpecx,nbrElts
jgNotin
moveax,[ebx]
outputlabelkey
outputinarray;如果是在数组里找到,输出在数组的信息
jmpnext
Notin:
outputNotarray;如果是在数组外找到,输出不在数组的信息
next:
outputprompt0
inputkeyword,11
leaebx,keyword
cmpbyteptr[ebx],'n';判断是否进行下一轮的查找如果输入n/N退出循环
jeend_it
cmpbyteptr[ebx],'N'
jeend_it
outputprompt1
inputlabelkey,11
atodlabelkey
movkeyword,eax
movcount,0
leaebx,array
moveax,nbrelts
imuleax,4
addebx,eax
moveax,keyword
mov[ebx],eax
leaebx,array
jmpwhileloop
end_it:
INVOKEExitProcess,0
PUBLIC_start
END
组
内
分
工
(
可
选
)
实
验
结
果
分
析
及
心
得
体
会
成
绩
评
定
教师签名:
年月日
年级
2009
班号
组号
学号
专业
软件工程
姓名
实验名称
子程序设计
实验室
9203
实
验
目
的
或
要
求
掌握子程序设计的原理和方法,重点掌握子程序编写和调用过程以及堆栈操作和参数以及局部变量的概念
实
验
原
理
(
算
法
流
程
)
.386
.MODELFLAT
INCLUDEio.h
ExitProcessPROTONEAR32stdcall,dwExitCode:
DWORD
crEQU0dh;carriagereturncharacter
LfEQU0ah
maxNbrsEQU100;linefeedcharacter
.STACK4096;reserve4096-bytestack
.DATA;reservestoragefordata
prompt1BYTE"pleaseinputthefisstnumber:
",cr,Lf,0
prompt2BYTEcr,Lf,"pleaseinputthesecondnumber",cr,Lf,0
prompt3BYTE"pleaseinputthethirdnumber",cr,Lf,0
promaxbyte"themaxnumberis"
labelvaluebyte11dup(?
),0
number1dword?
number2dword?
number3dword?
.CODE
Max3procNEAR32
pushebp;建立堆栈
movebp,esp
pushebx;保存ebx
moveax,[ebp+16];将第一个数送给eax
movebx,[ebp+12];将第二个数送给ebx
cmpeax,ebx;比较eax与ebx
jnlcmp_num3
moveax,ebx;eax cmp_num3: movebx,[ebp+8];将第三个数送给ebx cmpeax,ebx;比较eax与ebx jnlendpro moveax,ebx;eax endpro: popebx;恢复ebx popebp;恢复ebp ret Max3ENDP _start: outputprompt1;输入第一个数 inputlabelvalue,11 atodlabelvalue movnumber1,eax pushnumber1;将第一个数值入栈 outputprompt2;输入第二个数 inputlabelvalue,11 atodlabelvalue movnumber1,eax pushnumber2;将第二个数值入栈 outputprompt3;输入第三个个数 inputlabelvalue,11 atodlabelvalue movnumber3,eax pushnumber3;将第三个数值入栈 callMax3 addesp,12;将堆栈指针加12使之平衡 dtoalabelvalue,eax;输出最大值 outputpromax INVOKEExitProcess,0 PUBLIC_start END (写不完时,可另加附页。 ) 组 内 分 工 ( 可 选 ) 实 验 结 果 分 析 及 心 得 体 会 成 绩 评 定 教师签名: 年月日 年级 2009 班号 组号 学号 专业 软件工程 姓名 实验名称 串处理程序设计 实验室 9203 实 验 目 的 或 要 求 掌握串操作指令的用法,注意DF标志位以及源串,目标串的的存储和改变 实 验 原 理 ( 算 法 流 程 ) .386 .MODELFLAT INCLUDEio.h ExitProcessPROTONEAR32stdcall,dwExitCode: DWORD crEQU0dh;carriagereturncharacter LfEQU0ah maxNbrsEQU100;linefeedcharacter .STACK4096;reserve4096-bytestack .DATA;reservestoragefordata prompt1BYTE"pleaseinputthesentence",cr,Lf,0 prompt2BYTEcr,Lf,"pleaseinputthewordyouwanttoreplace",cr,Lf,0 prompt3BYTE"pleaseinputthenewword",cr,Lf,0 displaybytecr,lf,"thestringis..",cr,lf sentenceBYTE80dup(? ) replacebyte10dup(? ) newwordbyte10dup(? ) .CODE exchangeprocNEAR32 pushebp movebp,esp pushedi pushesi pusheax;句子长度 pushebx; pushecx;替换的单词长度 pushedx;新单词长度 pushf movedi,[ebp+16] movesi,[ebp+12] cld moveax,0 movecx,0 movedx,0 movebx,[ebp+16];求句子长度 while1: cmpbyteptr[ebx],0 jeendwhile1; inceax incebx jmpwhile1 endwhile1: movebx,[ebp+12];求被替换单词的长度 while2: cmpbyteptr[ebx],0 jeendwhile2; incecx incebx jmpwhile2 endwhile2: movebx,[ebp+8];求新单词长度 while3: cmpbyteptr[ebx],0 jeendwhile3; incedx incebx jmpwhile3 endwhile3: movebx,ecx whiles: cmpbyteptr[edi],0 jeendwhiles; movecx,ebx jecxzendcompare compare: cmpsb jneendcompare loopcompare endcompare: cmpecx,0 jnecase2 case1: movesi,edi subedi,ebx whileNoNull: cmpbyteptr[esi],0;删除单词 jeendwhileNoNull movsb incecx jmpwhileNoNull endwhileNoNull: movbyteptr[edi],0 movesi,edi addedi,edx std;移位 incecx jecxzendmov mov1: movsb loopmov1 endmov: cld movesi,edi subesi,edx incesi movedi,esi movesi,[ebp+8];复制单词 movecx,edx repmovsb case2: cmpbyteptr[edi],0 jeendwhiles movesi,[ebp+12] jmpwhiles endwhiles: popf popedx popecx popebx popeax popesi popedi popebp ret12 exchangeENDP _start: outputprompt1;输入句子 inputsentence,80 outputdisplay leaeax,sentence pusheax outputprompt2;输入要被替换的单词 inputreplace,10 leaeax,replace pusheax outputprompt3;输入新单词 inputnewword,10 leaeax,newword pusheax callexchange outputdisplay;输出处理后的结果 INVOKEExitProcess,0 PUBLIC_start END (写不完时,可另加附页。 ) 组 内 分 工 ( 可 选 ) 实 验 结 果 分 析 及 心 得 体 会 成 绩 评 定 教师签名: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 实验 报告