微机原理及应用第4章(5)课件_第1页
微机原理及应用第4章(5)课件_第2页
微机原理及应用第4章(5)课件_第3页
微机原理及应用第4章(5)课件_第4页
微机原理及应用第4章(5)课件_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、五、串操作指令 串的基本概念 顺序存放在内存中的一组数据,称为串。 用串的首(末)地址、元素类型、串的长度表示。1 串操作种类串传送 MOVS 将串从内存某一区域传送到另一区域。 从串取 LODS 从串中取出某一元素。 存入串 STOS 将某个数据存入串中。 串比较 CMPS 对两个串进行比较。 搜索串 SCAS 在串中搜索(查找)某数据(关键字) 2串指令的特点 指令给出串操作的种类、类型,而操作数隐含给出。 如 MOVSB ;字节 MOVSW ;字 源串 由DS : SI指向的单元 目的串 由ES : DI指向的单元 指令执行后,指针据DF标志、操作类型自动修改 字节操作 1 ; 字操作

2、2 DF= 0 用 + ; DF= 1 用 -3 只有一个存储器操作数的串指令 如 LODS(从串取) STOS(存入串) SCAS(搜索串) 另一个操作数在 AL (字节操作) 或 AX (字操作) 影响标志情况 CMPS(串比较)、SCAS(串搜索)影响标志, MOVS(串传送)、LODS(从串取)、STOS(存入串)不影响标志。4 串传送 格式 MOVSB 字节传送 MOVSW 字传送 MOVSB 执行操作 (ES:DI ) (DS:SI ) 字节传送 (SI ) (SI ) 1 修改源串指针 (DI) (DI ) 1 修改目的串指针 其中:DF = 0 ,用 + DF = 1 ,用 -

3、 MOVSW 执行操作 (ES:DI ) (DS:SI ) 字传送 (SI ) (SI ) 2 修改源串指针 (DI ) (DI ) 2 修改目的串指针其中: DF = 0 ,用 + DF = 1 ,用 -5从串取 格式 LODSB 取字节 LODSW 取字 LODSB执行操作 (AL) (DS:SI ) 从源串取入AL (SI ) (SI ) 1 修改源串指针其中: DF = 0 ,用 + DF = 1 ,用 - LODSW执行操作 (AX ) (DS:SI ) 从源串取入AX (SI ) (SI ) 2 修改源串指针其中: DF = 0 ,用 + DF = 1 ,用 -6存入串 格式 ST

4、OSB 存入字节 STOSW 存入字 STOSB执行操作 (ES:DI) (AL) 将AL存入目的串 (DI ) (DI ) 1 修改目的串指针其中: DF = 0 ,用 + DF = 1 ,用 - STOSW执行操作 (ES:DI) (AX) 将AX存入目的串 (DI) (DI ) 2 修改目的串指针其中: DF = 0 ,用 + DF = 1 ,用 -7例:把1000H开始的100个存储单元填入 ASCII码2AH(*)。程序段如下: MOV DI, 1000H ; 首地址 MOV AL, 2AH ;* MOV CX, 100 ; 重复执行100次 CLD ; 增量修改DI REPSTOS

5、B8串比较 格式 CMPSB 字节比较 CMPSW 字比较 CMPSB 执行操作 (DS:SI ) - (ES:DI ) 字节比较 (SI ) (SI ) 1 修改源串指针 (DI ) (DI ) 1 修改目的串指针 CMPSW 执行操作 (DS:SI ) - (ES:DI ) 字比较 (SI ) (SI ) 2 修改源串指针 (DI ) (DI ) 2 修改目的串指针注意:1. 源串 - 目的串 2. 两数相减,只影响标志,不影响操作数9 搜索串 格式 SCASB 取字节 SCASW 取字 SCASB执行操作 (AL) - (ES:DI ) 从目的串搜索字节 (DI ) (DI ) 1 修改

6、目的串指针 SCASW执行操作 (AX ) - (ES:DI ) 从目的串搜索字节 (DI) (DI ) 2 修改目的串指针两数相减,只影响标志,不影响操作数。10 重复控制前缀重复前缀REP 当相等重复前缀REPZ /REPE 当不相等重复前缀REPNZ /REPNE11重复前缀REP执行过程:(1)当(CX)= 0 ,结束REP, 执行REP下一条指令。(2)当(CX)0,将CX 的 内容减1, 执行REP后的串指令,返回 (1)。例 LEA DI, destination LEA SI, source MOV CX,20 REP MOVSB MOV AX, 0 只在(CX)=0时退出循环

7、12当相等重复前缀REPZ执行过程:(1) 当(CX)= 0 , 结束REPZ, 执行REPZ下一条指令;(2) 当(CX)0,将CX 的内容减1, 执行REPZ后的串指令;(3) 当ZF = 1, 返回 (1) ;(4) 当ZF1, 则结束REPZ, 执行REPZ下一条指令。 (CX)减1操作不影响标志 ZF标志由串操作决定13当不相等重复前缀REPNZ执行过程:(1) 当(CX )= 0 , 结束REPNZ, 执行REPNZ下一条指令。(2)当(CX)0,将CX 的内容减1, 执行REPNZ后的串指令。(3) 当ZF = 0, 返回(1);(4) 当ZF0, 则结束REPNZ, 执行REP

8、NZ下一条指令。14串指令使用的一般方法设置源串地址设置目标串地址设置串长度设置操作方向DF串指令MOV SI, 源串首地址(或LEA SI, 源串)MOV DI, 目的串首地址(或LEA DI, 目的串)MOV CX, 串长度CLD(或STD)串指令 15例1 用REP MOVS 进行数据块传送。 编程:设置传送方向 用CLD 使DF = 0, 地址增加方向(正向) 用STD 使 DF = 1, 地址减小方向(反向)设置源串地址 将源串首地址(DF=0),或末地址(DF=1)放入 DS、SI中。设置目的串地址 将目的串首地址(DF=0),或末地址(DF=1)放入 ES、DI中。设置串长度 将

9、串的长度(传送次数)放入CX中。字节传送用 REP MOVSB 字传送 用 REP MOVSW16例:用串传送指令实现200个字节的数据传送,MEM1为源串的首地址,MEM2为目的串的首地址: LEA SI,MEM1 LEA DI,MEM2 MOV CX,200 CLD REP MOVSB HLT17例2 比较string1和string2的两串, 长度为8字节18用REPZ CMPS 进行串比较 编程: 设置比较方向 (STD或CLD) 设置源串、目的串地址 将源串首地址(DF=0时),或末地址(DF=1时)放入 DS、SI 将目的串首地址(DF=0时),或末地址(DF=1时)放入ES、DI

10、 设置串长度 将串的长度放入CX中 按字节比较用 REPZ CMPSB 按字比较 用 REPZ CMPSW19执行完REPZ CMPS后,根据ZF判断两串比较结果。 若ZF=1, 两串相等,此时: CX=0, 表明串中所有元素已比较完毕 SI、DI指向串尾的下一单元。 若ZF=0, 两串不等,此时: CX的值为剩下的未比较的元素个数。 SI、DI指向不相等元素的下一元素。20code SEGMENT 、 CLD ;DF=0,正向比较 MOV AX,SEG string1 ;源串首地址 DS:SI MOV DS,AX LEA SI,string1 MOV AX,SEG string2 ;目的串首

11、地址 ES:DI MOV ES,AX LEA DI,string2 MOV CX, 8 ;串长度 CX REPZ CMPSB ;串比较 JZ equal ;利用ZF判断比较结果 不相等处理 JMP exit equal: 相等处理 exit: 、code ENDS 21例3 用REPNZ SCAS 在串中找关键字。编程步骤:设置查找方向设置串地址 将串的首地址(DF=0时),或末地址(DF=1时)放入ES、DI中。设置关键字 将关键字放入AL (关键字为字节)或放入AX(关键字为字)。设置串长度 将串的长度放入CX中。查找字节用 REPNZ SCASB 查找字 用 REPNZ SCASW22执

12、行完REPNZ SCAS后,根据ZF判断查找结果。 若 ZF=1, 则串中有关键字,此时: CX的值为剩下的未搜索的元素个数, DI指向关键字元素的下一元素, 而关键字在( DI )-1的位置 若 ZF=0, 则串中无关键字,此时: CX=0,表明串中所有元素以搜索完毕 DI指向串尾的下一单元。23例 MOV AL, $ 、 REPNZ SCASB JZ found 未找到处理 JMP exitfound: 找到处理exit: 、24串指令可单独使用 MOV AL, SI MOV ES:DI, AL 等价于 MOVSB INC SI INC DI (假设 DF=0) next: JCXZ ex

13、it DEC CX MOVSB 等价于 REP MOVSB JNZ next exit: 、 说明:25重复前缀中CX 减1操作,不影响标志。26处理机控制指令1、标志处理指令 CLC, STC, CMC, CLD, STD, CLI, STI 2、 处理机控制指令HLT, NOP, WAIT, ESC, LOCK271、 标志处理指令设置和清除标志的指令,只影响指令指定的标志282、 处理机控制指令 暂停指令HLT 格式 HLT 执行 使CPU处于暂停状态用于等待外部中断,中断处理结束后,继续执行HLT后的下一条指令例 、 、 STI ;允许外部中断 HLT ;等待中断 MOV AX, 0

14、、 、(HLT指令在第6章中断技术用到)29 空操作指令NOP 格式 NOP 指令不执行任何操作例:(也可用NOP指令进行短延时(教材中的一些例子用到)其机器码占一个字节单元, 在调试程序时,修改程序用。MOV BX, 100 00B8 0107 3ACMP AL,BXB8FE11MOV BX, 100 00B8 0190 90CMP AL,BX903A07NOPNOPNOPMOV CX, 20HB9 20 0030指令助记符表31322. 学习指令的要点从以下几个方面来掌握一条指令: 指令的助记符 指令的格式:操作数的个数、类型(B,W,DW) 执行的操作:指令执行后的结果包括: 哪些寄存器

15、、内存单元的值发生了变化 对标志位有无影响,哪些受影响 特点及注意事项 只介绍常用的指令,其他需要时可自学。333. 指令中操作数的表示符号表示内容data立即数操作数reg通用寄存器操作数 8位:AH、AL、BH、BL、CH、CL、DH、DL 16位:AX、BX、CX、DX、BP、SP、SI、DIsegreg段寄存器 CS、DS、SS、ESmem或 存储器操作数(5种寻址方式)src源操作数dst目的操作数 ( )注释时表示寄存器、存储器、端口的内容oprd1oprd2两操作数344. 书写指令注意事项: 不区分字母的大小写。下列写法表示同一条指令:MOV AX, 1ABDH mov ax,

16、 1abdh 不添加指令系统没有的指令,即不自创助记符。将 MOV AL , 0 写成 MOVE AL,0 JMP lable 写成 JUMP lable35 注意操作数的范围对字节操作指令 0 FFH 0 255 对字操作指令 0 FFFFH 0 65535 MOV AL , 260 MOV AX ,70000 MOV AL, 1FFH MOV AL, 2ABCDH 36 对无操作数指令,不添加操作数。 STC AL 对单操作数指令,操作数不能是立即数。 IMUL 6 37 对双操作数指令 不能两个同为存储器操作数 MOV DI , SI 目的操作数不能是立即数 ADD 3 , AL 两个操作数的类型应相同 SUB AX , BL 若 value 定义为字类型存储器变量: MOV CL, value BX 38 内存操作数的属性应明确。 MOV BX ,0MOV BYTE PTR BX , 0MOV WORD PTR BX , 0MOV BX , ALMOV BX , AX39 A、B、C、D、E、F开头的十六进制数前面加0, 与H结尾的标识符区别。如 寄存器名: AH、BH、CH、DH 变

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论