IBMPC汇编语言程序实验报告Word文档下载推荐.docx

上传人:b****6 文档编号:17299035 上传时间:2022-12-01 格式:DOCX 页数:22 大小:179.19KB
下载 相关 举报
IBMPC汇编语言程序实验报告Word文档下载推荐.docx_第1页
第1页 / 共22页
IBMPC汇编语言程序实验报告Word文档下载推荐.docx_第2页
第2页 / 共22页
IBMPC汇编语言程序实验报告Word文档下载推荐.docx_第3页
第3页 / 共22页
IBMPC汇编语言程序实验报告Word文档下载推荐.docx_第4页
第4页 / 共22页
IBMPC汇编语言程序实验报告Word文档下载推荐.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

IBMPC汇编语言程序实验报告Word文档下载推荐.docx

《IBMPC汇编语言程序实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《IBMPC汇编语言程序实验报告Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。

IBMPC汇编语言程序实验报告Word文档下载推荐.docx

把dx推进栈保存

movdl,0;

显示空白符

popdx;

把dx之前的数取回来

looploop1;

当cx=0时会自动跳出loop1循环

保存dx的数,即为了保存ascii码

movdl,0ah;

显示回车

int21h;

02的显示输出功能调用

movdl,0dh;

显示换行符

int21h

popdx;

cmpdx,100h;

最后的字符的ascii码为100h,相比较

jbnext;

小于时就跳会next

movah,4ch;

带返回码终止

int21h

codeends

endstart

三、运行结果

实验二查找匹配字符串

一、实验说明

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

如果句子中不含关键字则显示‘nomatch’;

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

1)采用0AH功能调用将关键字和一个句子分别存入相应的缓冲区。

2)关键字的查找。

关键字和句子中相应字段的比较可使用串比较指令,因此定义附加段,附加段和数据段定义为同一段;

相应寄存器内容如下:

SI寄存器:

关键字首指针;

DI寄存器:

句子中正相比较的字符指针;

CX寄存器(数据段的COUNT变量):

关键字的字母个数。

3)关键字在句子中位置的判断。

[DI-COUNT]即为关键字在句子中的地址,LEADXSENTENCE;

SUBDI,DX;

DECDI;

此时DI中存放关键字的位置。

4)十六进制显示,采用循环移位,每次输出四个二进制位对应的十六进制字符。

二、程序代码

datassegment

keyworddb10h,?

10hdup(?

matchdb0ah,0dh,"

matchatlocation:

$"

nomatchdb0ah,0dh,"

nomatch$"

msg3db0ah,0dh,"

enterkeyword:

实验2程序流程图

sentencedb50h,?

50hdup(?

msg4db0ah,0dh,"

entersentence:

msg5db"

hofthesentence!

countdb?

datasends

codessegment

mainprocfar

assumecs:

codes,ds:

datas,es:

datas

pushds

subax,ax

subcx,cx

subbx,bx

pushax

movax,datas

movds,ax

moves,ax

movch,0

leadx,msg3

movah,09h

int21h

leadx,keyword

movah,0ah

int21h;

输入关键字

again:

leadx,msg4

movah,09h

输出msg4

leadx,sentence

输入句子

leadi,sentence

leasi,keyword

moval,[di+1]

movcl,[si+1]

movcount,cl

movbl,al

subbl,cl

addbl,2

addbx,di

cmpal,cl

jbnomatch1

adddi,2

sign1:

movcl,count

addsi,2

cld

repzcmpsb

jzmatch1

cmpdi,bx

jbesign1

nomatch1:

leadx,nomatch

int21h

jmpagain

match1:

leadx,match

subdi,dx

subdi,cx

decdi

movbx,di

calldisplay

jmpagain

;

子程序display,用于将二进制数转换成十六进制数

displayprocnear

movch,2

rotate:

movcl,4

rolbl,cl

moval,bl

andal,0fh

addal,30h

cmpal,3ah

jlprintit

addal,7h

printit:

movdl,al

movah,2

decch

jnzrotate

leadx,msg5

movah,09h

ret

displayendp

exit:

ret

mainendp

codesends

endstart

实验2.程序运行结果

 

实验三分类统计字符个数

程序接收用户键入的一行字符(用回车符结束),并按字母,数字及其他字符分类计数,然后将结果存入以letter,digit和other为名的存储单元中。

1)程序采用0AH功能调用把键入字符直接送到缓冲区,然后再逐个取出,比较字符的ASCⅡ码,分类计数。

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

3)十进制显示输出,数值存放在AL中,运用MOVBL,10;

DIVBL;

分别将十位和个位输出。

datassegment

stringdb80,?

80dup(?

letter1db0ah,0dh,"

letter:

digit1db0ah,0dh,"

digit:

other1db0ah,0dh,"

other:

letterdb0

digitdb0

otherdb0

codes,ds:

movax,datas

movds,ax

leadx,string

movah,0ah

leadi,string+2

movcl,string+1

adddx,2

again:

moval,[di]

cmpal,0dh

jzexit

cmpal,30h

jbother2;

其他

cmpal,39h

jbedigital2;

数字

cmpal,41h

cmpal,5ah

jbeletter2;

字母

cmpal,61h

cmpal,7ah

jbletter2;

other2:

incother

incdi

jmpagain

digital2:

incdigit

letter2:

incletter

callcrlf

leadx,letter1

movah,09

xorax,ax

moval,letter

calldisplay

leadx,digit1

moval,digit

leadx,other1

moval,other

movah,4ch

子程序display,用于将二进制数转换成十进制数

movbl,10

divbl

pushax

movdl,al

adddl,30h

movah,2

popax

movdl,ah

displayendp

crlfprocnear

movah,02

movdl,0dh

movdl,0ah

crlfendp

endstart

流程图

实验3程序运行结果

实验四查找电话号码

一、实验要求

(1)要求程序建立一个可存放50项的电话号码表,每项包括人名及电话号码两部分;

(2)程序可接受输入人名及相应的电话号码,并把它们加入电话号码表中;

(3)凡有新的输入后,程序可按人名对电话号码表重新排序;

(4)程序可接受需要查询电话号码的人名,并从电话号码表中查出其电话号码,再在屏幕上以如下格式显示出来。

Nametel

×

×

二、设计说明

(1)显示提示符’Inputname:

’;

(2)调用子程序input_name接收人名;

(3)调用子程序stor_name把人名存入电话号码表tel_tab中:

(4)显示提示符’Inputatelephonenumber:

(5)调用子程序inphone接收电话号码,并把它存入电话号码表tel_tab中;

(6)如输入已结束则调用name_sort子程序对电话号码表接人名排序;

(7)显示提示符’Doyouwantatelephonenumber?

(Y/N)’;

(8)回答N收退出程序;

(9)回答Y则再显示提示符’name?

(10)调用子程序input_name接收人名;

(11)调用子程序name_search在电话号码表中查找所要的电话号码;

(12)调用子程序printline按要求格式显示人名及电话号码;

(13)重复查号提示符直至用户不要求查号为止。

三、实验程序

datasegsegment

nameparlabelbyte

maxnlendb21

actnlendb?

_namedb21dup(?

phoneparlabelbyte

maxplendb9

actplendb?

phonedb9dup(?

crlfdb13,10,'

$'

endaddrdw?

mess1db'

entername:

'

'

mess2db'

enteratelephonenumber:

mess3db'

Doyouwantatelephonenumber?

(Y/N)'

mess4db'

name?

mess5db'

name'

16dup('

'

),'

tel'

0dh,0ah,'

mess6db'

Notinthetable.'

mess7db'

Invalidinput!

countdb0

tel_tabdb50dup(20dup('

),8dup('

))

tempdb20dup('

),0dh,0ah,'

swappeddb0

datasegends

**********************************************************************

codesegsegment

codeseg,ds:

dataseg,es:

dataseg

pushds

subax,ax

pushax

movax,dataseg

movds,ax

moves,ax;

cld

leadi,tel_tab;

di中存放表首地址

inputloop:

movah,09h

leadx,mess1

callinput_name

cmpactnlen,0;

没有输入人名时

jza1;

直接跳到提示是否查找的地方

cmpcount,50;

输入上限

jea1

callstor_name;

保存人名到tel_tab

leadx,mess2

callinput_stor_phone;

输入并保存电话号码

jmpinputloop

a1:

cmpcount,1

jbesearchloop;

如果没有输入或者输入一个

callname_sort;

排序

calldisp_all;

显示所有

searchloop:

leadx,mess3

movah,01h

cmpal,'

N'

jeexit

n'

Y'

jeshowname

y'

jeshowname

leadx,crlf

leadx,mess7;

非法输入

jmpsearchloop

showname:

leadx,mess4;

当输入Y时,显示'

callinput_name;

输入要查找的人名

callname_search;

查找

callprintline

jmpsearchloop

ret

******************************************************

input_nameprocnear

movah,0ah

leadx,namepar

输入名字

movdl,0ah

换行

movbh,0;

bx高位置0

movbl,actnlen;

bx低位置输入名字个数

movcx,21

subcx,bx;

计算剩下的长度

i1:

mov_name[bx],20h

incbx

loopi1;

把bx之后剩下的填充空格

input_nameendp

*********************************************************

stor_nameprocnear

inccount;

有人名输入所以个数加1

cld

leasi,_name;

把si指向刚才输入名字的位置

movcx,10;

把name中的前20个字符放入tel_tab中每一个人信息的前20个byte中

repmovsw;

把si所指名字赋值给di所指地方tel_tab

stor_nameendp

*****************************************************

input_stor_phoneprocnear

leadx,phonepar

把电话号码存入phonrpar

换行

movbh,0

movbl,actplen

movcx,9

s2:

movphone[bx],20h;

剩下的地方填充空格

loops2

leasi,phone;

再把名字放入之后di就已经移动到名字之后了

movcx,4;

把phone中的前8个字符放入tel_tab中每一个人信息的后8个byte中

repmovsw

input_stor_phoneendp

*****************************************************************

name_sortprocnear

subdi,56

movendaddr,di

n1:

movswapped,0

leasi,tel_tab

n2:

movcx,20

movdi,si

adddi,28;

下一个被比较的名字

movax,di

movbx,si

repecmpsb;

比较20次

jben3;

小于或等于不用交换

callnpxchg

n3:

movsi,ax

cmpsi,endaddr

jben2

cmpswapped,0

jnzn1

name_sortendp

*****************************************************

npxchgprocnear

movcx,14;

交换名字和电话号码

leadi,temp

movsi,bx

moveloweritemtosave

movcx,14

movdi,bx

leasi,temp

repmovsw

movswapped,1

npxchgendp

************************************************************

disp_allprocnear

leadx,mess5

d1:

leadx,temp

deccount

jnzd1

disp_allendp

*********************************************

name_searchprocnear

addendaddr,28

e1:

leadi,_name;

存放待查找的人名地址

movcx,10

repecmpsw

jcxzexit3;

相等

addbx,28;

表中下一个比较的人名

jbee1

movcx,-1

exit3:

name_searchendp

*******************************************************

printlineprocnear

cmpcx,-1

jenorecord

输出name和tel

leadx,temp

输出名字和电话号码

norecord:

leadx,mess6

输出没找到

printlineendp

************************************************************

codesegends

四、使用说明

根据提示输入人名及电话号码,使用回车键表示输入结束,如不需输入人名,则在提示后直接输入回车键,表示输入完成,程序将自动显示电话号码表。

如需查询则可输入y(大小写均可),否则输入n(大小写均可)。

五、模块层次图及说明

(1)主函数main:

用来显示用户操作提示,调用子模块,使程序完成查找电话号码的过程;

(2)接收人名函数input_name:

输入人名,将此人名保存至缓冲区,并用空格补足剩余空间;

(3)保存人名函数stor_nam

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

当前位置:首页 > 工程科技 > 机械仪表

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

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