汇编语言实验报告.docx

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

汇编语言实验报告.docx

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

汇编语言实验报告.docx

汇编语言实验报告

 

中南民族大学

 

学生实验报告

 

院系:

计算机科学学院

专业:

计算机科学与技术

年级:

2012级

课程名称:

汇编语言

学号:

2012213537

姓名:

郑凯伦

指导教师:

雷建云

 

2014年6月18日

 

年级

 2012

班号

 

1202班

 学号

 2012213537

专业

计算机科学与技术

 姓名

 郑凯伦

实验名称

实验2.1计算成绩总分和平均分

实验

类型

设计型

综合型

创新型

设计型

一、掌握顺序程序设计的基本方法和技巧,熟练使用基本的I/O宏

二、程序要结构化,简明、易读和易调试。

三、执行速度较快且占用存储空间少。

程序设计流程:

1. 程序接收用户键入的4个成绩,并计算出这4个成绩的总分和平均分数。

在用户键入每个成绩和显示总分和平均分数之前都要有相应的提示信息。

当用户输入的成绩不在[0,100]之间时,显示错误信息并重新等待正确输入。

2.首先在数据段中定义提示信息、累计总分变量sum和平均分数变量average。

程序一开始初始化sum值为0,当用户每输入一个成绩后累加到sum中。

4个成绩输入完成后,sum内的值除以4得到平均分数并保存到average中。

最后显示计算结果。

代码:

;Exampleassemblylanguageprogram--addsfournumberstocalculatetheirsaverage

;Author:

Karllen

;Date:

10/5/2014

.386

.MODELFLAT

ExitProcessPROTONEAR32stdcall,dwExitCode:

DWORD

INCLUDEio.h;headerfileforinput/output

crEQU0dh;carriagereturncharacter

LfEQU0ah;linefeed

.STACK4096;reserve4096-bytestack

.DATA

promot1BYTE"PleaseEnterfournumberstocaclutetheaverage",cr,Lf,0

promot2BYTE"PleaseEnteranumberfrom0to100!

",0

promot3BYTE"Thenumberisn'tfrom0to100,pleaseEnterarightnumber",0

valueBYTE16DUP(?

numberDWORD?

sumDWORD?

answerBYTE"Thefournumbers'averageis"

aveBYTE11DUP(?

BYTEcr,LF,0

.CODE

_start:

outputpromot1

movsum,0

movebx,0

firstagain:

outputpromot2

inputvalue,16

atodvalue

judge:

cmpeax,100;num>100转移重新输入

jgdoif

cmpeax,0;num<0转移重新输入

jldoif

jmpaddSum;满足0<=num<=100

doif:

outputpromot3

inputvalue,16

atodvalue

jmpjudge

addSum:

incebx

addsum,eax

cmpebx,4

jnefirstagain;endfirstagain

moveax,sum

cdq;将sum拓展为64位

idivebx

dtoaave,eax

outputanswer

INVOKEExitProcess,0;exitwithreturncode0

PUBLIC_start;makeentrypointpublic

END;endofsourcecode

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

年级

 2012级

班号

 

1202班

 学号

 2012213537

专业

计算机科学与技术

 姓名

 郑凯伦

实验名称

 实验3.1分类统计字符个数

实验

类型

设计型

综合型

创新型

设计型

一、掌握分支程序设计的原理和方法,重点掌握各种分支程序中形成和判断条件而产生的程序设计的设计方法和技巧。

二、掌握如何产生条件,如何对条件判断,如何实现分支。

 

程序设计流程:

1、程序接收用户输入的一行字符(字符个数不超过80个,该字符串以回车符结束),并按字母、数字及其它字符分类计数,然后将结果分别显示出来。

要求有信息提示用户按照要求输入字符串,三类字符的个数分别在三行显示,并指明是哪类字符。

;Exampleassemblylanguageprogram--

;Author:

Karllen

;Date:

revised5/2014

.386

.MODELFLAT

ExitProcessPROTONEAR32stdcall,dwExitCode:

DWORD

INCLUDEio.h;headerfileforinput/output

crEQU0dh;carriagereturncharacter

LfEQU0ah;linefeed

.STACK4096;reserve4096-bytestack

.DATA

promotBYTE"请输入一段字符串,分别统计字母,数字,和其他字符的个数",cr,Lf,0

valueBYTE1DUP(?

answerLetterBYTE"字母的个数:

"

letterBYTE11DUP(?

BYTEcr,Lf,0

aswerNumberBYTE"数字的个数:

"

numberBYTE11DUP(?

BYTEcr,Lf,0

answerOtherBYTE"其他字符的个数:

"

otherBYTE11DUP(?

BYTEcr,Lf,0

 

 .CODE

_start:

moveax,0

movebx,0

movecx,0

outputpromot

while:

inputvalue,1

cmpvalue,0dh

jeendWhile;如果回车则结束

cmpvalue,30h;30h=0

jlforOther;小于30h为字符

;下面执行大于等于30h

cmpvalue,3Ah;39h=9

jlforNumber;小于3Ah为数字

;下面执行大于等于3Ah

cmpvalue,41h;小于41h为字符

jlforOther;41h=A

;下面执行大于41h

cmpvalue,5Bh;小于5Bh为大写字母

jlforLetter;5Bh=|

;下面执行大于5Bh

cmpvalue,61h;61h=a

jlforOther

;下面执行大于61h

cmpvalue,7Bh;7Bh={

jlforLetter

;下面执行7Bh到结束

jmpforOther

forLetter:

inceax

jmpwhile

forNumber:

incebx

jmpwhile

forOther:

incecx

jmpwhile

 

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

 endWhile:

dtoaletter,eax

dtoanumber,ebx

dtoaother,ecx

outputanswerLetter

outputanswerNumber

outputanswerOther

INVOKEExitProcess,0;exitwithreturncode0

PUBLIC_start;makeentrypointpublic

END;endofsourcecode

 

年级

 2012级

班号

 

1202班

 学号

 2012213537

专业

计算机科学与技术

 姓名

 郑凯伦

实验名称

 实验4.1求毕达哥拉斯三角形的边

实验

类型

设计型

综合型

创新型

设计型

一、掌握循环程序设计的原理和方法,重点掌握循环程序结构的形式和常用循环程序的控制方法和技巧。

二、要求学会置循环参数的初值,掌握循环体构成,学会如何实现循环控制。

 

设计流程:

1.一个毕达哥拉斯三角形的三条边是由三个正整数A、B和C组成,从而A2+B2=C2。

例如,数字3、4、5,由于9+16=25,而形成一个毕达哥拉斯三角形。

写一段完整的汇编程序,实现输入一个值给C,然后显示值为C时,所有可能的毕达哥拉斯三角形。

例如,如果输入5作为C的值,那么输出可以是:

ABC

345

435

2.由于C边的值已经给定,建立一个双重循环,外循环将A初值设1,每次循环加1,直到等于C-1;内循环将B值设为1,每次循环加1,直到等于C-1。

在内循环中如果A2+B2=C2成立,则当前的A、B、C是一个毕达哥拉斯三角形的边,并显示,如果不成立,继续循环。

代码:

;Exampleassemblylanguageprogram--

;Author:

Karllen

;Date:

revised5/2014

.386

.MODELFLAT

ExitProcessPROTONEAR32stdcall,dwExitCode:

DWORD

INCLUDEio.h;headerfileforinput/output

crEQU0dh;carriagereturncharacter

LfEQU0ah;linefeed

 .STACK4096;reserve4096-bytestack

.DATA

promotBYTE"PleaseEnteranumberasthemaxslide",0

valueBYTE40DUP(?

ncDWORD?

naDWORD?

nbDWORD?

nDWORD?

answerBYTE"ABC",0

crLfBYTEcr,Lf,0

.CODE;startofmainprogramcode

_start:

movebx,0

movecx,0

outputpromot

inputvalue,40

atodvalue

movnc,eax

movn,eax

mulnc

movnc,eax;C*C

outputanswer

outputcrLf

doFirstWhile:

incebx

movecx,0

cmpebx,n

jgeendFirstWhile;大于等于n则转移

moveax,ebx

mulebx

movna,eax;A*A

doSecondWhile:

incecx

cmpecx,n

jgeendSecondWhile;大于等于n则转移

;执行比较

 

 

 

 

 

 

 

 

 

 

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

 moveax,ecx

mulecx;B*B

movnb,eax

movedx,nb

addedx,na;A*A+B*B

cmpedx,nc

jnestanIf;不等于则转移

;outputanswer

dtoavalue,ebx

outputvalue

dtoavalue,ecx

outputvalue

dtoavalue,n

outputvalue

outputcrLf

jmpdoSecondWhile

stanIf:

jmpdoSecondWhile

endSecondWhile:

jmpdoFirstWhile

endFirstWhile:

INVOKEExitProcess,0;exitwithreturncode0

PUBLIC_start;makeentrypointpublic

END;endofsourcecode 

 

 

 

 

 

 

 

 

 

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

年级

 2012级

班号

 

1202班

 学号

 2012213537

专业

计算机科学与技术

 姓名

 郑凯伦

实验名称

 实验5.1数组排序

实验

类型

设计型

综合型

创新型

设计型

一、掌握子程序设计的原理和方法,重点掌握子程序编写和调用的过程以及堆栈操作和参数以及局部变量的概念。

二、学会编写子程序,在主程序中调用子程序,能良好的实现子程序的参数传递。

 

 

 设计流程:

1.给定一个数组,数组包含10个整型元素,将其按照从小到大的顺序排列后输出,要求排序的算法用子程序来实现。

例如,输入的数组元素为1,3,-9,5,12,0,-3,-12,24,34,那么输出是:

-12,-9,-3,0,1,3,5,12,24,34。

2.本程序采用冒泡排序对数组内的元素进行排序。

;Exampleassemblylanguageprogram--addstwonumbers

;Author:

karllen

;Date:

revised5/2014

.386

.MODELFLAT

ExitProcessPROTONEAR32stdcall,dwExitCode:

DWORD

INCLUDEio.h;headerfileforinput/output

crEQU0dh;carriagereturncharacter

LfEQU0ah;linefeed

.STACK4096;reserve4096-bytestack

.DATA

iDWORD?

jDWORD?

tempDWORD?

promot1BYTE"PleaseEntertennumberstosortfrommintomax",cr,Lf,0

arrayDWORD10DUP(?

promot2BYTE"Thenumbersthataresortedis",cr,Lf,0

valueBYTE11DUP(?

BYTEcr,Lf,0

 

 .CODE

sortArrayPROCNEAR32

pushebp;建立堆栈

movebp,esp

movi,0

movedx,10

;movebx,[ebp+8];取得数组地址

sortFirst:

movebx,[ebp+8]

inci

cmpi,9

jgendsortFirst;大于9则跳转,

subedx,i;求edx-i

movj,0

sortSecond:

incj

cmpj,edx

jgendsortSecond;大于10-i则转移

moveax,[ebx]

movecx,[ebx+4]

cmpeax,ecx;cmp[ebx],[ebx+4]

jlendCMP;[ebx]<[ebx+4]则转移

movedx,eax

mov[ebx],ecx

mov[ebx+4],edx

;swap

endCMP:

addebx,4

movedx,10

jmpsortSecond

endSortSecond:

jmpsortFirst

endsortFirst:

popebp

ret

sortArrayENDP

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 _start:

outputpromot1

movecx,0

leaebx,array

doFirstWhile:

incecx

cmpecx,10

jgendFirstWhile;大于10则结束

inputvalue,11

atodvalue

mov[ebx],eax

addebx,4

jmpdoFirstWhile

endFirstWhile:

leaeax,array

pusheax

callsortArray

addesp,4

outputpromot2

movecx,0

leaebx,array

doSecondWhile:

incecx

cmpecx,10

jgendSecondWhile

dtoavalue,[ebx]

outputvalue

addebx,4

jmpdoSecondWhile

endSecondWhile:

INVOKEExitProcess,0;exitwithreturncode0

PUBLIC_start;makeentrypointpublic

END;endofsourcecode 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

年级

 2012级

班号

 

1202班

 学号

 2012213537

专业

计算机科学与技术

 姓名

 郑凯伦

实验名称

 实验6.1比较两个字符串

实验

类型

设计型

综合型

创新型

设计型

一、掌握串操作的用法,熟悉基本的串操作指令。

二、根据前面的所学知识,掌握对串操作的应用。

 

 

流程分析:

1.写一程序,比较两个字符串String1和String2所含的字符是否相同;若相同则显示’Match’,否则显示’No Match’。

2.输入两个字符串之后,将串操作所必须的寄存器等参数设置好,然后使用串操作指令进行从头到尾的比较,两个字符串相等的条件是串长度相等且对应的字符相同。

代码如下:

;Exampleassemblylanguageprogram--

;Author:

Karllen

;Date:

revised5/2014

.386

.MODELFLAT

ExitProcessPROTONEAR32stdcall,dwExitCode:

DWORD

INCLUDEio.h;headerfileforinput/output

crEQU0dh;carriagereturncharacter

LfEQU0ah;linefeed

.STACK4096;reserve4096-bytestack

.DATA

str1BYTE80DUP(?

str2BYTE80DUP(?

valueBYTE11DUP(?

length1DWORD?

length2DWORD?

 promot1BYTE"PleaseEnterString1",cr,Lf,0

promot2BYTE"PleaseEnterString2",cr,Lf,0

crlfBYTEcr,Lf,0

answerYesBYTE"Match",cr,Lf,0

answerNoBYTE"NoMatch",cr,Lf,0

PUBLIC_start;makeentrypointpublic

.CODE;startofmainprogramcode

_start:

outputpromot1

inputstr1,80

leaeax,str1

pusheax

callstrlen

addesp,4

movlength1,eax

dtoavalue,eax

outputvalue

outputcrlf

outputpromot2

inputstr2,80

leaeax,str2

pusheax

callstrlen

addesp,4

movlength2,eax

dtoavalue,eax

outputvalue

outputcrlf

movedx,length2

;;cmpString1andString2

cmpeax,edx;如果长度不相等

jneendCMP;则结束

;比较

leaesi,str1

leaedi,str2

movecx,length2;比较的长度

re

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

当前位置:首页 > 经管营销 > 经济市场

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

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