汇编程序baogao.docx
《汇编程序baogao.docx》由会员分享,可在线阅读,更多相关《汇编程序baogao.docx(26页珍藏版)》请在冰豆网上搜索。
汇编程序汇编程序baogao院系:
计算机科学学院专业:
计算机科学与技术年级:
2010级课程名称:
汇编语言程序设计报告学号:
10061065姓名:
徐丽指导教师:
雷建云2012年6月21日年级2010级班号一大班(3)小班学号10061065专业计算机科学与技术姓名徐丽实验名称顺序程序设计实验类型设计型综合型创新型实验目的或要1.题目:
华氏温度转换为摄氏温度2.实验要求:
程序从键盘接收用户键入的华氏温度值,根据转换公式运算后,先是对应的摄氏温度值。
在用户输入和显示转换结果之前都要有相应的提示。
3.提示:
首先在数据段中定义提示信息,华氏温度值变量TemperatureF和摄氏温度值变量TemperatureC。
当用户输入华氏温度值之后,进行运算,然后显示计算结果。
求4.转换公式:
C=(5/9)*(F-32);其中F是华氏温度,C是摄氏温度值。
实验原理(算法流程);programtoconvertFahrenheittemperaturetoCelsius;usesformula(F-32)*5/9;author:
R.Detmer;date:
revised9/97.386.MODELFLATExitProcessPROTONEAR32stdcall,dwExitCode:
DWORDINCLUDEio.hcrEQU0dh;carriagereturncharacterLfEQU0ah;linefeedcharacter.STACK4096;reserve4096-bytestack.DATA;reservestoragefordataPrompt1BYTECR,LF,ThisprogramwillconvertaFahrenheitBYTEtemperaturetotheCelsiusscale,cr,Lf,LfBYTEEnterFahrenheittemperature:
0ValueBYTE6DUP(?
)AnswerBYTECR,LF,ThetemperatureisTemperatureBYTE6DUP(?
)BYTECelsius,cr,Lf,0.CODE;startofmainprogramcode_start:
Prompt:
outputPrompt1;promptforFahrenheittemperatureinputValue,6;readASCIIcharactersatoiValue;converttointegersubax,32movbx,5imulbxaddax,4movbl,9idivblmovah,0itoaTemperature,ax;converttoASCIIcharactersoutputAnswer;outputlabelandresultPUBLIC_start;makeentrypointpublicEND(写不完时,可另加附页。
)实验结果分析及心得体会心得体会:
通过写这个程序,我对汇编语言这门学科有了一个大致的了解:
1.确立了一个整体思想:
掌握了汇编语言程序设计的基本步骤,分析问题,确立算法,然后根据算法流程选择合适的指令来编制汇编源程序。
2.熟练掌握了一些简单的基本指令的操作,如加减乘除法的指令。
3.对程序的汇编,链接和运行也有了一个清晰地认识。
4.对其中的目的操作数和源操作数也初步有了一定的了解。
成绩教师签名:
评定年月日年级2010级班号一大班(3)小班学号10061065专业计算机科学与技术姓名徐丽实验名称分支程序设计实验类型设计型综合型创新型实验目的或要求1.题目:
计算立方值2.实验要求:
从键盘输入0到9中的任一个自然数x,求其立方值。
若输入的字符不是0至9之间的数字,则显示错误信息,并要求重新输入。
要求有信息提示用户按照要求输入字符串,三类字符的个数分别在三行显示,并指明是哪类字符。
实验原理(算法流;Exampleassemblylanguageprogram-power;Author:
R.Detmer;Date:
revised7/97.386.MODELFLATExitProcessPROTONEAR32stdcall,dwExitCode:
DWORDINCLUDEio.h;headerfileforinput/outputcrEQU0dh;carriagereturncharacter程)LfEQU0ah;linefeed.STACK4096;reserve4096-bytestack.DATAprompt1bytecr,lf,pleaseenteranumber:
0valuebyte10dup(?
)answerbytecr,lf,thepowerispowerDWORD6DUP(?
)BYTECR,LF,0prompt2byteerror,pleaseinputanumberagain:
0.CODE_start:
prompt:
do:
outputprompt1inputvalue,10atoivaluecmpeax,0jlenddocmpeax,9jaenddomovebx,eaximulebx,eaximulebx,eaxdtoapower,ebxoutputanswerjmpexitenddo:
outputprompt2jmpdoexit:
INVOKEExitprocess,0PUBLIC_startEND(写不完时,可另加附页。
)实验结果分析及心得体会心得体会:
1.掌握了分支程序设计的原理和方法,掌握了各种分支程序中形成和判断条件而产生的程序段的设计方法和技巧。
2.对条件转移和无条件转移指令jmp的运用有了更深层次的了解。
3.熟练掌握了其中的比较指令,if结构以及循环结构的实现。
成绩评定教师签名:
年月日年级2010级班号一大班(3)小班学号10061065专业计算机科学姓名徐丽与技术实验名称循环程序设计实验类型设计型综合型创新型实验目的或要求1.题目:
显示九九乘法表2.实验要求:
以9行9列的形式显示九九乘法表,显示下三角格式。
3.提示:
(1)建立一个双重循环,外循环控制显示各行,内循环显示每行中的各列,其中外循环循环次数为9,内循环循环次数等于当前的行数。
(2)每次显示项可以由以下几部分组成:
当前行数值”*”当前列数值“=”当前行数值*当前列数值每行所有项显示完成后显示空行串(回车符和换行数)。
实验原理(算法流程).386.modelflatExitProcessprotonear32stdcall,dwexitcode:
dwordincludeio.hcrequ0dhLfequ0ahbsequ08h.dataprompt1byte这个程序用于输出9*9乘法表,Lf,Lf,0changeLinebyteLf,Lf,0num1byte4dup(?
)sign1bytecr,Lf,*byte0num2byte4dup(?
)sign2bytecr,Lf,=byte0resultbyte4dup(?
)bytecr,Lf,0tempword0.code_start:
movax,0;被乘数movbx,0;乘数movcx,0;结果movdx,0;循环计数movtemp,0;计数备份whileFirst:
;输入被乘数outputchangeLine;换行incaxincdxmovtemp,dx;用temp临时存放dx,因为执行mul时,dx会改变cmpax,9jgEndPro;输出完毕,结束程序movbx,0whileSecond:
incbxcmpbx,dx;判断该行是否输出完毕jgwhileFirstitoanum1,axitoanum2,bxmulbxitoaresult,axmovdx,temp;还原dx(写不完时,可另加附页。
)实验结果分析及心得outputnum13;输出算式outputnum25;因为被乘数只有1位outputresult4jmpwhileSecondEndPro:
invokeExitProcess,0public_startend体会心得体会:
1.掌握循环程序设计的原理和方法,循环程序结构的形式和常用循环结构的控制方法和技巧。
2.熟练运用条件转移指令,比较指令以及if结构。
3.熟练运用基本的乘法指令,inc加一指令。
成绩评定教师签名:
年月日年级2010级班号一大班(3)小班学号10061065专业计算机科学与技术姓名徐丽实验名称子程序设计实验类型设计型综合型创新型实1.题目:
找出100到200内所有的素数验目的或要求2.实验要求:
将100到200内所有的素数找出来并显示值,要求每行显示5个素数。
3.提示:
素数的判定方法前面已经给出,要求素数的判定算法用子程序来实现,子程序在判定数是否为素数后有不同的返回参数。
实验原理(算法流程).386.MODELFLATExitProcessPROTONEAR32stdcall,dwExitCode:
DWORDINCLUDEio.hcrEQU0dhLfEQU0ah.STACK4096.DATApthhBYTEcr,Lf,0stringBYTE13DUP(0)ptkgBYTE,0ptstartBYTE,0ptendBYTE,0;pauseptBYTEcr,Lf,Lf,LfBYTE-BYTEcr,LfBYTEPressEntertoExit.BYTEcr,Lf,0.CODENUMBERXPROCNEAR32;numberinbx;numberoutbx(1YES,0NO);cx=i;NUMBERX_for_start:
pusheax;saveeaxmoveax,0pushecx;saveecxmovecx,0pushedx;saveedxmovedx,0NUMBERX_for_init:
movcx,2NUMBERX_for_check:
cmpcx,bxjeNUMBERX_for_endNUMBERX_for_calc:
movdx,0movax,bxdivcxcmpdx,0je_return0jmpNUMBERX_for_add_return0:
movbx,0;return0jmpNUMBERX_restoreNUMBERX_for_add:
inccxjmpNUMBERX_for_checkNUMBERX_for_end:
movbx,1;return1;NUMBERX_restore:
(写不完时,可另加附页。
)实验原理(算法流程)popedx;restoreedxpopecx;restoreecxpopeax;restoreeaxretNUMBERXENDPDTOAXPROCNEAR32dtoaxfor_start:
dtoaxfor_init:
pusheax;saveeaxpushebx;saveebxpushecx;saveecxpushedx;saveedxmoveax,0;al=ileaedx,stringdtoaxfor_check:
cmpeax,10jgdtoaxfor_endnodtoaxfor_calc:
movebx,edxaddebx,eaxcmpBYTEPTRebx,20hjnedtoaxfor_endokdtoaxfor_add:
inceaxjmpdtoaxfor_checkdtoaxfor_endok:
cmpeax,0jedtoaxfor_enddtoaxmov_start:
dtoaxmov_init:
movecx,0;eaxecxdtoaxmov_check:
cmpeax,11jedtoaxmov_enddtoaxmov_calc:
movebx,edxaddebx,eaxpusheax;saveteaxmoveax,edxaddeax,ecxpushecx;savetecxpopeax;restoreeaxdtoaxmov_add:
inceaxincecxjmpdtoaxmov_checkdtoaxmov_end:
movebx,edxaddebx,ecxmovBYTEPTRebx,0(写不完时,可另加附页。
)实验原理(算法流程)jmpdtoaxfor_enddtoaxfor_endno:
dtoaxfor_end:
popedxpopecxpopebxpopeaxretDTOAXENDP_start:
;eax=i;ecx=printf5n;edx=countfor_start:
for_init:
moveax,100movecx,1movedx,0for_check:
cmpeax,200jgfor_endfor_calc:
movbx,axcallNUMBERXcmpbx,0je_jmpprintf_printfit:
incedxincecxdtoastring,edxoutputptstartoutputstring+9outputptenddtoastring,eaxcallDTOAXoutputstringoutputptkgcmpecx,5jle_jmpprintfhh_printfhh:
outputpthhmovecx,1_jmpprintfhh:
_jmpprintf:
for_add:
inceaxjmpfor_checkfor_end:
outputpauseptinputstring,10INVOKEExitProcess,0PUBLIC_startEND(写不完时,可另加附页。
)实验结果分析及心得体会心得体会:
1.掌握了子程序设计的原理和方法,对子程序的调用过程以及堆栈的操作和参数的局部概念得到了加强。
2.对过程体,调用和返回这块有了更清晰的认识,熟练掌握了汇编语言中的一个要点。
3.对寄存器,存储器,堆栈的知识点再次运用达到温习巩固的效用。
成绩评定教师签名:
年月日年级2010级班号一大班(3)小班学号10061065专业计算机科学姓名徐丽与技术实验名称串操作指令的使用实验类型设计型综合型创新型实验目的或要求1.题目:
设有一字符串存放在以STRING为首址的数据区中,编一程序找出其中的”.”字符,并将其存放地址输出。
2.实验要求:
输入字符串,查找字符”.”所在的位置,并输出。
3.提示:
(1)如果字符串中不存在”.”字符则应该输出“notfound”。
(2)如果字符串中存在多个”.”字符,则应试着输出第一个”.”的位置,然后设法输出所有的”.”位置。
实验原理(算法流程).386.MODELFLATxitProcessPROTONEAR32stdcall,dwExitCode:
DWORDINCLUDEio.hcrEQU0dhLfEQU0ah.STACK4096.DATApromptBYTEcr,lf,pleaseenterastring:
0stringBYTE40DUP(?
)label1BYTEcr,lf,Thetitleis:
sumBYTE11DUP(?
).CODEstrlenPROCNEAR32pushebpmovebp,esppushfmoveax,0movebx,ebp+8whilechar:
cmpBYTEPTRebx,0jeendwhilecharinceaxincebxjmpwhilecharendwhilechar:
popfpopebpret4strlenENDP_start:
outputpromptinputstring,40leaeax,stringpusheaxcallstrlendtoasum,eaxoutputlabel1INVOKEExitProcess,0PUBLIC_startEND(写不完时,可另加附页。
)实验结果分析及心得体会心得体会:
1.掌握了串操作指令的用法。
2.对DF标识位以及源串,目的串的存储和改变有了更进一步的认识。
3.加强了对循环结构的实现内容的巩固。
4.学会了对栈的运用。
成绩评定教师签名:
年月日年级2010级班号一大班(3)小班学号10061065专业计算机科学与技术姓名徐丽实验名称位运算指令的使用实验类型设计型综合型创新型实验目的或要求1题目:
使用位操作指令实现双字长的数*42.实验要求:
已知DX中存放着双字长数的高16位,AX中存放着双字长数的低16位,先要求将整个双字长数*4,即左移2位。
3.提示:
AX中的高2位将移入DX中并作为低2位,AX中的低2位补0.实验原理(;Exampleassemblylanguageprogram-addstwonumbers;Author:
R.Detmer;Date:
revised7/97.386.MODELFLAT算法流程)ExitProcessPROTONEAR32stdcall,dwExitCode:
DWORDINCLUDEio.h;headerfileforinput/outputcrEQU0dh;carriagereturncharacterLfEQU0ah;linefeed.STACK4096;reserve4096-bytestack.DATA;reservestoragefordatastringBYTE20DUP(?
)numberWORD?
inputstrBYTEcr,Lf,pleaseinputalow16number:
0inputstr1BYTEcr,Lf,pleaseinputahigh16number:
0promptBYTEcr,Lf,Thisisthepreviousnumber:
0prompt1BYTEcr,Lf,Thisisthecurrentnumber:
resultsBYTE11DUP(?
)BYTEcr,Lf,0.CODE_start:
outputinputstrinputstring,20atodstringmovnumber,axoutputinputstr1inputstring,20atoistringmovdx,axmovax,numbershlddx,ax,2shledx,16shlax,3addedx,eaxoutputprompt1dtoaresults,edxoutputresultsINVOKEExitProcess,0;exitwithreturncode0PUBLIC_start;makeentrypointpublicEND;endofsourcecode(写不完时,可另加附页。
)实验结果分析及心得体会心得体会:
1.掌握了位指令的逻辑运算。
2.掌握了位指令的移位和循环移位指令操作。
3.对于汇编语言这门课程的学习,通过多次写程序,改程序,运行程序不断的操作实践,培养了一种良好的写程序的习惯,同时形成了一种良好的写代码的思想方式。
成绩评定教师签名:
年月日