中南大学 汇编语言实验报告Word格式文档下载.docx

上传人:b****5 文档编号:19530332 上传时间:2023-01-07 格式:DOCX 页数:20 大小:20.67KB
下载 相关 举报
中南大学 汇编语言实验报告Word格式文档下载.docx_第1页
第1页 / 共20页
中南大学 汇编语言实验报告Word格式文档下载.docx_第2页
第2页 / 共20页
中南大学 汇编语言实验报告Word格式文档下载.docx_第3页
第3页 / 共20页
中南大学 汇编语言实验报告Word格式文档下载.docx_第4页
第4页 / 共20页
中南大学 汇编语言实验报告Word格式文档下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

中南大学 汇编语言实验报告Word格式文档下载.docx

《中南大学 汇编语言实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《中南大学 汇编语言实验报告Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。

中南大学 汇编语言实验报告Word格式文档下载.docx

end

四、实验结果

DEBUG调试如下:

五、实验心得

编了这个程序之后发现,想要真正理解一个程序都是需要掌握众多助记符的用法以及它的意思,只有了解并明白了这些之后才可以分析程序或者是编写简单的小程序。

实验二起泡排序算法的程序实现

(1)掌握循环程序的设计方法。

(4)学会针对不同的问题,选用不同的组织循环的方法。

二、实验原理

循环结构分DO_WHILE和DO_UNTIL两种,无论使用哪种循环结构,循环程序一般应包括以下几部分:

①循环初始化。

它包括设置循环次数的初始值、地址指针的初始设置等。

②循环体。

这是循环工作的主体,包括要重复执行的操作,以及循环的修改部分。

修改部分包括地址指针的修改、循环控制条件的修改等。

③循环控制部分。

它是控制循环的关键,判断循环条件满足与否。

特别要注意循环入口和循环次数的正确设置、地址指针及循环控制条件的修改等。

否则会得不到期望的结果。

起泡排序算法的程序实现

DATASSEGMENT

BUFFERDB100DUP(?

XDB5DUP(?

STRING1DB"

PLEASEINPUTDATAS:

"

"

$"

STRING2DB"

AFTERSORTIS:

SHIFTDB13,10,'

$'

SPACEDB20H,'

DATASENDS

STACKSSEGMENT

DB256DUP(?

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS,ES:

DATAS

START:

MOVAX,DATAS

MOVDS,AX

MOVES,AX

MOVAX,STACKS

LEASI,BUFFER

MOVCX,0

LEADX,STRING1

MOVAH,09H

INT21H

L1:

MOVAH,01H;

/////////////////键盘输入转成数

CMPAL,0DH

JEL2

CMPAL,20H

JEL3

XORAH,AH

SUBAX,30H

XCHGAX,BX

MOVDX,10

MULDX

ADDBX,AX

JMPL1

L3:

INCCX

MOV[SI],BL

ADDSI,1

XORBX,BX

L2:

LEADX,SHIFT

LEADI,X

MOV[DI],CL

LABLE2:

PUSHCX

LABLE:

MOVAL,[SI]

CMPAL,[SI+1]

JBEL4

XCHGAL,[SI+1]

MOV[SI],AL

L4:

ADDSI,1;

跳到回车处理;

空格处理;

/////////////存储到buffer中;

/////////排序算法

POPCX

LOOPLABLE2

LEADX,STRING2

LEADI,BUFFER

L7:

MOVCX,2

MOVBH,[DI]

L6:

MOVCL,4

ROLBX,CL

MOVDL,BL

ANDDL,0FH

CMPDL,9

JBEL5

ADDDL,7

L5:

ADDDL,30H

MOVAH,02H

LOOPL6

INCDI

LEADX,SPACE

LEASI,X

MOVBL,[SI]

CMPBL,0

DECBL

JGEL7

MOVAH,4CH

CODESENDS

ENDSTART

四、实验结果;

/////////////////////显示字符

1.在进行循环程序设计时,要注意循环初始化、内外层循环的控制、循环结束条件等的设置,对整个程序的执行逻辑要非常清楚,这样可以避免死循环等意外情况的出现。

2.多层循环的控制更为复杂,编写代码时,要注意注释重要的循环控制部分,这样思路才不会乱。

同时要对照流程图,随时观察代码的逻辑思路是否正确。

3.当要观察排序结果时,可利用D命令,显示数据段的内容,检查程序是否正常运行。

实验三查找匹配字符串

查找匹配字符串:

程序接收用户键入的一个关键字以及一个句子。

如果句子中不包含关键字则显示‘NOmatch!

’;

如果句子中包含关键字则显示‘MATCH’,且把该字在句子中的位置用十六进制数显示出来。

DATASEGMENT

mess1DB'

Enterkeyword:

'

'

mess2DB'

EnterSentence:

mess3DB'

Matchatlocation:

mess4DB'

NOTMATCH.'

13,10,'

mess5DB'

Hofthesentence'

changeDB13,10,'

stoknin1labelbyte

max1db10

act1db?

stokn1db10dup(?

stoknin2labelbyte

max2db50

act2db?

stokn2db50dup(?

DATAENDS

此处输入堆栈段代码

CODESEGMENT

*************************************代码段

code,ds:

data,es:

data

pushds

subAX,AX

subBX,BX

subDI,DI

subSI,SI

pushAX;

为返回dos并清空后面要用到的寄存器

MOVAX,DATA

LEADX,mess1

MOVah,09

INT21h;

输出Enterkeyword

LEADX,stoknin1

MOVah,0ah;

用21号中段的0ah号功能获取关键字

INT21h

cmpact1,0

jeexit;

如果为空直接退出程序

a10:

********************************输入Sentence并判断

LEADX,change

输出回程,换行

LEADX,mess2

输出EnterSentence:

LEADX,stoknin2

MOVah,0ah

用21号中段的0ah号功能获取句子

MOVAL,act1

CBW

MOVCX,AX;

保存关键字长度到cx

PUSHCX;

cx入栈

MOVAL,act2

cmpAL,0

jea50;

保存句子长度到al,若句子为空则跳转显示notmatchSUBAL,act1

jsa50;

若句子长度小于关键字长度,则跳转显示notmatchINCAL

LEABX,stokn2;

将句子的首地址放进BX

MOVDI,0

MOVSI,0

a20:

****************************************比较,内循环

MOVAH,[BX+DI]

CMPAH,stokn1[SI];

遇见字符不相等就跳转到a30

jnea30

INCSI

DECCX;

没遇到一个相等的字符,cx-1,cx不为0则比较下一个字符,当cx为0是说明关键字比较完

CMPCX,0

jea40

jmpa20

a30:

*****************************************外循环,BX+1,清空si,di继续内循环比较INCBX

DECAL

jea50

pushCX

a40:

*****************************************match,将bx减去句子的首地址加一得到关键字所在位置,调用二进制转十六进制子函数将位置输出

SUBBX,offsetstokn2

INCBX

LEADX,mess3

CALLbtoh

LEADX,mess5

jmpa10

****************************************二进制转换十六进制

btohPROCNEAR

MOVCH,4

MOVAL,BL

andAL,0fh

addAL,30h

cmpal,3ah

jlprintit

printit:

MOVdl,al

MOVah,2

decch

ret

btohendp

a50:

*****************************************显示notmatch

LEADX,mess4

exit:

CODEENDS

END

与第一次实验相比这次用到了数据段,应该注意数据段的定义和使用。

此外应该注意单个字符时的“边缘”情况,因为这时指针的移动和关键字的长度是一致的,但是这并不意味着,两个字符串匹配。

实验四求Fibonacci递归数

一、实验目的:

掌握子程序的设计方法,熟悉递归程序的设计。

二、实验要求:

掌握递归程序的调用、返回及入口、出口的传递方法。

程序接受由用户键入的数N,根据给定的N值,计算Fibonacci数。

Fibonacci数的公式如下:

Fib

(1)=1;

当n=1

Fib

(2)=1;

当n=2

Fib(n)=Fib(n-1)+Fib(n-2)

此处输入数据段代码

RESULTDB1D,24DUP(0)

XDB1D,24DUP(0)

MESS1DB0DH,0AH,'

Pleaseinputadata:

MESS2DB0DH,0AH,'

Theresultis:

MESS3DB0DH,0AH,'

InputQ/qtoquit.'

MESS4DB0DH,0AH,'

======================'

FLAGDW0DH

MESSERRORDB0DH,0AH,'

Inputerror,pleasere-enter.'

QUITDB0DH,0AH,'

YouhavetypedQ/qtoexit.'

DW128DUP(?

MOVSS,AX

此处输入代码段代码

REINPUT:

PUSHAX

PUSHBX

PUSHDX

PUSHSI

PUSHDI

MOVAH,09

LEADX,MESS4

LEADX,MESS3

LEADX,MESS1

MOVBX,0

INPUT:

MOVAH,01

CMPAL,'

q'

;

JZEND_

Q'

CMPAL,0DH;

JZCONT

0'

JBERROR;

:

JNBERROR

SUBAL,30H

MOVCX,10D

MULCX

JMPINPUT

ERROR:

LEADX,MESSERROR

JMPREINPUT

END_:

LEADX,QUIT

RET

CONT:

MOVCX,BX;

CMPCX,2

JLEPRINT;

SUBCX,2;

NEXT:

MOVDI,CX

MOVCX,25

ADDE:

MOVDL,X[SI]

MOVDH,RESULT[SI]

ADDDL,DH;

MOVRESULT[SI],DL

MOVX[SI],DH;

CMPDL,10D

JAEGREAT;

JMPGOON

GREAT:

SUBRESULT[SI],10D;

ADDX[SI],1;

GOON:

LOOPADDE

MOVCX,DI

LOOPNEXT

PRINT:

LEADX,MESS2

MOVSI,24

DISPLAY1:

CMPFLAG,0;

JNZN2

CMPRESULT[SI],0

JZN3

ADDFLAG,1

N2:

MOVDL,RESULT[SI];

N3:

DECSI

LOOPDISPLAY1

MOVFLAG,0

MOVRESULT[0],1D

MOVSI,1

MOVCX,24

INITIAL:

MOVRESULT[SI],0

MOVX[SI],0

LOOPINITIAL

POPDI;

POPSI

POPDX

POPBX

POPAX

JMPREINPUT;

在程序的制作过程中,遇到了很多意想不到的困难,自己一个人解决起来有很大的困难,于是也少不了同学的帮助,深刻体会到开发程序不只是一两个人就能很好地完成的,要大家互相帮助,共同探讨问题,才能更好的解决困难。

实验五分类统计字符个数

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

掌握分支程序的调用及基本子程序的编写,判断程序运行的顺序。

程序接受用户输入一行字符,并按照字符串中字符所属的类型分类,将结果输出(例如:

aaabb1234&

中,字母5,数字4,其他字符1)

STRING1DB'

InputYourString:

$'

输入提示信息

STRING2DB'

Digit:

各类字符提示信息

STRING3DB'

UpLetter:

STRING4DB'

LowLetter:

STRING5DB'

Others:

DIGITDB0;

数字

ALPHAUDB0;

大写字母

ALPHALDB0;

小写字母

OTHERSDB0;

其他

LEADX,STRING1;

显示输入提示信息

MOVAH,9

MOVCX,100;

设置循环次数主够大

MOVAH,1;

中断调用,单字符输入

CMPAL,0DH;

若输入回车符则结束

JZOVER2

CMPAL,30H

JBOTHER;

CMPAL,39H;

若>

39H(9),跳转进一步比较

JAHIGHER1

JMPDIGITAL;

DIGIT++

HIGHER1:

CMPAL,41H;

if

JBOTHER

CMPAL,5AH;

if>

5AH(Z),跳转继续比较

JAHIGHER2

JMPUALPHA;

ALPHAU++

HIGHER2:

CMPAL,61H;

CMPAL,7AH;

7AH(z),OTHERS++

JAOTHER

JMPLALPHA;

ALPHAL++

JMPOVER;

比较结束

OTHER:

INCOTHERS;

OTHERS++

JMPOVER

DIGITAL:

INCDIGIT;

LALPHA:

INCALPHAL;

UALPHA:

INCALPHAU;

OVER:

NOP

LOOPL1;

循环,输入下一字符

OVER2:

CALLENDLINE;

回车换行

LEADX,STRING2;

输出提示信息

XORAX,AX

MOVAL,DIGIT;

将统计的数字送AX,为输出做准备

CALLDISPLAY;

调用输出两位数字的子程序

CALLENDLINE;

下同

LEADX,STRING3

MOVAL,ALPHAU

CALLDISPLAY

CALLENDLINE

LEADX,STRING4

MOVAL,ALPHAL

LEADX,STRING5

MOVAL,OTHERS

ENDLINEPROCNEAR;

控制输出格式,输出回车换行子程序

MOVAH,2

MOVDL,0AH

MOVDL,0DH

ENDLINEENDP

DISPLAYPROCNEAR;

输出两位数字的子程序

MOVBL,10;

10送BL

DIVBL;

AX/BL,AL=商,AH=余数

PUS

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1