当前课程知识点:微机原理与接口技术 > 第6周 串操作指令 > 第23讲 串扫描指令 > 串扫描指令
串扫描指令
经常用来在指定的存储区域中
寻找某个关键字
它所执行的操作
和串比较指令非常的类似
只不过这个时候
它不是在做两个数据串的比较
而是用累加器的里面的值
去在一串数据中去查找
有没有和累加器中内容相等的那个关键字
所以在格式上
串扫描指令是一个单操作数格式的指令
这里显示给出的这个对象是目标操作数
因为串操作指令
规定了目标操作数
必须在附加段 指针必须是DI
因此这种格式我们一般也不会使用
而更多的会采用下边两种格式
就是按字节扫描或者按字扫描
这条指令的操作
刚才我们说和CMPS指令非常的相似
它的唯一的区别就是在这里
它的源操作数
是AX或者AL
也就说如果是按字节去扫描的话
它的源操作数就是AL
而如果按字扫描的话 源操作数就是AX
换句话讲 这一条指令
它的操作过程
就是用AL的值或者AX的值
依次与附加段中
每一个字节单元或者每两个字节单元
去做相减的运算
但是相减的结果
不写回目标
也就说相减完了以后结果是不要了
但是通过标志位的状态来判断
AL或者AX的值
与它所比较的对象是不是一致
我们下边来看一个例
在附加段中从2000H单元开始存放了
10个字符
要求寻找其中有没有大写字母A
如果有则记下搜索次数
并且将搜索次数写入到DATA1单元
然后将存放大写字母A的地址
写入到DATA2单元
好 这几条指令就是完成串操作指令
的初始化过程
首先我们把偏移地址送给DI
这个是将这个偏移地址做一个备份放到BX
为什么要做这个我们后边再来解释
因为有10个字符 所以我们把这个10送给CX
当然你这里写0AH 写10都是可以的
我们要搜索的关键字是大写字母A
我们把它送给AL
好了
当然我们还要设定操作方向
假设我们按增地址方向操作
所以我们将DF清为零
那么下边我们就开始要进行扫描了
扫描的含义刚才我们已经说
是用累加器AL的值
在附加段中一个单元一个单元的去比
看哪个单元里头的值会和AL的值相等
那么
言下之意就说在附加段这个区域中
可能在多数情况下
单元里的内容都跟AL值不相等
因此这个时候如果加
条件重复前缀的话
我们要加不相等则重复的前缀
也就说只要碰到不相等
那么就意味着没找着
那么就可以继续比较下去
因为
SCSB这条指令执行的是和CMPSB
几乎一样的工作
所以呢
它结束这条指令的执行也有两种可能
一种就是CX等于零
还有一种就是CX不等于零
但是ZF等于1了
就说碰到了相等
那么同样的我们下边也就是需要通过ZF
去判断ZF的状态
来判断到底是因为哪一种原因
这一点跟刚下那个例子是一样的
所以 如果ZF等于1
就意味着在这个区域中找到了大写字母A
假设大写字母A在这个位置
按照我们刚才串操作指令的控制流程
我们可以知道
即使找着了这个大写字母A
那么这个时候SCSB这条指令
也不能够立刻停下来
而是要使得指针加1
然后再将CX减1
然后再去判断到底还满足不满足
继续重复的条件
因为这个时候它前面加的是
不相等则重复的前缀
所以如果ZF等于1的话
那么它就不管CX等于零还是不等于零
它都不会
再重复下去了
因此它就会退出这条指令的执行了
那么这个时候
指针会是现在红色箭头所指向的位置
也就是说我们大写字母A所在的这个地址
加1的这个位置上
那么按照题目的要求 我们要去确定
存放大写字母A的地址
因此我们现在需要把这个
地址减1
这才是刚才存放大写字母A的地方
所以下边把这个减1之后呢
这个就是地址写到了DATA2里头
然后呢 再加1
回到这个位置
回到再加1
回到存放大写字母A这个单元的
下一个单元
用它去减去BX
这就相当于得到了搜索次数
把搜索次数送给DATA1
好了 这程序就结束了
那么如果没有找到A 就说刚才执行完以后
ZF等于零
一直都是ZF等于零
但是呢 因为CX等于零的时候
我们就不会再去扫描了
所以那么它就不会转向了FOUND
那么就指向了下边
这个是串扫描指令
它的一个应用
总而言之串扫描
和串比较指令执行着几乎完全一样的操作
唯一的区别就是串比较指令
是实现了源串和目标串之间的比较
而串扫描指令呢
它的源串不是一个串 而是一个操作数
也就说它的源串是累加器AL或者AX
-第1讲 关于本课程
--关于本课程
-第2讲 微型计算机系统
--微机系统_01
--微机系统_02
-第3讲 微型计算机一般工作过程
-第4讲 数制与编码
--计算机中的编码
-第5讲 计算机中数的表示与运算
--数的表示
--符号数的表示
--数的表示与运算
-第6讲 基本逻辑运算与逻辑电路
-第7讲 本周小结
--本周小结
-第1周 微型计算机基础概论--第一周单元测验
-第8讲 8088微处理器
-第9讲 8088 CPU主要引线及机构
-第2周 8088微处理器--第二周单元测验
-第10讲 实模式存储器寻址
-第11讲 8088系统总线
--8088系统总线
-第12讲 微处理器小结
--微处理器小结
-单元测验--作业
-第13讲 指令概述
--指令概述
-第14讲 寻址方式
--寻址方式
-第15讲 通用数据传送指令
-第16讲 地址传送指令
--地址传送指令
-第17讲 输入输出指令
--输入输出指令
-第4周 数据传送指令--第四周单元测验
-第18讲 算术运算指令
--加法运算指令
--减法指令
--乘除运算指令
-第19讲 逻辑运算指令
-第20讲 移位操作指令
--移位操作指令
-第5周 算术运算、逻辑运算与移位操作指令--第五周单元测验
-第21讲 关于串操作指令的说明
--串操作指令说明
-第22讲 串传送与串比较
--串传送与串比较
-第23讲 串扫描指令
--串扫描指令
-第24讲 串装入与串存储指令
-第六周单元测验--作业
-第25讲 程序控制指令说明
-第26讲 转移类指令
--无条件转移指令
--条件转移指令
-第27讲 循环控制指令
--循环控制指令
-第28讲 过程调用指令
--过程调用指令
-第29讲 中断指令
--中断指令
-第30讲 处理器控制指令
--处理器控制指令
-第31讲 指令系统小结
--指令系统小结
-第7周 程序与处理器控制--第七周单元测验
-第7周 程序与处理器控制--第七周作业
-第32讲 汇编语言源程序
-- 汇编语言源程序_01
-- 汇编语言源程序_02
-第33讲 伪指令
--数据定义伪指令
--其它伪指令
-第34讲 系统功能调用
-第35讲 汇编语言程序设计示例详解
--程序设计示例1
-第36讲 汇编语言程序设计小结
-第8周 汇编语言程序设计--第八周单元测验
-第8周 汇编语言程序设计--第八周作业
-第37讲 半导体存储器概述
--半导体存储器概述
-第38讲 内存单元编址
--存储单元编址
-第39讲 随机存取存储器RAM
-- RAM_01
--RAM_02
-第40讲 只读存储器ROM
--ROM_01
--ROM_02
-第九周单元测验--作业
-第41讲 半导体存储器扩展
--存储器扩展_2
-第42讲 半导体存储器小结
--半导体存储器小结
-第十周单元测验--作业
-第十周作业--作业
-第43讲 基本I/O接口
-第44讲 简单接口芯片
--简单接口芯片
-第45讲 基本输入输出方法
--基本I/O方法
-第46讲 简单I/O控制系统设计
-第47讲 中断技术
--中断技术1
--中断技术2
-第48讲 输入输出与中断技术小结
--本周小结
-第十一周单元测验--作业
-第49讲 可编程定时计数器
-第50讲 可编程并行接口
-第51讲 可编程接口小结
--本周小结_01
--本周小结_02
-第十二周单元测验
-第52讲 模拟量的输入输出
--模拟量的输入输出
-第53讲 D/A转换器
-第54讲 A/D转换器
-- A/D转换器_01
-第十三周单元测验--作业
-第55讲 I/O接口系统综合设计示例详解I
-第56讲 综合设计示例详解II
-第57讲 结束语
--结束语