第3.3.5章 串操作类指令

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
第三章 80x86的指令系统和寻址方式 五) 的指令系统和寻址方式(五
串操作指令 五 串操作指令
p53
返回目录
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
五 串处理指令 数据传送、运算类指令每次只能处理一个数据, 数据传送、运算类指令每次只能处理一个数据,若要处理大批 数据就需要重复编程,这样就浪费了大量的时间和空间。 数据就需要重复编程,这样就浪费了大量的时间和空间。 为此8086/8088提供了一组处理主存中连续存放数据串的指令, 提供了一组处理主存中连续存放数据串的指令, 为此 提供了一组处理主存中连续存放数据串的指令 这就是串处理(串操作)指令。 这就是串处理(串操作)指令。
注:当地址长度为32位时,用ESI、EDI代SI、DI。
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
为了建立方向标志,介绍两条指令: 为了建立方向标志,介绍两条指令: 1CLD(clear direction flag)该指令使 ( )该指令使DF=0,在执行串处理指令 , 时可使地址自动增量; 时可使地址自动增量; 2STD(set direction flag)该指令使 ( )该指令使DF=1,在执行串处理指令时 , 可使地址自动减量。 可使地址自动减量。 执行MOVS指令前的准备工作 指令前的准备工作 执行 (1)先用 先用CLD指令清除 或用 指令清除DF或用 指令设置DF, 先用 指令清除 或用STD指令设置 ,这取决于字符串 指令设置 在内存中是向上端或向下端传送。 在内存中是向上端或向下端传送。 (2)将源字符串的地址偏移值送入 中(段地址一般为数据段 , 将源字符串的地址偏移值送入SI中 段地址一般为数据段DS, 将源字符串的地址偏移值送入 但可更改为附加段ES)。 但可更改为附加段 )。 (3)将目的串的地址偏移量送入 中(段地址只能为附加段 )。 将目的串的地址偏移量送入DI中 段地址只能为附加段ES)。 将目的串的地址偏移量送入 (4)将字节(或字)数送入CX中。 将字节(或字)数送入 中 将字节 (5)执行字符串传送指令。 执行字符串传送指令。 执行字符串传送指令
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
[例] 将数据段 例 将数据段BUF1起始的 起始的100字节的数据移动到 起始的 字节的数据移动到 BUF2起始的存储区中.(用串指令) 起始的存储区中.(用串指令) 起始的存储区中.(用串指令
MOV CX,100 LEA SI,BUF1 LEA DI,BUF2 MOV AL,[SI] MOV [DI],AL INC SI INC DI DEC CX JNZ NEXT
串处理(串操作)指令 串处理(串操作)指令: MOVS 串传送 CMPS SCAS LODS STOS INS OUTS 串比较 串扫描 从串取 存入串 串输入 串输出 与上述基本指令配合使用的前缀有: 与上述基本指令配合使用的前缀有: REP 重复 REPE/REPZ 相等/为零则重复 相等 为零则重复
串传送指令MOVS 1. 串传送指令MOVS 语句格式: 语句格式: ① MOVS DST, DST,SRC MOVSB——字节串传送 ② MOVSB 字节串传送 MOVSW——字串传送 ③ MOVSW 字串传送 MOVSD——双字串传送 4 MOVSD 双字串传送 功能:将以SI SI( ESI)为指针的源串中的一个字节(或字、 功能:将以SI(或ESI)为指针的源串中的一个字节(或字、双 存储单元中的数据传送至以DI DI( EDI) 字)存储单元中的数据传送至以DI(或EDI)为指针的目的地址 中去,并自动修改指针,使之指向下一个字节(或字、双字) 中去 , 并自动修改指针 , 使之指向下一个字节 ( 或字 、 双字 ) 存储单元。 存储单元。 即:① ES:[DI] ←(DS:[SI]) ES: DS:[SI]) DF=0 SI) DI)增量。 ② 当DF=0时,(SI)和(DI)增量。(+1或+2或+4) 或 或 ) 当DF=1时,(SI)和(DI)减量。 DF=1 SI) DI)减量。 (-1或-2或-4) 或 或 )
NEXT:
CLD NEXT: MOVSB
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
例(p55) 个数据, 例:有100个数据,从地址为 个数据 从地址为adr1单元区传送到地址为 单元区传送到地址为 adr2单元区,编出程序段: 单元区, 单元区 编出程序段: MOV SI, OFFSET adr1 MOV DI, OFFSET adr2 MOV CX, 64H CLD AGAIN: MOVS adr2, adr1 DEC CX JNZ AGAIN HLT
所有这类字符串的操作指令: 所有这类字符串的操作指令 都用寄存器SI寻址源操作数 段址在数据段DS中 寻址源操作数, 都用寄存器 寻址源操作数,段址在数据段 中; 寄存器DI寻址目的操作数 并且段地址在附加段ES 寻址目的操作数, 寄存器 寻址目的操作数,并且段地址在附加段 中, 两个地址指针在每一次操作以后要自动修改, 两个地址指针在每一次操作以后要自动修改,是按增 量修改还是按减量修改,这取决于标志寄存器中DF位 量修改还是按减量修改,这取决于标志寄存器中 位。 寄存器每处理一个字节( 若DF为0时,SI和DI寄存器每处理一个字节(或字) 为 时 和 寄存器每处理一个字节 或字) 就增加(字节操作时加1,字操作时加2),反之, ),反之 就增加(字节操作时加 ,字操作时加 ),反之,当 DF为1时就减小。 为 时就减小。 时就减小 DF标志位可用 标志位可用STD和CLD指令直接设置和复位。 指令直接设置和复位。 标志位可用 和 指令直接设置和复位 如果源字符串和目的字符串在同一个段中操作, 如果源字符串和目的字符串在同一个段中操作,则把 DS和ES设置成相同数值,即把 段更改为附加段。 设置成相同数值, 段更改为附加段。 和 设置成相同数值 即把DS段更改为附加段 8086指令系统提供了五个串操作指令和一种重复前缀, 指令系统提供了五个串操作指令和一种重复前缀, 指令系统提供了五个串操作指令和一种重复前缀 如表3.11所示。 所示。 如表 所示
REPNE/REPNZ 不相等 不为零则重复 不相等/不为零则重复 串处理指令处理存放在存储器里的数据串, 串处理指令处理存放在存储器里的数据串,所有 串指令都可以处理字节或字, 返回本节首页 串指令都可以处理字节或字,386及其后继机型 及其后继机型 还可处理双字。 还可处理双字。
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
Hale Waihona Puke Baidu
当相等/为 时重复串操作 (2) REPE/REPZ 当相等 为0时重复串操作 )
格式: 格式:REPE/REPZ string primitive (用来检查两字符串中是否 其中string primitive可为 可为CMPS或SCAS指令 有不同的元素 ) 其中 可为 或 指令 执行的操作: 执行的操作: 1如(COUNT REG)=0或ZF=0(即某次比较的结果两个操 ) 或 ( 作数不等)时退出REP,否则(即某次比较的结果两个操作数相等) 作数不等)时退出 ,否则(即某次比较的结果两个操作数相等) 往下执行。 往下执行。 2 (Count Reg) ← (Count Reg)-1 ) ) 3 执行其后的串处理指令 4 重复 1~ 3 其中,地址长度为 位时 位时, 作为Count Reg;地址长度为 位 其中,地址长度为16位时,用CX作为 作为 ;地址长度为32位 作为Count Reg。 时,用ECX作为 作为 。 总结:重复串操作条件: 总结:重复串操作条件: (COUNT REG)≠0且ZF=1; (即某次 ) 且 ; 比较的结果两个操作数相等) 比较的结果两个操作数相等) 退出串操作条件: 退出串操作条件: (COUNT REG)=0或ZF=0; 串操作条件 ) 或 ;
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
个数据, 例:有100个数据,从地址为 个数据 从地址为adr1单元区传送到 单元区传送到 地址为adr2单元区,编出程序段: 单元区, 地址为 单元区 编出程序段: MOV SI, OFFSET adr1 MOV DI, OFFSET adr2 MOV CX, 64H CLD AGAIN: MOVS adr2, adr1 DEC CX JNZ AGAIN HLT
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
关于重复前缀的设置: 关于重复前缀的设置: (1)REP重复串操作直到计数寄存器(Count Reg)的内容为 重复串操作直到计数寄存器( 的内容为0 重复串操作直到计数寄存器 的内容为 为止。 为止。 格式: string primitive 格式:REP 其中string primitive为MOVS,LODS,STOS,INS和OUTS指令 其中 为 , , , 和 指令 执行的操作: 执行的操作: 1如(COUNT REG)=0,则退出 ) ,则退出REP,否则往下执行。 ,否则往下执行。 2 (Count Reg) ← (Count Reg)-1 ) ) 3 执行其后的串处理指令 4 重复 1~ 3 其中,地址长度为 位时 位时, 作为Count Reg;地址长度为 位 其中,地址长度为16位时,用CX作为 作为 ;地址长度为32位 作为Count Reg。 时,用ECX作为 作为 。
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
当不相等/不为 不为0时重复串操作 (3) REPNE/REPNZ 当不相等 不为 时重复串操作 )
格式: 格式:REPNE / REPNZ string primitive (用来检查两字符串中 其中string primitive可为 可为CMPS或SCAS指令 是否有相同的元素 ) 其中 可为 或 指令 执行的操作: 执行的操作: 1如(COUNT REG)=0或ZF=1(即某次比较的结果两个操 ) 或 ( 作数相等)时退出REP,否则(即某次比较的结果两个操作数不等) 作数相等)时退出 ,否则(即某次比较的结果两个操作数不等) 往下执行。 往下执行。 2 (Count Reg) ← (Count Reg)-1 ) ) 3 执行其后的串处理指令 4 重复 1~ 3 其中,地址长度为 位时 位时, 作为Count Reg;地址长度为 位 其中,地址长度为16位时,用CX作为 作为 ;地址长度为32位 作为Count Reg。 时,用ECX作为 作为 。 总结:重复串操作条件: 总结:重复串操作条件: (COUNT REG)≠0且ZF=0; (即 ) 且 ; 某次 比较的结果两个操作数不等) 比较的结果两个操作数不等) 退出串操作条件: 退出串操作条件: (COUNT REG)=0或ZF=1; 串操作条件 ) 或 ;
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
表 3-11 字符串操作指令和重复前缀
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
(清华)图3.2 串操作流程图 清华)
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
2.串比较指令CMPS 2.串比较指令CMPS 串比较指令 语句格式: 语句格式: ① CMPS SRC, SRC,DST CMPSB——字节串比较 ② CMPSB 字节串比较 CMPSW——字串比较 ③ CMPSW 字串比较
相关文档
最新文档