华北电力大学汇编实验报告Word下载.docx

上传人:b****5 文档编号:19940374 上传时间:2023-01-12 格式:DOCX 页数:16 大小:197.15KB
下载 相关 举报
华北电力大学汇编实验报告Word下载.docx_第1页
第1页 / 共16页
华北电力大学汇编实验报告Word下载.docx_第2页
第2页 / 共16页
华北电力大学汇编实验报告Word下载.docx_第3页
第3页 / 共16页
华北电力大学汇编实验报告Word下载.docx_第4页
第4页 / 共16页
华北电力大学汇编实验报告Word下载.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

华北电力大学汇编实验报告Word下载.docx

《华北电力大学汇编实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《华北电力大学汇编实验报告Word下载.docx(16页珍藏版)》请在冰豆网上搜索。

华北电力大学汇编实验报告Word下载.docx

movbl,15;

输出显示为15行

e:

movcx,16;

设置循环次数,16,表示输出显示为16列

l:

int21h;

显示输出

pushdx;

推入堆栈

movdl,0

int21h

显示空白符

popdx;

将栈顶元素推出

incdl;

设置下一个元素

loopl;

循环输出每行的16个ASCII元素

将下一行的首元素推入堆栈

movdl,0dh

movdl,0ah

输出换行

decbl

cmpbl,0;

比较确定是否已经输出15行元素

jnee;

若还未完成输出,则跳转至e,继续进行下一行元素的输出

jeexit;

否则退出程序

exit:

movax,4c00h

mainendp

prognamends

end;

start

实验二查找匹配字符串

程序接受用户键入的一个关键字以及一个句子,如果句子中不包含关键字则显示“Nomatch!

”;

如果句子中包含关键字则显示“match!

”,且把该字在句子中的位置用十六进制数显示出来。

要求程序的执行过程如下:

Enterkeyword:

abc

Entersentence:

wearestudyingabc

Matchatlocation:

11Hofthesentence

xyz

Nomatch!

程序由三部分组成:

(1)输入关键字和一个句子,分别存入相应的缓冲区中。

(2)在句子中查找关键字

(3)输出信息。

用功能调用09h分‘找到’和‘未找到两种情况分别显示不同的信息。

在“找到”时,显示关键字在字符串中位置。

三、使用说明

根据提示输入关键字和句子,按回车键结束输入。

程序将显示字符串中是否含有关键字,有则提示‘match’并显示关键字位置,无则提示‘nomatch’。

四、实验程序

datareasegment

;

输入数据段

keyadrlabelbyte

keymaxdb20

keyactdb?

keystringdb20dup(?

);

定义能放入50个字符缓存空间的大小,带输入数据长度未知

senadrlabelbyte

senmaxdb50

senactdb?

secstringdb50dup(?

messkeydb'

'

'

$'

messsendb0dh,0ah,'

EnterSentence:

nomatchdb0dh,0ah,'

Nomatch.'

matchdb0dh,0ah,'

restdb'

Hofthesentence.'

datareaends

;

设置dos显示端内容

prognam,ds:

datarea,es:

datarea

pushds

xorax,ax;

ax寄存器清0

pushax

movax,datarea

movds,ax

moves,ax

leadx,messkey

movah,09h

int21h;

显示messkey字符内容

leadx,keyadr

movah,0ah

是实现DOS调用中的0a号功能,就是在屏幕上显示keyadr字符串

leadx,messsen

leadx,senadr

moval,senact

subal,keyact

jlnmatch;

长度比较,句子长度短,没有找到跳到nmatch子语句

callsearch

jmpshorte0;

无条件跳转

以上均为DOS上让其显示这些内容

nmatch:

leadx,nomatch

e0:

ret

mainendp;

结束

searchprocnear

xorcx,cx;

cxqingling

movdx,offsetsenadr;

句子地址到dx

adddl,senact;

句子changdu

incdl;

置长度加1得到句子最后一位

movcl,keyact;

关键字长度到cl

cld;

清除方向标志

leadi,secstring

r0:

leasi,keystring

repzcmpsb;

如果si和di所指向的两个字节相等,则继续比较。

所以如果相等的话,就停止循环。

但是这时候si和di已经自动加1了,如果要找不相等的那两个数,就要把si和di减1。

moval,byteptr[si-1]

cmpal,byteptr[di-1];

把那两个不相等的字节放到ptr数组中去

jnznext;

为0?

,跳到next子语句

subsi,offsetkeystring;

获得操作数keystring的偏移地址

movax,si

cmpal,keyact;

将关键字与secstring长度比较

jeshowp

next:

movcl,keyact

cmpdi,dx

jnzr0

shown:

leadx,nomatch

在屏幕上显示nomatch字符串

jmpshorte1

showp:

leadx,match

在屏幕上显示match字符串

decdi;

句子与关键字匹配最后一位的下一位,所以要见1位

movbx,di;

xorax,ax

moval,keyact

subbx,ax;

句子长度减去关键字长度

movax,offsetsenadr

subbx,ax

callbinihex

leadx,rest

e1:

ret

searchendp

binihexprocnear

movch,4

r1:

movcl,4;

左移4位

rolbx,cl

movdl,bl

anddl,0fh

adddl,30h

cmpdl,39h

jledisp

adddl,07h

disp:

movah,02h

decch

jnzr1

binihexendp

endmain

五、程序框图

实验三分类统计字符个数

程序接受用户键入一行字符(字符个数不超过80个,该字符串用回车符结束),并按字母、数字、其它字符分类计数,然后将结果存入以letter、digit和other为名的存储单元中。

(1)程序可采用01H功能调用把键入字符先分类计数再存入缓冲区中。

(2)程序进入debug运行并查看计数结果。

三、实验程序

DATASEGMENT

PARSDB80;

准备接收80个字符.

NNNDB?

用于存放实际输入的个数.

IIIDB80DUP(?

);

80字节的空间.

D_NDB?

C_NDB?

O_NDB?

MESG1DB13,10,'

InputSTR:

$'

用于提示.

MES_CDB13,10,'

CharNis:

MES_DDB13,10,'

DigitNis:

MES_ODB13,10,'

OtherNis:

MES_TDB13,10,'

AllNis:

DATAENDS

---------------------------------------------------

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVD_N,0

MOVC_N,0

MOVO_N,0

MOVDX,OFFSETMESG1

MOVAH,9;

9号功能调用,显示提示.

INT21H

MOVDX,OFFSETPARS

MOVAH,10;

10号功能调用,接收键盘输入.

MOVCL,NNN;

收到字符的个数.

MOVCH,0

CMPCX,0

JNZDO_IT

JMPEXIT

DO_IT:

LEASI,III;

收到字符的起始地址.

----------------------------下面开始循环统计.

AGAIN:

MOVAL,[SI]

D_num:

CMPAL,'

:

-'

JNCN_C_B;

>

'

9'

0'

JCN_C_B;

<

INCD_N;

数字个数加一.

JMPNEXT

N_C_B:

['

JNCN_C;

Z'

A'

JCN_C;

INCC_N;

大写,加一.

N_C:

{'

JNCOTHER;

z'

a'

JCOTHER;

小写,加一.

OTHER:

INCO_N;

其它.

NEXT:

INCSI

LOOPAGAIN

----------------------------统计结束

MOVDX,OFFSETMES_D

MOVAL,D_N

CALLDISP_AL

MOVDX,OFFSETMES_C

MOVAL,C_N

MOVDX,OFFSETMES_O

MOVAL,O_N

MOVDX,OFFSETMES_T

MOVAL,NNN

----------------------------显示结束.

EXIT:

MOVAH,4CH

============================

DISP_AL:

以3位十进制数形式显示AL中的内容.

MOVAH,0

MOVBL,100

DIVBL

ADDAL,30H

MOVDL,AL

MOVBH,AH

MOVAH,2

MOVAL,BH

MOVBL,10

ADDBH,30H

MOVDL,BH

MOVAL,AH

RET

CODEENDS

ENDSTART

四、使用说明

程序进入后提示输入字符,可以输入任意字符,输入完成后键入回车键表示完成,则会在下一行输出实验结果。

实验心得体会:

这次汇编实验历时一周,但我用了3天时间完成了3个编程实验:

用表格形式显示字符、查找匹配字符串、分类统计字符个数,由于期间要考试所以就没有做第四个。

用表格形式显示字符和查找匹配字符串是使用了循环程序设计思想。

显示字符实验较为简单,只需要一些基础知识即可完成。

而查找字符串较耗费时间,这个实验主要难点就在从句子中查找关键字。

查找关键字是使用的串比较指令。

这个指令只能进行比较,查找就需要移动指针,将整个句子都与关键字比较一遍,才能确定是否找到了关键字。

分类统计字符个数与查找电话号码较难,花费了我最多的时间。

分类统计字符个数是应用了分支程序设计,而查找电话号码是应用了子程序设计。

分类统计字符个数是将输入的字符与多个条件进行比较,找到符合条件的程序段就执行,否则就跳到下一个。

实验过程中遇到了很多问题,有许多问题是我自己无法解决的,只能通过向其他同学学习,向老师询问一些不懂的地方,才能将实验完成。

这次实验培养了我的实践能力,使我将书本中的理论知识转变成了现实的程序,为今后的学习和使用打下了结实的基础。

通过实验使我进一步巩固所学汇编课程内容并掌握汇编程序在程序设计中的应用方法,并对汇编程序设计及应用有整体的认识。

在此还要真诚的感谢老师的帮助,否则我也不会顺利完成该实验。

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

当前位置:首页 > 工作范文

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

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