汇编语言实验报告.docx

上传人:b****6 文档编号:16776448 上传时间:2023-07-17 格式:DOCX 页数:21 大小:71KB
下载 相关 举报
汇编语言实验报告.docx_第1页
第1页 / 共21页
汇编语言实验报告.docx_第2页
第2页 / 共21页
汇编语言实验报告.docx_第3页
第3页 / 共21页
汇编语言实验报告.docx_第4页
第4页 / 共21页
汇编语言实验报告.docx_第5页
第5页 / 共21页
汇编语言实验报告.docx_第6页
第6页 / 共21页
汇编语言实验报告.docx_第7页
第7页 / 共21页
汇编语言实验报告.docx_第8页
第8页 / 共21页
汇编语言实验报告.docx_第9页
第9页 / 共21页
汇编语言实验报告.docx_第10页
第10页 / 共21页
汇编语言实验报告.docx_第11页
第11页 / 共21页
汇编语言实验报告.docx_第12页
第12页 / 共21页
汇编语言实验报告.docx_第13页
第13页 / 共21页
汇编语言实验报告.docx_第14页
第14页 / 共21页
汇编语言实验报告.docx_第15页
第15页 / 共21页
汇编语言实验报告.docx_第16页
第16页 / 共21页
汇编语言实验报告.docx_第17页
第17页 / 共21页
汇编语言实验报告.docx_第18页
第18页 / 共21页
汇编语言实验报告.docx_第19页
第19页 / 共21页
汇编语言实验报告.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

汇编语言实验报告.docx

《汇编语言实验报告.docx》由会员分享,可在线阅读,更多相关《汇编语言实验报告.docx(21页珍藏版)》请在冰点文库上搜索。

汇编语言实验报告.docx

汇编语言实验报告

 

院系:

计算机科学学院

专业:

计算机科学与技术

年级:

2013级

课程名称:

汇编语言

学号:

姓名:

指导教师:

 

2014年12月24日

 

年级

2013级

班号

 学号

专业

计算机科学与技术

 姓名

实验

名称

计算给定数字的立方值

实验

类型

设计型

综合型

创新型

从键盘输入0至9中任意自然数x,求其立方值。

若输入的字符不是0至9之间的数字,则显示错误信息,并要求重新输入。

要求有信息提示输入数字、显示计算结果和提示输入错误。

 

 (对算法设计进行描述,变量定义和寄存器分配情况,画出程序流程图或给出伪代码)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(写不完时,可另加附页。

(给出测试过程和测试结果,并对实验结果进行分析。

心得体会可以写设计和实现整个过程中的心得)

教师签名:

年月日

 

 

;Program:

计算给定数字的立方值

;Author:

;Date:

.386

.MODELFLAT

ExitProcessPROTONEAR32stdcall,dwExitCode:

DWORD

INCLUDEio.h;headerfileforinput/output

crEQU0dh;carriagereturncharacter

LfEQU0ah;linefeed

.STACK4096;reserve4096-bytestack

.DATA;reservestoragefordata

prompt1BYTEcr,Lf,Lf,"Pleaseenteranumberfrom[0,9]:

",0

prompt2BYTEcr,Lf,Lf,"toolow,pleaseenteragain",0

prompt3BYTEcr,Lf,Lf,"toolow,pleaseenteragain",0

prompt4BYTEcr,Lf,Lf,"Exit?

",0

prompt5BYTEcr,Lf,lf,"Theresultis:

",0

stringinBYTE20DUP(?

targetDWORD?

CountOutBYTE6DUP(?

.CODE;startofmainprogramcode

_start:

untilDone:

outputprompt1;提示输入一个目标数

inputstringin,20;从键盘输入目标数

atodstringin;转换为整数

movtarget,eax;储存目标数

untilMatch:

cmptarget,0;目标数与零比较

jbLess;小于零跳转

cmptarget,9;目标数与9比较

jaGreater;大于9跳转

moveax,target;将目标数保存到eax寄存器

movebx,target;将目标数保存到ebx寄存器

 

 

imulebx;目标数的平方

imulebx;目标数的立方

jneendCompare;不等于则跳转

Less:

Outputprompt2;提示输入的整数太小

jneuntilDone;不等于则跳转

Greater:

Outputprompt3;提示输入的整数太小

jneuntilDone;不等于则跳转

endCompare:

dtoatarget,eax;将目标数的立方转换为ASCII码

outputprompt5;提示输出目标数的立方

outputtarget;输出目标数的立方

outputprompt4;提示是否继续计算其它整数的立方值

inputstringin,20;从键盘输入任意一个字符

cmpstringin,'y';比较目标字符与’y’

jeendUntilDone;不等于则跳转

cmpstringin,'Y';比较目标字符与’Y’

jneuntilDone;不等于则跳转

endUntilDone:

INVOKEExitProcess,0;exitwithreturncode0

PUBLIC_start;makeentrypointpublic

END;endofsourcecode

年级

2013级

班号

 学号

专业

计算机科学与技术

 姓名

实验

名称

找出前100个素数

实验

类型

设计型

综合型

创新型

将前100个素数找出并显示值,要求每行显示5个素数。

 

 (对算法设计进行描述,变量定义和寄存器分配情况,画出程序流程图或给出伪代码)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(写不完时,可另加附页。

(给出测试过程和测试结果,并对实验结果进行分析。

心得体会可以写设计和实现整个过程中的心得)

教师签名:

年月日

 

 

;Program:

找出前一百个素数

;Author:

;Date:

.386

.MODELFLAT

ExitProcessPROTONEAR32stdcall,dwExitCode:

DWORD

INCLUDEio.h;headerfileforinput/output

crEQU0dh;carriagereturncharacter

LfEQU0ah;linefeed

maxNbrsEQU110;

.STACK4096;reserve4096-bytestack

.DATA;reservestoragefordata

directionsBYTEcr,Lf,'thisprogramwillshow100primenumbers',0

changeBYTEcr,Lf,0

nbrArrayDWORDmaxNbrsDUP(0)

PrimeCountDWORD?

candidateDWORD?

indexDWORD?

tempDWORD?

outValueBYTE11DUP(?

),0

endlabelsBYTEcr,Lf,'endtheprogram',0

.CODE;startofmainprogramcode

_start:

leaebx,nbrArray;取出数组的首地址

moveax,2;将2复制到eax寄存器

mov[ebx],eax;将eax寄存器的值复制到数组中

addebx,4;取出数组下一项的地址

moveax,3;将3复制到eax寄存器

mov[ebx],eax;将eax寄存器的值复制到数组中

addebx,4;取出数组下一项的地址

movPrimeCount,2;将2复制到PrimeCount

movcandidate,4;将4复制到candidate

whileloop:

cmpPrimeCount,100;PrimeCount与100比较

 

 

jnbendwhile;不大于则跳转

movecx,2;将2复制到ecx寄存器

whilefind:

cmpecx,candidate;ecx寄存器与candidate比较

jnbendfind;不大于则跳转

moveax,candidate;将candidate复制到eax寄存器

cdq;扩展eax寄存器

divecx;将eax寄存器的值除以ecx寄存器

cmpedx,0;edx寄存器的值与零比较

jeendfind;等于则跳转

incecx;ecx寄存器自增加一

jmpwhilefind;跳转

endfind:

cmpecx,candidate;ecx寄存器与candidate比较

jnecontinue;不等于则转移

moveax,candidate;将candidate的值复制到eax寄存器

mov[ebx],eax;将eax寄存器的值复制到数组中

addebx,4;取出数组下一项的地址

incPrimeCount;PrimeCount自增加一

continue:

inccandidate;candidate自增加一

jmpwhileloop;跳转

endwhile:

movindex,0;将零复制到index

leaebx,nbrArray;取出数组首地址

movtemp,5;将5复制到temp

whileoutput:

cmpindex,100;index与100比较

jnbendwhileoutput;不大于跳转

dtoaoutValue,[ebx];将数组元素的值转换为ASCII码

outputoutValue;输出数组元素

incindex;index自增加一

moveax,index;将index的值复制到eax寄存器

cdq;扩展eax寄存器

divtemp;将eax寄存器的值除以temp

cmpedx,0;edx寄存器的值与零比较

jnegoon;不等于则跳转

outputchange;输出换行,换段

goon:

addebx,4;取出数组中下一项的地址

jmpwhileoutput;跳转

 

 

endwhileoutput:

outputendlabels;输出结束语句

INVOKEExitProcess,0;exitwithreturncode0

PUBLIC_start;makeentrypointpublic

END;endofsourcecode

年级

2013级

班号

计科二班

 学号

专业

计算机科学与技术

 姓名

实验

名称

找出100~200内所有的素数

实验

类型

设计型

综合型

创新型

将100~200内所有的素数找出并显示值,要求每行显示5个素数。

 

(对算法设计进行描述,变量定义和寄存器分配情况,画出程序流程图或给出伪代码)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(写不完时,可另加附页。

(给出测试过程和测试结果,并对实验结果进行分析。

心得体会可以写设计和实现整个过程中的心得)

教师签名:

年月日

 

 

;Program:

将100~200内所有的素数找出并显示值,要求每行显示5个素数

;Author:

;Date:

.386

.MODELFLAT

ExitProcessPROTONEAR32stdcall,dwExitCode:

DWORD

INCLUDEio.h;headerfileforinput/output

crEQU0dh;carriagereturncharacter

LfEQU0ah;linefeed

.STACK4096;reserve4096-bytestack

.DATA;reservestoragefordata

promptbyte"thefollowingaresomespecialnumbersbetween100and200:

",Lf

numberbyte16dup(?

byte"",0

linefeedbyteLf,0

.CODE;startofmainprogramcode

checkprocnear32

pushebp;保存寄存器

movebp,esp;建立堆栈

pushad;保存所有的寄存器

pushf;保存标志位

movebx,2;将2复制到ebx寄存器

moveax,[ebp+8];将[ebp+8]的值复制到eax寄存器

cdq;扩展被除数

divebx;将eax寄存器的值除以ebx寄存器

movecx,eax;将eax寄存器的值复制到ecx寄存器

loop2:

moveax,[ebp+8];将[ebp+8]的值复制到eax寄存器

cdq;扩展被除数

divebx;将eax寄存器的值除以ebx寄存器

cmpedx,0;edx寄存器的值与零比较

jebreak;等于则跳转

incebx;ebx寄存器自增加一

 

 

cmpebx,ecx;ebx寄存器的值与ecx寄存器比较

jbloop2;不大于则跳转

jmpendloop2;跳转

break:

movdwordptr[ebp+8],0;将零复制到强制转换的双字类型[ebp+8]中

endloop2:

popf;恢复标志位

popad;恢复所有寄存器

popebp;恢复ebp

ret;返回

checkendp;

_start:

outputprompt;输入提示语句

movcx,0;将零复制到cx寄存器

movebx,100;将100复制到ebx寄存器

loop1:

pushebx;保存寄存器

callcheck;调用check函数

popeax;恢复寄存器

cmpeax,0;eax寄存器的值与零比较

jebutton;等于则跳转

dtoanumber,ebx;ebx寄存器的值转换为ASCII码

outputnumber;输出number的值

inccx;cx寄存器自增加一

cmpcx,5;cx寄存器与5比较

jbbutton;不大于则跳转

outputlinefeed;输出换行

movcx,0;将零复制到cx寄存器

button:

incebx;ebx寄存器自增加一

cmpebx,201;ebx寄存器与201比较

jeendloop1;等于则跳转

jmploop1;跳转

endloop1:

INVOKEExitProcess,0;exitwithreturncode0

PUBLIC_start;makeentrypointpublic

END;endofsourcecode

年级

2013级

班号

 学号

专业

计算机科学与技术

 姓名

实验

名称

将DX,AX中的双字长的数×4

实验

类型

设计型

综合型

创新型

已知DX中存放着双字长数的高16位,AX中存放着双子长数的低16位,现要求将整个双字长的数×4,亦即左移2位。

 

 (对算法设计进行描述,变量定义和寄存器分配情况,画出程序流程图或给出伪代码)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(写不完时,可另加附页。

(给出测试过程和测试结果,并对实验结果进行分析。

心得体会可以写设计和实现整个过程中的心得)

教师签名:

年月日

 

 

;Program:

将DX,AX中的双子长的数乘4

;Author:

;Date:

.386

.MODELFLAT

ExitProcessPROTONEAR32stdcall,dwExitCode:

DWORD

INCLUDEio.h;headerfileforinput/output

crEQU0dh;carriagereturncharacter

LfEQU0ah;linefeed

.STACK4096;reserve4096-bytestack

.DATA;reservestoragefordata

prompt1bytecr,lf,"PleaseEnteranumber:

",0

prompt2byte"numbertomul4----theresultofis:

",0

numberdword40dup(?

.CODE;startofmainprogramcode

_start:

outputprompt1;提示输入任意的一个数

inputnumber,40;输入一个数

atodnumber;转换双字类型数字

movnumber,eax;将eax寄存器的值复制到number

moveax,number;将number复制到eax寄存器

movedx,eax;将eax寄存器的值复制到edx寄存器

movcl,16;将16复制到cl寄存器

shredx,cl;将edx寄存器的值右移16位

movbx,ax;将ax寄存器的值复制到bx寄存器

movcl,2;将2复制到cl寄存器

shldx,cl;将dx寄存器的值左移2位

shlax,cl;将ax寄存器的值左移2位

movcl,0eh;将十六进制的14复制到cl寄存器

shrbx,cl;将bx寄存器右移2位

ordx,bx;

 

 

movbx,ax;将ax寄存器的值复制到bx寄存器

movax,dx;将dx寄存器的值复制到ax寄存器

movcl,16;将16复制到cl寄存器

shleax,cl;将eax寄存器的值左移16位

movax,bx;将bx寄存器的值复制到ax寄存器

outputprompt2;输出结果提示语句

dtoanumber,eax;将eax寄存器的值转换为ASCII码

outputnumber;输出number的值

INVOKEExitProcess,0;exitwithreturncode0

PUBLIC_start;makeentrypointpublic

END;endofsourcecode

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2