汇编语言程序设计实验教程第二章实验报告.docx

上传人:b****6 文档编号:7739011 上传时间:2023-01-26 格式:DOCX 页数:7 大小:17.19KB
下载 相关 举报
汇编语言程序设计实验教程第二章实验报告.docx_第1页
第1页 / 共7页
汇编语言程序设计实验教程第二章实验报告.docx_第2页
第2页 / 共7页
汇编语言程序设计实验教程第二章实验报告.docx_第3页
第3页 / 共7页
汇编语言程序设计实验教程第二章实验报告.docx_第4页
第4页 / 共7页
汇编语言程序设计实验教程第二章实验报告.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

汇编语言程序设计实验教程第二章实验报告.docx

《汇编语言程序设计实验教程第二章实验报告.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计实验教程第二章实验报告.docx(7页珍藏版)》请在冰豆网上搜索。

汇编语言程序设计实验教程第二章实验报告.docx

汇编语言程序设计实验教程第二章实验报告

汇编语言程序设计实验教程第二章实验报告

实验2.1

用表格形式显示字符

1.题目:

用表格形式显示ASCII字符SMASCII

2.实验要求:

按15行*16列的表格形式显示ASCII码为10H-100H的所有字符,即以行为主的顺序及ASCII码递增的次序依次显示对应的字符。

每16个字符为一行,每行中的相邻两个字符之间用空白符(ASCII为0)隔开。

3.提示:

(1)显示每个字符可使用功能号为02的显示输出功能调用,使用方法如下:

mov ah,02h

mov dl,输出字符的ASCII码

int 21h

(2)显示空白符时,用其ASCII码0置入dl寄存器。

每行结束时,用显示回车(ASCII为0dh)和换行符(ASCII为0ah)来结束本行并开始下一行。

(3)由于逐个显示相继的ASCII字符时,需要保存并不断修改dl寄存器的内容,而显示空白、回车、换行符时也需要使用dl寄存器,为此可使用堆栈来保存相继的ASCII字符。

具体做法是:

在显示空白或回车、换行符前用指令

push dx

把dl的内容保存到堆栈中去。

在显示空白或回车、换行符后用指令

pop dx

恢复dl寄存器的原始内容。

4.程序清单:

codesegment

assumecs:

code

start:

movdx,0010h

next:

movcx,10h

loop1:

movah,02h

int21h

incdx

pushdx

movdl,0

int21h

popdx

looploop1

pushdx

movdl,0ah

int21h

movdl,0dh

int21h

popdx

cmpdx,100h

jbnext

movah,4ch

int21h

 

codeends

endstart

5.运行结果如下:

 

6.实验总结:

通过本次实验我深刻的知道用汇编语言编译程序的方法,掌握了如何合理的利用各个寄存器进行程序的控制操作,初步了解到循环程序的控制方法,以及dos中断调用的基本要领对学习汇编语言有了非常好的帮助作用!

汇编语言 实验二 查找匹配字符串

一、目的

查找匹配字符串SEARCH

二、实验内容

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

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

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

流程图

 

不匹配,输出

开始

 

三、设计和编码

DATASEGMENT

mess1  DB'Enterkeyword:

','$'

mess2  DB'EnterSentence:

','$'

mess3  DB'Matchatlocation:

','$'

mess4  DB'NOTMATCH.',13,10,'$'

mess5  DB'Hifthesentence',13,10,'$'

change  DB13,10,'$'

stoknin1labelbyte

max1db10

act1db?

stokn1db10dup(?

)  

stoknin2labelbyte

max2db50

act2db?

stokn2db50dup(?

DATAENDS

STACKSSEGMENT

;此处输入堆栈段代码

STACKSENDS

CODESEGMENT

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

mainprocfar

assumecs:

code,ds:

data,es:

data

START:

pushds

subAX,AX

subBX,BX

subDI,DI

subSI,SI

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

MOVAX,DATA

MOVDS,AX

LEADX,mess1    

MOVah,09

INT21h       ;输出Enterkeyword

LEADX,stoknin1

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

INT21h

cmpact1,0     

jeexit       ;如果为空直接退出程序

a10:

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

LEADX,change    

MOVah,09      

INT21h       ;输出回程,换行

LEADX,mess2

MOVah,09

INT21h       ;输出EnterSentence:

LEADX,stoknin2   

MOVah,0ah

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

MOVAL,act1

CBW

MOVCX,AX      ;保存关键字长度到cx

PUSHCX       ;cx入栈

MOVAL,act2

cmpAL,0

jea50       ;保存句子长度到al,若句子为空则跳转显示notmatch

SUBAL,act1

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

INCAL

CBW         

LEABX,stokn2    ;将句子的首地址放进BX

MOVDI,0

MOVSI,0

a20:

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

MOVAH,[BX+DI]   

CMPAH,stokn1[SI] ;遇见字符不相等就跳转到a30

jnea30

INCDI

INCSI

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

CMPCX,0

jea40

jmpa20

a30:

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

INCBX       

DECAL

cmpAL,0

jea50

MOVDI,0

MOVSI,0

POPCX

pushCX

jmpa20

a40:

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

SUBBX,offsetstokn2

INCBX

LEADX,change

MOVah,09

INT21h

LEADX,mess3

MOVah,09

INT21h

CALLbtoh

LEADX,mess5

MOVah,09

INT21h

jmpa10  

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

btohPROCNEAR

MOVCH,4

rotate:

MOVCL,4

ROLBX,CL

MOVAL,BL

andAL,0fh

addAL,30h

cmpal,3ah

jl printit

addal,7h  

printit:

MOVdl,al

MOVah,2

int21h

decch

jnzrotate

ret

btohendp

a50:

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

LEADX,change

MOVah,09

INT21h

LEADX,mess4

 

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

当前位置:首页 > 表格模板 > 合同协议

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

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