当前课程知识点:微机原理与接口技术 >  第6周 串操作指令 >  第22讲 串传送与串比较 >  串传送与串比较

返回《微机原理与接口技术》慕课在线视频课程列表

串传送与串比较在线视频

串传送与串比较

下一节:串扫描指令

返回《微机原理与接口技术》慕课在线视频列表

串传送与串比较课程教案、知识点、字幕

下边我们来学习具体的串操作指令

串传送指令的功能

是将源数据串传送到目标地址

它的格式是这样

这条指令中

源操作数称为源串

目标操作数称为目标串

这条指令的功能实际上完成了这样一个工作

我们前面已经讲过

在串操作指令中 源串指针必须用

SI来给出

目标串的指针必须由DI来给出

而目标串必须在附加段

源串一般在数据段

言下之意就说默认的情况下

源串是在数据段中

因此这种格式往往仅用在

我们需要对源串进行段重设的情况下

而更多的时候

我们会直接采用下边的这两种格式

这种就是按字节传送的时候
我们会采用第二种格式

而如果按照字传送的话
我们会采用第三种格式

串传送指令呢 它的前边如果加

重复前缀的话

只能加无条件重复前缀

其实经常的情况下

MOVS指令的前边我们都会

添加无条件重复前缀

因为加了无条件重复前缀

MOVS指令就会自动的

重复的传送下去

直到串的传送结束为止

也就是说 MOVS指令本身就

可以构成我们前边的那个

控制流程中的循环结构了

下边我们来用一个例子来看一下

我们分别用MOV指令和MOVS指令来编写

将200个字节的数据从内存数据段

MEM1为首地址的区域

送到同一个逻辑段

也就是现在当前的数据段中

MEM2为首地址的区域中

这个是我们前面讲LEA指令就已经看到过的例

就首先我们用LEA指令分别取了

MEM1和MEM2的偏移地址

到SI和DI

然后设定串的长度值

是200送给CX

然后就完成一个字节的传送

因为是按字节传送

所以下边的指针就是加1修改

自然就相当于按增地址方向去操作了

那么CX减1 直到它不为零为止

那么这个程序如果我们用

MOVS指令来完成的话

它的该怎么修改呢?

它会是这样子

在这里

也就说现在

红色虚线框中的这个功能

完全就用这两条指令来取代

这里的CLD

就是将DF标志位清零的意思

Clear DF

我们上一讲已经看到

DF清零表示按增地址方向操作

所以有了它之后

MOVSB这条指令

就是完成了按字节传送

并且修改地址指针

也就说INCSI和INCDI这样的工作

这里边前面这四行指令

就是用MOVSB来完成的

而下边的DECCX也就是CX减1

以及判断减到零了没有这两条指令的功能

就是用REP这个重复前缀来完成的

大家对比一下

用MOV指令和MOVS指令

在程序的简洁性上

显然用串操作指令

会显得更加简练

但是另外 从这个例子里头

我们也能够感觉到

串传送指令

实际上完全可以用MOV指令来取代

因此呢

你同样的功能 你用MOV去完成

也可以 用MOVS去完成也可以

只是用MOVS指令呢它会使得程序

显得比较清晰

如果我们实现了这200个

字节的传送 传送完了之后 假设我们现在

不确定它到底传对了还是没对

那么这个时候怎么办呢?

一个很简单的办法就是我们对比一下

我们源串和我们传完了之后的
目标地址中的那个目标串

到底是不是相等

也就说去比较一下

这个时候就用到了串比较指令

因此串比较指令的主要功能

就是用来实现两个数据串的比较

它的操作是用目标串去减源串

但是结果不要了 也就是结果不写回目标地址

这个和CMP指令是完全一样的操作

只不过CMP指令操作的对象

是两个字节数或者两个双字节数

而这里

操作的对象是两个数据串而已

因为这里有

比较的操作 也就说是一种运算性质的指令

因此串比较指令的前边经常

添加条件重复前缀

具体加相等重复的前缀还是加
不相等则重复的前缀

那要看具体的应用来定

串比较指令的格式是这样

同样的

只有在需要对源串进行

段重设的时候我们才会采用这种格式

在更多的情况下

我们会使用下边这两种格式

这里的第二条就是按字节比较
第三条是按字比较

请大家注意串比较指令

它的执行会对标志位产生影响

会影响全部6个状态标志位

这一点和CMP指令是完全一样的

但是前缀的操作对标志位不影响

虽然前缀

我们说它实现了对CX减1这样的操作

但是即使它将CX减到了零

它也不会对标志位产生影响

对标志位的影响 或者说

执行完后标志位的状态

完全取决于CMPS它的执行结果

下边我们同样通过一个示例
来说明这样一个问题

假设我们这个例子就是用来测试

刚才前面那个例子中
200个字节的数据传完了以后

这个是不是传正确了?

同样的按照所有串操作指令的控制流程

我们首先要取

源串的偏移地址 目标串的偏移地址

然后设定串的长度值

以及串的操作方向

这些都是没有问题的

这四步就是串操作的初始化的工作

之后我们就进行串比较

之后我们就要进行串比较

那么之后我们就进行串比较

假设我们按字节来进行比较

因为这里的串的长度值我们已经

或者说操作次数我们已经设置成200了

所以肯定要用字节来进行比较

所以就用CMPSB

那么这个时候如果前面加条件重复前缀

我们到底是加相等则重复呢还是

加不相等则重复呢

按照这样一个题目的要求

我们

去测试我们刚才传送的200个字节的数据

到底传正确了还是没有正确?

这个言下之意

我们应该说

绝大多数情况下我们传送的是正确的

因此我们这个时候前面一定要加

相等则重复的前缀

大家试想一下 如果加不相等则重复的前缀

我们第一个字节进行比较可能就相等

那么这是不是就不重复下去了

所以这里要加REPE或者REPZ

那么

这条指令执行结束

或者说结束这条指令执行就有两种可能

一种是CX等于零了

也就说我们整个比较结束

还有一种

是CX没有等于零

也就说串比较其实没有比较完

但是因为ZF等于零了

所以它不满足REPE

这样的一个重复条件
那么它也会结束这条指令的执行

这两种可能意味着完全不同的意思

如果说CX等于零

结束这条CMPSB指令的执行

那么就意味着我们两个串完全相等

也就说都比较完了
我们都没有发现不相等的值

所以每一次的比较结果

都会使ZF等于1 因为两个字节相等 对吧

那么如果是因为ZF等于零
退出这条指令的执行

那么就意味着

我们碰到了不相等的

字节

那么这个时候就要做相应的处理了

所以下边我们

就需要去判断到底是因为哪一种原因
来结束了这条CMPSB指令的执行的

怎么判断呢? 那么我们用

JZ这条指令

这条条件转移指令

也就说它用来判断ZF的状态

当ZF等于1的时候

那么我们就让它转移到STOP

也就说这个时候意味着两个数据串完全相同

就结束程序的执行了

如果ZF等于零

那么它就不会转向STOP

它就会接着向下

这三条指令在干什么?

这一条指令是将SI减1

SI减1我们刚才从控制流程里我们已经看到

当结束串操作的时候呢

指针都会指向刚才最后一个字节

所在的地址

加1的那个位置

因此我们现在把地址指针减1

实际上就是指向了存放不相等数据的地址

那么后边这两行

都是获取不相等的数据

以及存放该数据的地址

微机原理与接口技术课程列表:

第1周 微型计算机基础概论

-第1讲 关于本课程

--关于本课程

-第2讲 微型计算机系统

--微机系统_01

--微机系统_02

-第3讲 微型计算机一般工作过程

--微机的一般工作过程_01

--微机的一般工作过程_02

-第4讲 数制与编码

--常用计数制及其转换

--计算机中的编码

-第5讲 计算机中数的表示与运算

--数的表示

--符号数的表示

--数的表示与运算

-第6讲 基本逻辑运算与逻辑电路

--基本逻辑运算与逻辑门

--常用逻辑运算及电路

-第7讲 本周小结

--本周小结

-第1周 微型计算机基础概论--第一周单元测验

第2周 8088微处理器

-第8讲 8088微处理器

--8088 CPU_01

--8088 CPU_02

-第9讲 8088 CPU主要引线及机构

--8088 CPU主要引线

--8088 CPU内部结构

--8088 CPU内部寄存器

-第2周 8088微处理器--第二周单元测验

第3周 实模式存储器寻址与总线

-第10讲 实模式存储器寻址

--实模式存储器寻址_01

--实模式存储器寻址_02

--实模式存储器寻址_03

-第11讲 8088系统总线

--8088系统总线

-第12讲 微处理器小结

--微处理器小结

-单元测验--作业

第4周 数据传送指令

-第13讲 指令概述

--指令概述

-第14讲 寻址方式

--寻址方式

-第15讲 通用数据传送指令

--通用数据传送指令_01

--通用数据传送指令_02

--通用数据传送指令_03

-第16讲 地址传送指令

--地址传送指令

-第17讲 输入输出指令

--输入输出指令

-第4周 数据传送指令--第四周单元测验

第5周 算术运算、逻辑运算与移位操作指令

-第18讲 算术运算指令

--加法运算指令

--减法指令

--乘除运算指令

-第19讲 逻辑运算指令

--逻辑运算指令_01

--逻辑运算指令_02

-第20讲 移位操作指令

--移位操作指令

-第5周 算术运算、逻辑运算与移位操作指令--第五周单元测验

第6周 串操作指令

-第21讲 关于串操作指令的说明

--串操作指令说明

-第22讲 串传送与串比较

--串传送与串比较

-第23讲 串扫描指令

--串扫描指令

-第24讲 串装入与串存储指令

--串装入与串存储指令

-第六周单元测验--作业

第7周 程序与处理器控制

-第25讲 程序控制指令说明

--程序控制类指令说明

-第26讲 转移类指令

--无条件转移指令

--条件转移指令

-第27讲 循环控制指令

--循环控制指令

-第28讲 过程调用指令

--过程调用指令

-第29讲 中断指令

--中断指令

-第30讲 处理器控制指令

--处理器控制指令

-第31讲 指令系统小结

--指令系统小结

-第7周 程序与处理器控制--第七周单元测验

-第7周 程序与处理器控制--第七周作业

第8周 汇编语言程序设计

-第32讲 汇编语言源程序

-- 汇编语言源程序_01

-- 汇编语言源程序_02

-第33讲 伪指令

--数据定义伪指令

--符号与段定义伪指令

--汇编语言源程序结构例

--其它伪指令

-第34讲 系统功能调用

--系统功能调用_01

--系统功能调用_02

-第35讲 汇编语言程序设计示例详解

--程序设计示例1

--汇编语言程序设计示例_02

-第36讲 汇编语言程序设计小结

--汇编语言程序设计小结

-第8周 汇编语言程序设计--第八周单元测验

-第8周 汇编语言程序设计--第八周作业

第9周 半导体存储器

-第37讲 半导体存储器概述

--半导体存储器概述

-第38讲 内存单元编址

--存储单元编址

-第39讲 随机存取存储器RAM

-- RAM_01

--RAM_02

-第40讲 只读存储器ROM

--ROM_01

--ROM_02

-第九周单元测验--作业

第10周 半导体存储器扩展技术

-第41讲 半导体存储器扩展

--半导体存储器扩展_1

--存储器扩展_2

--半导体存储器扩展_3

-第42讲 半导体存储器小结

--半导体存储器小结

-第十周单元测验--作业

-第十周作业--作业

第11周 输入输出与中断技术

-第43讲 基本I/O接口

--I/O系统概述_01

--I/O系统概述_02

-第44讲 简单接口芯片

--简单接口芯片

-第45讲 基本输入输出方法

--基本I/O方法

-第46讲 简单I/O控制系统设计

--简单I/O控制系统设计1

--简单I/O控制系统设计2

-第47讲 中断技术

--中断技术1

--中断技术2

-第48讲 输入输出与中断技术小结

--本周小结

-第十一周单元测验--作业

第12周 可编程并行数字接口

-第49讲 可编程定时计数器

--可编程定时计数器8253_01

--可编程定时计数器8253_02

--可编程定时计数器8253_03

-第50讲 可编程并行接口

--可编程并接口8255_01

--可编程并行接口8255_02

--可编程并行接口8255_03

-第51讲 可编程接口小结

--本周小结_01

--本周小结_02

-第十二周单元测验

第13周 模拟量的输入输出

-第52讲 模拟量的输入输出

--模拟量的输入输出

-第53讲 D/A转换器

--D/A转换器_01

--D/A转换器_02

-第54讲 A/D转换器

-- A/D转换器_01

--A/D转换器_02

-第十三周单元测验--作业

第14周 系统综合设计示例详解

-第55讲 I/O接口系统综合设计示例详解I

--综合设计示例详解I_01

--综合设计示例详解I_02

-第56讲 综合设计示例详解II

--综合设计示例详解II_01

--综合设计示例详解II_02

-第57讲 结束语

--结束语

串传送与串比较笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。