北京理工大学汇编语言实验报告实验三字符串操作实验Word下载.docx
- 文档编号:5346969
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:17
- 大小:178.40KB
北京理工大学汇编语言实验报告实验三字符串操作实验Word下载.docx
《北京理工大学汇编语言实验报告实验三字符串操作实验Word下载.docx》由会员分享,可在线阅读,更多相关《北京理工大学汇编语言实验报告实验三字符串操作实验Word下载.docx(17页珍藏版)》请在冰点文库上搜索。
经常与REP
配合工作的字符串处理指令有MOVS、STOS和LODS。
♦当REPE/REPZ判断计数寄存器的内容CX是否为0或ZF=0(即比较的两个操作数不等),只要满足一个则重复执行结束,否则继续执行。
可以与REPE/REPZ配合工作的串指令有CMPS和SCAS。
♦当REPNE/REPNZ判断计数寄存器的内容是否为0或ZF=1(即比较的两个操作数相等),只要满足一个则重复执行结束,否则继续执行。
3)字符串操作指令
♦lodsb、lodsw:
把
DS:
SI
指向的存储单元中的数据装入
AL
或
AX,然后根据
DF
标志增减
SI;
♦stosb、stosw:
AX
中的数据装入
ES:
DI
指向的存储单元,然后根据
DI;
♦movsb、movsw:
指向的存储单元中,
然后根据
标志分别增减
和
♦scasb、scasw:
中的数据与
指向的存储单元中的数据相减,影响标志位,然后根据
♦cmpsb、cmpsw:
指向的存储单元中的数据与
♦rep:
重复其后的串操作指令。
重复前先判断
是否为
0,为
就结束重复,否则CX
减
1,重复其后的串操作指令。
主要用在
MOVS
STOS
前。
一般不用在
LODS
上述指令涉及的寄存器:
段寄存器
DS
ES、变址寄存器
DI、累加器
AX、计数器CX
涉及的标志位:
DF、AF、CF、OF、PF、SF、ZF。
4、实验内容
1)编写程序,比较两个字符串BUF1和BUF所含的字符是否相同,相同则AL返回0,不同AL返回1,字符串长度要求自动获取,要求用字符串处理方法。
提示:
输入两个字符串之后,将串操作所必须的寄存器等参数设置好,然后使用串操作指令进行从头到尾的比较,两个字符串相等的条件是串长度相等且对应的字符相同。
(I)实验框图
(II)实验代码
DATASSEGMENT
BUF1DB'
ABCDEFGH'
COUNT1EQU$-BUF1;
利用EQU指令,自动获取字符串长度
DATASENDS
EXTRASEGMENT;
定义附加段,即ES段
BUF2DB'
COUNT2EQU$-BUF2;
功能同BUF1
EXTRAENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,ES:
EXTRA
START:
MOVAX,DATAS
MOVDS,AX
MOVAX,EXTRA
MOVES,AX
LEASI,BUF1;
把源操作串的地址放在SI中
LEADI,BUF2;
把目的操作串的地址放在DI中
MOVCX,COUNT1
CMPCX,COUNT2;
先比较BUF1、BUF2的长度
JNZEXIT1;
长度不一样,字符串不同,跳转到EXIT1
CLD;
设置字符串操作方向
REPECMPSB;
逐个字符比较
一旦有不同的字符,跳转到EXIT1
MOVAL,0;
若全部相同,则字符串相同,返回AL=0
JMPEXIT2
EXIT1:
MOVAL,1;
当字符串不同时,返回AL=1
EXIT2:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
(III)实验结果
序号
BUF1
BUF2
AL
1
ABCDEFGH
2
ABC
ABCDE
3
ABD
(IV)实验结果分析
序号1中,程序先经过比较字符串长度,相等后再逐一判断每个字符,确定都相等后,返回AL=0;
序号2中,比较字符串长度已经发现不相等,所以返回AL=1;
序号3中,比较了字符串长度,发现相等,进一步比较字符,循环到最后一个字符时,不相等,所以AL=1.
2)编写程序,设有一字符串存放在以
BUF
为首址的数据区中,其最后一字符‘$’作为结束标志,计算该字符串的长度并输出。
从串的第一个字符开始统计,直到遇到定义的字符串结束符为止,看看在这个过程中总共有多少个字符,即求得串的长度。
BUFDB'
TBE123000000$'
EXTRASEGMENT
CHARDB'
$'
;
ES段设置待比较的字符‘$’
EXTRAENDS
LEASI,BUF;
获取BUF的地址
L:
MOVAL,[SI]
SCASBCHAR
JNZEXIT1
JZEXIT2
INCSI;
不是‘$’,计数器加1,同时字符串后移一位
JMPL
DECSI;
SI多加了一个1
MOVAX,SI
MOVBL,10
DIVBL;
考虑SI是两位数的情况
MOVDX,AX
ADDDX,3030H;
把数字转化为ASCII码
MOVAH,02H
INT21H;
打印低位
MOVDL,DH
打印高位
ENDSTART
字符串
屏幕输出结果
'
123456$'
06
0123456789$'
10
序号1:
L循环了6次,查找到‘$’,故SI等于6,直接用DOS的2号功能打印出字符2,注意DL里的数字2转化为“字符2的ASCII码”,加上30H即可;
序号2:
循环十次,主要是逻辑上的两位数,要分离处理,因为2号功能只能打印一个字符;
考虑除以10,得到商作为十位,余数作为个位。
此时还是二进制,加上3030H,在打印即可。
3)编写程序,将内存中
BUF1
某一区域的数据传送到另一区域
BUF2中,要求用字符串处方
法。
TBE123000000'
COUNTEQU($-BUF1)
BUF2DBCOUNTDUP(?
);
定义了BUF1长度COUNT的字符串
LEASI,BUF1
LEADI,BUF2
MOVCX,COUNT;
设置CX的值
设置DF=0,[SI]增加的方向进行串操作
REPMOVSB;
进行数据段DS到附加段ES的搬移
字符串BUF1
结果
见下图
(IV)实验分析
本题难度较小,只要一个重复前缀REP,再用MOVSB就可以实现“搬移”。
4)编写程序,在已知字符串中搜索特定字符’#’,若找到则AL返回0,找不到AL返回1,要求用字符串处理方法。
TBE123000000'
#'
DATAS
LEADI,BUF1
MOVAL,'
‘#’放在AL中,准备使用SCASB指令
设置循环次数
设置DF=0,正向操作
REPNESCASB;
不相等时继续循环,相等时顺序执行下面指令
JZFOUND;
若ZF=0,说明找到‘#’,赋值AL=0
否则,没找到‘#’,赋值AL=1
JMPEXIT
FOUND:
MOVAL,0
EXIT:
TBE12300#'
BUF为'
的结果:
的结果:
本次实验较为简单,设置好CX和DF后,将‘#’放入AL,利用重复前缀REPNE以及字符串比较指令SCASB,进行逐个比较,一旦发现ZF=0,跳转到FOUND,对AL进行赋0;
否则,比较结束后,没找到‘#’,AL=1。
5)编写程序,统计一串字符串中字符"
&
"
出现的次数,要求用字符串处理方法。
BUF1db'
adc&
countequ$-string
STACKSSEGMENT
STACKSENDS
DATAS,SS:
STACKS
movbx,0;
将计数器BX清零
leasi,BUF1
movcx,count;
Cld;
DF=0,正向操作
L1:
lodsb
cmpal,'
jnzL2;
不是'
就继续循环
incbx;
是'
,BX就加1
L2:
loopL1
‘&
’个数(BX)
4
159*%¥@#'
将CX和DF设置好以后,就可以从第一个字符开始比较,这里用到CMP,而不是SCASB,因为前者可以用于比较并计数,后者只能扫描字符。
找到一个’&
’,就让BX加1,否则跳到LOOPL1,继续循环。
6)编写程序,设有一字符串已存放在
STRBUF
为首址的数据区中,编一程序找出其中的‘#’字符,如果字符串中不存在‘#’字符则应该输出“Not
found”。
strbufdb'
AB#&
countequ$-strbuf
string1db'
Notfound$'
string2db'
Found$'
可能会输出的字符串
movbx,0
leasi,strbuf;
获取字符串地址
movcx,count;
设置DF=0
jzL2
movah,9h;
未找到’#’,打印’Notfound’
leadx,string1
int21h
movah,9h
leadx,string2
int21h;
找到’#’,打印’Found’
ABCD&
Notfound
Found
本题与与第(4)题思路一样,只是最后结果的处理不一样,题目要求没找到‘#’,输出’Notfound’,需要调用DOS的9号功能来打印字符串;
在此基础上,没找到时,输出’Found’,更加直观。
5、实验心得
本次实验主要是要求熟练掌握字符串操作,在此基础上,还有一些打印输出的训练,比如打印单个字符、字符串。
通过实验,我对字符串操作有了更清晰的思路;
在此将字符串操作的主要流程归纳如下:
(1)数据段中的源串首地址放入SI;
(2)附加段中的目的串首地址放入DI;
(3)数据串长度放入CX;
(4)建立方向标志;
(CLD指令使DF=0,STD指令使DF=1)
(5)执行串操作。
在第五步中,会用到重复前缀,REP\REPZ\REPNZ等等,深入地了解了它们的循环条件后,会给编程带来很大便利。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北京理工大学 汇编语言 实验 报告 字符串 操作