北京理工大学汇编语言实验报告实验三字符串操作实验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三字符串操作实验

一、实验目的

1)熟悉串操作指令的功能与应用;

2)掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序;

3)了解汇编语言字符串处理基本流程;

二、实验软硬件环境

1)硬件环境:惠普64位一体化计算机及局域网;

2)软件环境:windows 8,红蜘蛛管理系统,MASM for Windows。

三、实验相关知识

1)字符串操作流程

♦ SI寄存器保存源串首地址;

♦ DI寄存器保存目的串首地址;

♦ CX寄存器保存字符串长度;

♦ CLD或STD指令设置字符串处理方向;

♦ 当CLD指令使DF=0,在执行串处理指令时可使地址自动增量;STD使DF=1,在执行串处理指令时可使地址自动减量。

2)重复前缀指令

♦ 重复次数由计数寄存器CX中存放的值决定,指令每重复执行一次,计数器CX中值减1,当CX中值减至0时,停止重复执行,继续执行下一条指令。

♦ 当REP无条件重复前缀,重复串操作直到计数寄存器的内容CX为0为止。经常与REP 配合工作的字符串处理指令有MOVS、STOS和LODS。

♦ 当REPE/REPZ判断计数寄存器的内容CX是否为0或ZF=0(即比较的两个操作数不等),只要满足一个则重复执行结束,否则继续执行。可以与REPE/REPZ配合工作的串指令有CMPS和SCAS。

♦ 当REPNE/REPNZ判断计数寄存器的内容是否为0或ZF=1(即比较的两个操作数相等),只要满足一个则重复执行结束,否则继续执行。可以与REPE/REPZ配合工作的串指令有CMPS和SCAS。

3)字符串操作指令

♦ lodsb、lodsw:把DS:SI指向的存储单元中的数据装入AL或AX,然后根据DF标志增减SI;

♦ stosb、stosw:把AL或AX中的数据装入ES:DI指向的存储单元,然后根据DF标志增减DI;♦ movsb、movsw:把DS:SI指向的存储单元中的数据装入ES:DI指向的存储单元中,

然后根据DF标志分别增减SI和DI;

♦ scasb、scasw:把AL或AX中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI;

♦ cmpsb、cmpsw:把DS:SI指向的存储单元中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI;

♦ rep:重复其后的串操作指令。重复前先判断CX是否为0,为0就结束重复,否则CX减1,重复其后的串操作指令。主要用在MOVS和STOS前。一般不用在LODS前。上述指令涉及的寄存器:段寄存器DS和ES、变址寄存器SI和DI、累加器AX、计数器 CX涉及的标志位:DF、AF、CF、OF、PF、SF、ZF。

四、实验内容

1)编写程序,比较两个字符串BUF1和BUF所含的字符是否相同,相同则AL返回0,不同AL返回1,字符串长度要求自动获取,要求用字符串处理方法。提示:输入两个字符串之后,将串操作所必须的寄存器等参数设置好,然后使用串操作指令进行从头到尾的比较,两个字符串相等的条件是串长度相等且对应的字符相同。

(I)实验框图

(II)实验代码

DATAS SEGMENT

BUF1 DB'ABCDEFGH'

COUNT1 EQU $-BUF1 ;利用EQU指令,自动获取字符串长度DATAS ENDS

EXTRA SEGMENT ;定义附加段,即ES段

BUF2 DB'ABCDEFGH'

COUNT2 EQU $-BUF2 ;功能同BUF1

EXTRA ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,ES:EXTRA

START:

MOV AX,DATAS

MOV DS,AX

MOV AX,EXTRA

MOV ES,AX

LEA SI,BUF1 ;把源操作串的地址放在SI中

LEA DI,BUF2 ;把目的操作串的地址放在DI中

MOV CX,COUNT1

CMP CX,COUNT2 ;先比较BUF1、BUF2的长度

JNZ EXIT1 ;长度不一样,字符串不同,跳转到EXIT1 CLD ;设置字符串操作方向

REPE CMPSB ;逐个字符比较

JNZ EXIT1 ;一旦有不同的字符,跳转到EXIT1

MOV AL,0 ;若全部相同,则字符串相同,返回AL=0

JMP EXIT2

EXIT1:

MOV AL,1 ;当字符串不同时,返回AL=1

EXIT2:

MOV AH,4CH

INT 21H

CODES ENDS

END START

(IV)实验结果分析

序号1中,程序先经过比较字符串长度,相等后再逐一判断每个字符,确定都相等后,返回AL=0;

序号2中,比较字符串长度已经发现不相等,所以返回AL=1;

序号3中,比较了字符串长度,发现相等,进一步比较字符,循环到最后一个字符时,不相等,所以AL=1.

2)编写程序,设有一字符串存放在以BUF 为首址的数据区中,其最后一字符‘$’作为结束标志,计算该字符串的长度并输出。提示:从串的第一个字符开始统计,直到遇到定义的字符串结束符为止,看看在这个过程中总共有多少个字符,即求得串的长度。

(I)实验框图

(II)实验代码

DATAS SEGMENT

BUF DB'TBE123000000 $'

DATAS ENDS

EXTRA SEGMENT

CHAR DB'$' ;ES段设置待比较的字符‘$’

EXTRA ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,ES:EXTRA

START:

MOV AX,DATAS

MOV DS,AX

MOV AX,EXTRA

MOV ES,AX

LEA SI,BUF ;获取BUF的地址

相关文档
最新文档