《指令系统(串操作类指令).ppt》由会员分享,可在线阅读,更多相关《指令系统(串操作类指令).ppt(13页珍藏版)》请在金锄头文库上搜索。
1、第六节第六节第六节第六节 串操作指令串操作指令串操作指令串操作指令 定义定义定义定义串串串串指存储器中地址连续的若干单元字符或数据。指存储器中地址连续的若干单元字符或数据。指存储器中地址连续的若干单元字符或数据。指存储器中地址连续的若干单元字符或数据。vv串传送指令串传送指令串传送指令串传送指令 vv串比较指令串比较指令串比较指令串比较指令 vv串扫描指令串扫描指令串扫描指令串扫描指令vv串装入指令串装入指令串装入指令串装入指令 vv串存储指令串存储指令串存储指令串存储指令 8086808680868086提供的处理串的指令包含:提供的处理串的指令包含:提供的处理串的指令包含:提供的处理串的指
2、令包含:串处理指令只能处理单个串处理指令只能处理单个串处理指令只能处理单个串处理指令只能处理单个字节或字,应用中需要串字节或字,应用中需要串字节或字,应用中需要串字节或字,应用中需要串重复前缀配合使用。重复前缀配合使用。重复前缀配合使用。重复前缀配合使用。由多个字节数据组成的数据串称为字节数据串,简称由多个字节数据组成的数据串称为字节数据串,简称由多个字节数据组成的数据串称为字节数据串,简称由多个字节数据组成的数据串称为字节数据串,简称字节串字节串字节串字节串;由多个字数据组成的数据串称为字数据串,简称由多个字数据组成的数据串称为字数据串,简称由多个字数据组成的数据串称为字数据串,简称由多个字
3、数据组成的数据串称为字数据串,简称字串字串字串字串。组成数据串的字节数据或字数据称为数据组成数据串的字节数据或字数据称为数据组成数据串的字节数据或字数据称为数据组成数据串的字节数据或字数据称为数据串元素串元素串元素串元素。若对数据串元素作同样的操作,就称为若对数据串元素作同样的操作,就称为若对数据串元素作同样的操作,就称为若对数据串元素作同样的操作,就称为串操作串操作串操作串操作。把能完成串操作功能的指令称为数据串操作指令或简称为把能完成串操作功能的指令称为数据串操作指令或简称为把能完成串操作功能的指令称为数据串操作指令或简称为把能完成串操作功能的指令称为数据串操作指令或简称为串操作指令串操作
4、指令串操作指令串操作指令。串重复前缀指令:串重复前缀指令:串重复前缀指令:串重复前缀指令:REPREP( ( ( (重复重复重复重复) ) ) )、REPE/REPZREPE/REPZ( ( ( (相等相等相等相等/ /为零重复为零重复为零重复为零重复) ) ) )、REPNE/REPNZREPNE/REPNZ( ( ( (不相等不相等不相等不相等/ /不为零重复不为零重复不为零重复不为零重复) ) ) );CXCX寄存器存放重复操作的次数;寄存器存放重复操作的次数;寄存器存放重复操作的次数;寄存器存放重复操作的次数;一般源串存放在数据段一般源串存放在数据段一般源串存放在数据段一般源串存放在数
5、据段DSDS中,偏移地址由中,偏移地址由中,偏移地址由中,偏移地址由SISI指定;指定;指定;指定;目的串存放在附加段目的串存放在附加段目的串存放在附加段目的串存放在附加段ESES中,偏移地址由中,偏移地址由中,偏移地址由中,偏移地址由DIDI指定;指定;指定;指定;设置方向标志指令:设置方向标志指令:设置方向标志指令:设置方向标志指令:CLDCLD(DF=0DF=0)和)和)和)和STDSTD(DF=1DF=1)来设置来设置来设置来设置SISI、DIDI偏移地址在重复操作过程中的移动方向。偏移地址在重复操作过程中的移动方向。偏移地址在重复操作过程中的移动方向。偏移地址在重复操作过程中的移动方
6、向。教学进程教学进程教学进程教学进程基本的字符指令基本的字符指令基本的字符指令基本的字符指令 1.1.1.1.(1) (1) (1) (1) 串传送指令串传送指令串传送指令串传送指令MOVSMOVSMOVSMOVS 指令功能:把位于数据段指令功能:把位于数据段指令功能:把位于数据段指令功能:把位于数据段DS:SIDS:SIDS:SIDS:SI中一个字节或字的数据传送到中一个字节或字的数据传送到中一个字节或字的数据传送到中一个字节或字的数据传送到 附加段附加段附加段附加段ES:DIES:DIES:DIES:DI中。中。中。中。 指令格式:指令格式:指令格式:指令格式:MOVSBMOVSBMOVS
7、BMOVSB;传送字节数据;传送字节数据;传送字节数据;传送字节数据 MOVSWMOVSWMOVSWMOVSW;传送字数据;传送字数据;传送字数据;传送字数据 指令操作:指令操作:指令操作:指令操作: 字节操作:字节操作:字节操作:字节操作: ( ( ( (DI) DI) DI) DI) (SI)(SI)(SI)(SI),SISISISI(SI)1(SI)1(SI)1(SI)1,DIDIDIDI(DI)1 (DI)1 (DI)1 (DI)1 字字字字 操操操操 作:作:作:作: ( ( ( (DI) DI) DI) DI) (SI)(SI)(SI)(SI),SISISISI(SI)2(SI)2
8、(SI)2(SI)2,DIDIDIDI(DI)2(DI)2(DI)2(DI)2 (方向标志方向标志方向标志方向标志DF=0DF=0DF=0DF=0时用;时用;时用;时用;DF=1 DF=1 DF=1 DF=1 时用)时用)时用)时用) 本指令对标志位无影响本指令对标志位无影响本指令对标志位无影响本指令对标志位无影响例例414 414 将数据段中首地址为将数据段中首地址为SOURCESOURCE的的100100个字节串元素传送到附加段中首个字节串元素传送到附加段中首地址为地址为DESTDEST的内存单元中。的内存单元中。实现该功能的程序段如下:实现该功能的程序段如下:CLD CLD ;使;使DF
9、=0DF=0 LEA LEA SISI,SOURCESOURCE;SISI指向源串指向源串 LEA LEA DIDI,DEST DEST ;DIDI指向目的串指向目的串 MOV MOV CXCX,100100 AGAINAGAIN: MOVSBMOVSB ;(;(DS:SIDS:SI)ES:DIES:DI,;(;(SISI)+1SI,+1SI,(DIDI)+1DI+1DIDEC DEC CXCXJNZ JNZ AGAINAGAINHLTHLT本例中本例中MOVSBMOVSB指令可用以下指令可用以下4 4条指令替代:条指令替代: MOV ALMOV AL,SISIMOV ESMOV ES:DID
10、I,ALALINC SIINC SIINC DIINC DI(2)(2)(2)(2) 串比较指令串比较指令串比较指令串比较指令CMPSCMPSCMPSCMPS 指令功能:指令功能:指令功能:指令功能:将将将将ESES:DIDI指定的单元的内容减去由指定的单元的内容减去由指定的单元的内容减去由指定的单元的内容减去由DSDS:SISI指定单元的内容,指定单元的内容,指定单元的内容,指定单元的内容,不送回结果,只影响标志位不送回结果,只影响标志位不送回结果,只影响标志位不送回结果,只影响标志位CFCF、PFPF、AFAF、ZFZF、SFSF和和和和OFOF。 指令格式:指令格式:指令格式:指令格式:
11、CMPSBCMPSBCMPSBCMPSB;比较字节数据;比较字节数据;比较字节数据;比较字节数据 CMPSWCMPSWCMPSWCMPSW;比较字数据;比较字数据;比较字数据;比较字数据 指令操作:指令操作:指令操作:指令操作:(DI)-(SI(DI)-(SI(DI)-(SI(DI)-(SI), , 根据比较结果置条件标志位:根据比较结果置条件标志位:根据比较结果置条件标志位:根据比较结果置条件标志位: 相等相等相等相等 ZF=1ZF=1ZF=1ZF=1,不等不等不等不等 ZF=0ZF=0ZF=0ZF=0 字节操作:字节操作:字节操作:字节操作:SISISISI(SI)(SI)(SI)(SI)
12、 1 1 1 1, DIDIDIDI(DI)(DI)(DI)(DI) 1 1 1 1 字字字字 操操操操 作:作:作:作:SISISISI(SI)(SI)(SI)(SI) 2 2 2 2, DIDIDIDI(DI)(DI)(DI)(DI) 2 2 2 2 (方向标志方向标志方向标志方向标志DF=0DF=0DF=0DF=0时用;时用;时用;时用;DF=1 DF=1 DF=1 DF=1 时用)时用)时用)时用)例例例例415 415 415 415 检查数据段中首地址分别为检查数据段中首地址分别为检查数据段中首地址分别为检查数据段中首地址分别为STR1STR1STR1STR1和和和和STR2STR
13、2STR2STR2的两个长度为的两个长度为的两个长度为的两个长度为50505050的字节串是的字节串是的字节串是的字节串是否相等。若相等,则(否相等。若相等,则(否相等。若相等,则(否相等。若相等,则(BXBXBXBX)=0=0=0=0;若不相等,则;若不相等,则;若不相等,则;若不相等,则BXBXBXBX保存保存保存保存STR1STR1STR1STR1中第中第中第中第1 1 1 1个不相同元素个不相同元素个不相同元素个不相同元素的偏移地址,并将该元素保存到的偏移地址,并将该元素保存到的偏移地址,并将该元素保存到的偏移地址,并将该元素保存到ALALALAL中。中。中。中。实现该功能的程序段如下
14、:实现该功能的程序段如下:实现该功能的程序段如下:实现该功能的程序段如下:CLDCLDCLDCLDMOVMOVMOVMOVCXCXCXCX,50505050MOVMOVMOVMOVAXAXAXAX,DSDSDSDSMOVMOVMOVMOVESESESES,AXAXAXAX;使附加段与数据段重叠;使附加段与数据段重叠;使附加段与数据段重叠;使附加段与数据段重叠LEALEALEALEASISISISI,STR1STR1STR1STR1LEALEALEALEADIDIDIDI,STR2STR2STR2STR2LP1LP1LP1LP1:CMPSBCMPSBCMPSBCMPSB;(ES:DI)-(DS:
15、SI),(SI)+1SI,(DI)+1DI(ES:DI)-(DS:SI),(SI)+1SI,(DI)+1DI(ES:DI)-(DS:SI),(SI)+1SI,(DI)+1DI(ES:DI)-(DS:SI),(SI)+1SI,(DI)+1DIJNZJNZJNZJNZLP2LP2LP2LP2DECDECDECDECCXCXCXCXJNZJNZJNZJNZLP1LP1LP1LP1MOVMOVMOVMOVBXBXBXBX,0 0 0 0JMPJMPJMPJMPDONEDONEDONEDONELP2LP2LP2LP2:DECDECDECDECSISISISIMOVMOVMOVMOVBXBXBXBX,SI
16、SISISIMOVMOVMOVMOVALALALAL,SISISISIDONEDONEDONEDONE: HLTHLTHLTHLT(3)(3)(3)(3) 指令功能:指令功能:指令功能:指令功能:ALALALAL或或或或AXAXAXAX中的内容与附加段中的内容与附加段中的内容与附加段中的内容与附加段ESESESES: :DIDIDIDI所指的目的串中的所指的目的串中的所指的目的串中的所指的目的串中的 一个字节(或字)的数据相减,并根据结果设置标一个字节(或字)的数据相减,并根据结果设置标一个字节(或字)的数据相减,并根据结果设置标一个字节(或字)的数据相减,并根据结果设置标 志位,但结果不回送
17、任何单元。志位,但结果不回送任何单元。志位,但结果不回送任何单元。志位,但结果不回送任何单元。 指令格式:指令格式:指令格式:指令格式:SCASBSCASBSCASBSCASB;比较字节数据;比较字节数据;比较字节数据;比较字节数据 SCASWSCASWSCASWSCASW;比较字数据;比较字数据;比较字数据;比较字数据 指令操作:字节操作:指令操作:字节操作:指令操作:字节操作:指令操作:字节操作:( ( ( (AL)AL)AL)AL)(DI), (DI), (DI), (DI), DIDIDIDI(DI)(DI)(DI)(DI) 1 1 1 1 字字字字 操操操操 作:作:作:作: ( (
18、 ( (AX)AX)AX)AX)(DI), (DI), (DI), (DI), DIDIDIDI(DI)(DI)(DI)(DI) 2 2 2 2 (方向标志方向标志方向标志方向标志DF=0DF=0DF=0DF=0时用;时用;时用;时用;DF=1 DF=1 DF=1 DF=1 时用)时用)时用)时用) 串扫描指令串扫描指令串扫描指令串扫描指令SCASSCASSCASSCAS 指令功能:指令功能:指令功能:指令功能:将将将将DS:DS:SISISISI所指定的字节(或字)单元的内容取出来送入所指定的字节(或字)单元的内容取出来送入所指定的字节(或字)单元的内容取出来送入所指定的字节(或字)单元的内
19、容取出来送入ALALALAL(或(或(或(或AXAXAXAX)中。中。中。中。 指令格式:指令格式:指令格式:指令格式:LODSBLODSBLODSBLODSB;存字节数据;存字节数据;存字节数据;存字节数据 LODSWLODSWLODSWLODSW;存字数据;存字数据;存字数据;存字数据 指令操作:指令操作:指令操作:指令操作: 字节操作:字节操作:字节操作:字节操作:ALALALAL(SI)(SI)(SI)(SI),SISISISI(SI)(SI)(SI)(SI) 1 1 1 1 字字字字 操操操操 作:作:作:作:AXAXAXAX(SI)(SI)(SI)(SI),SISISISI(SI)
20、(SI)(SI)(SI) 2 2 2 2 (方向标志方向标志方向标志方向标志DF=0DF=0DF=0DF=0时用;时用;时用;时用;DF=1 DF=1 DF=1 DF=1 时用)时用)时用)时用) (4) (4) (4) (4) 串装入指令串装入指令串装入指令串装入指令LODSLODSLODSLODS 指令功能:指令功能:指令功能:指令功能:将将将将ALALALAL或或或或AXAXAXAX中的数据送入中的数据送入中的数据送入中的数据送入ESES:DIDIDIDI所指定的目标单元中。所指定的目标单元中。所指定的目标单元中。所指定的目标单元中。 指令格式:指令格式:指令格式:指令格式:STOSBS
21、TOSBSTOSBSTOSB; 存字节数据存字节数据存字节数据存字节数据 STOSWSTOSWSTOSWSTOSW; 存字数据存字数据存字数据存字数据 指令操作:指令操作:指令操作:指令操作: 字节操作:字节操作:字节操作:字节操作: ( ( ( (DI) DI) DI) DI) (AL)(AL)(AL)(AL),DIDIDIDI(DI)(DI)(DI)(DI) 1 1 1 1 字字字字 操操操操 作:作:作:作: ( ( ( (DI) DI) DI) DI) (AX)(AX)(AX)(AX),DIDIDIDI(DI)(DI)(DI)(DI) 2 2 2 2 (方向标志方向标志方向标志方向标志
22、DF=0DF=0DF=0DF=0时用;时用;时用;时用;DF=1 DF=1 DF=1 DF=1 时用)时用)时用)时用) (5)(5)(5)(5) 串存储指令串存储指令串存储指令串存储指令STOSSTOSSTOSSTOS 指令功能:指令功能:指令功能:指令功能:重复执行指令规定的操作,直到(重复执行指令规定的操作,直到(重复执行指令规定的操作,直到(重复执行指令规定的操作,直到(CXCXCXCX)=0=0=0=0。 指令格式:指令格式:指令格式:指令格式:REP MOVSREP MOVSREP MOVSREP MOVS(B/WB/WB/WB/W)或)或)或)或STOSSTOSSTOSSTOS(
23、B/WB/WB/WB/W)或)或)或)或LODSLODSLODSLODS(B/WB/WB/WB/W) 指令操作:指令操作:指令操作:指令操作: 如(如(如(如(CXCXCXCX)=0 =0 =0 =0 则退出则退出则退出则退出 REPREPREPREP,否则转否则转否则转否则转; (CXCXCXCX)(CXCXCXCX)1 1 1 1; 执行其后的串操作指令;执行其后的串操作指令;执行其后的串操作指令;执行其后的串操作指令; 重复重复重复重复。 (1)(1)(1)(1) 无条件重复前缀无条件重复前缀无条件重复前缀无条件重复前缀REPREPREPREP重复前缀重复前缀重复前缀重复前缀 2.2.2
24、.2.(2)(2)(2)(2) 指令功能:重复执行指令规定的操作,每执行一次串指令功能:重复执行指令规定的操作,每执行一次串指令功能:重复执行指令规定的操作,每执行一次串指令功能:重复执行指令规定的操作,每执行一次串 指令(指令(指令(指令(CXCXCXCX)1 1 1 1,并判断并判断并判断并判断ZFZFZFZF标志是否为标志是否为标志是否为标志是否为0 0 0 0, 只要(只要(只要(只要(CXCXCXCX)=0=0=0=0或或或或ZF=0ZF=0ZF=0ZF=0,则停止执行串操作指令。则停止执行串操作指令。则停止执行串操作指令。则停止执行串操作指令。 指令格式:指令格式:指令格式:指令格
25、式:REPE/REPZREPE/REPZREPE/REPZREPE/REPZ MOVSMOVSMOVSMOVS(B/WB/WB/WB/W)或)或)或)或STOSSTOSSTOSSTOS(B/WB/WB/WB/W)或)或)或)或LODSLODSLODSLODS(B/WB/WB/WB/W) 指令操作:指令操作:指令操作:指令操作: 如(如(如(如(CXCXCXCX)=0=0=0=0或或或或 ZF=0ZF=0ZF=0ZF=0则退出,否则转则退出,否则转则退出,否则转则退出,否则转; (CXCXCXCX)(CXCXCXCX)1 1 1 1; 执行其后的串操作指令;执行其后的串操作指令;执行其后的串操作
26、指令;执行其后的串操作指令; 重复重复重复重复 。 相等或为零时重复串前缀相等或为零时重复串前缀相等或为零时重复串前缀相等或为零时重复串前缀REPE/REPZREPE/REPZREPE/REPZREPE/REPZ例例例例4-164-164-164-16比较首地址分别为比较首地址分别为比较首地址分别为比较首地址分别为STR1STR1STR1STR1和和和和STR2STR2STR2STR2的两个长度为的两个长度为的两个长度为的两个长度为50505050的字节串,找出第一的字节串,找出第一的字节串,找出第一的字节串,找出第一个不相等的字节(要求用个不相等的字节(要求用个不相等的字节(要求用个不相等的
27、字节(要求用REPZREPZREPZREPZ指令实现)。若两串相同,则(指令实现)。若两串相同,则(指令实现)。若两串相同,则(指令实现)。若两串相同,则(BXBXBXBX)=0=0=0=0;若找;若找;若找;若找到不相等的字节,则将到不相等的字节,则将到不相等的字节,则将到不相等的字节,则将STR1STR1STR1STR1串中的这个数送到串中的这个数送到串中的这个数送到串中的这个数送到ALALALAL,基地址送,基地址送,基地址送,基地址送BXBXBXBX中。中。中。中。CLDCLDCLDCLDMOV MOV MOV MOV CXCXCXCX,100100100100LEA LEA LEA
28、LEA SISISISI,STR1STR1STR1STR1LEA LEA LEA LEA DIDIDIDI,STR2STR2STR2STR2REPZ REPZ REPZ REPZ CMPSBCMPSBCMPSBCMPSBJZ JZ JZ JZ OVEROVEROVEROVERDEC DEC DEC DEC SISISISIMOV MOV MOV MOV BXBXBXBX,SISISISIMOV MOV MOV MOV ALALALAL,SISISISIJMP JMP JMP JMP STOPSTOPSTOPSTOPOVEROVEROVEROVER: MOV MOV MOV MOV BXBXBX
29、BX,0 0 0 0STOPSTOPSTOPSTOP: HLTHLTHLTHLT(3)(3)(3)(3) 指令功能:指令功能:指令功能:指令功能:重复执行指令规定的操作,每执行一次串重复执行指令规定的操作,每执行一次串重复执行指令规定的操作,每执行一次串重复执行指令规定的操作,每执行一次串 指令(指令(指令(指令(CXCXCXCX)1 1 1 1,并判断并判断并判断并判断ZFZFZFZF标志是否为标志是否为标志是否为标志是否为1 1 1 1, 只要(只要(只要(只要(CXCXCXCX)=0=0=0=0或或或或ZF=1ZF=1ZF=1ZF=1,则停止执行串操作指令。则停止执行串操作指令。则停止执
30、行串操作指令。则停止执行串操作指令。 指令格式:指令格式:指令格式:指令格式:REPNE/REPNZ REPNE/REPNZ REPNE/REPNZ REPNE/REPNZ MOVS MOVS MOVS MOVS(B/WB/WB/WB/W)或)或)或)或STOSSTOSSTOSSTOS(B/WB/WB/WB/W)或)或)或)或LODSLODSLODSLODS(B/WB/WB/WB/W) 指令操作:指令操作:指令操作:指令操作: 如(如(如(如(CXCXCXCX)=0=0=0=0或或或或 ZF=1ZF=1ZF=1ZF=1则退出,否则转则退出,否则转则退出,否则转则退出,否则转; (CXCXCXC
31、X)(CXCXCXCX)1 1 1 1; 执行其后的串操作指令;执行其后的串操作指令;执行其后的串操作指令;执行其后的串操作指令; 重复重复重复重复 。 REPNE/REPNZREPNE/REPNZREPNE/REPNZREPNE/REPNZ不相等或不为零时重复串前缀不相等或不为零时重复串前缀不相等或不为零时重复串前缀不相等或不为零时重复串前缀注意:注意:在进行串操作前,应当设置好源串地址在进行串操作前,应当设置好源串地址在进行串操作前,应当设置好源串地址在进行串操作前,应当设置好源串地址DSDSDSDS:SISISISI、目的串地址、目的串地址、目的串地址、目的串地址ESESESES:DIDIDIDI、方向标志位方向标志位方向标志位方向标志位DFDFDFDF以及重复操作的次数以及重复操作的次数以及重复操作的次数以及重复操作的次数CXCXCXCX。