1、五、串操作指令五、串操作指令l 串的基本概念串的基本概念 顺序存放在内存中的一组数据,称为串顺序存放在内存中的一组数据,称为串。用串的首(末)地址、元素类型、串的长度表示。用串的首(末)地址、元素类型、串的长度表示。1234:0000stringDS:BXA B C D E、Y Z1122331a2b3c4d1l 串操作种类串操作种类串传送串传送 MOVS 将串从内存某一区域传送到另一区域。将串从内存某一区域传送到另一区域。从串取从串取 LODS 从串中取出某一元素。从串中取出某一元素。存入串存入串 STOS 将某个数据存入串中。将某个数据存入串中。串比较串比较 CMPS 对两个串进行比较。对
2、两个串进行比较。搜索串搜索串 SCAS 在串中搜索(查找)某数据(关键字)在串中搜索(查找)某数据(关键字)2串指令的特点串指令的特点 指令给出串操作的种类、类型,而操作数隐含给出。指令给出串操作的种类、类型,而操作数隐含给出。如如 MOVSB ;字节字节 MOVSW ;字字 源串源串 由由DS:SI指向的单元指向的单元 目的串目的串 由由ES:DI指向的单元指向的单元 指令执行后,指针据指令执行后,指针据DF标志、操作类型自动修改标志、操作类型自动修改 字节操作字节操作 1 ;字操作字操作 2 DF=0 用用+;DF=1 用用-3 只有一个存储器操作数的串指令只有一个存储器操作数的串指令 如
3、如 LODS(从串取)(从串取)STOS(存入串)(存入串)SCAS(搜索串)(搜索串)另一个操作数在另一个操作数在 AL(字节操作字节操作)或或 AX(字操作字操作)影响影响标志情况标志情况 CMPS(串比较串比较)、SCAS(串搜索串搜索)影响影响标志,标志,MOVS(串传送串传送)、LODS(从串取从串取)、STOS(存入串存入串)不影响不影响标志。标志。4l 串传送串传送 格式格式 MOVSB 字节传送字节传送 MOVSW 字传送字传送 MOVSB 执行操作执行操作 (ES:DI)(DS:SI)字节传送字节传送 (SI)(SI)1 修改源串指针修改源串指针 (DI)(DI)1 修改目的
4、串指针修改目的串指针 其中:其中:DF=0,用,用+DF=1,用,用 -MOVSW 执行操作执行操作 (ES:DI)(DS:SI)字传送字传送 (SI)(SI)2 修改源串指针修改源串指针 (DI)(DI)2 修改目的串指针修改目的串指针其中:其中:DF=0,用,用+DF=1,用,用 -5l从串取从串取 格式格式 LODSB 取字节取字节 LODSW 取字取字 LODSB执行操作执行操作 (AL)(DS:SI)从源串取入从源串取入AL (SI)(SI)1 修改源串指针修改源串指针其中:其中:DF=0,用,用+DF=1,用,用 -LODSW执行操作执行操作 (AX)(DS:SI)从源串取入从源串
5、取入AX (SI)(SI)2 修改源串指针修改源串指针其中:其中:DF=0,用,用+DF=1,用,用 -6l存入串存入串 格式格式 STOSB 存入字节存入字节 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例:把例:把1000H1000H开始的开始的10010
6、0个存储单元填入个存储单元填入 ASCIIASCII码码2AH(2AH(*)。8l串比较串比较 格式格式 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.两数相减,只影响标志,不影响操作数两数相减,只影响标
7、志,不影响操作数9l 搜索串搜索串 格式格式 SCASB 取字节取字节 SCASW 取字取字 SCASB执行操作执行操作 (AL)-(ES:DI)从目的串搜索字节从目的串搜索字节 (DI)(DI)1 修改目的串指针修改目的串指针 SCASW执行操作执行操作 (AX)-(ES:DI)从目的串搜索字节从目的串搜索字节 (DI)(DI)2 修改目的串指针修改目的串指针两数相减,只影响标志,不影响操作数。两数相减,只影响标志,不影响操作数。10 重复控制前缀重复控制前缀重复前缀重复前缀REP 当相等重复前缀当相等重复前缀REPZ/REPE 当不相等重复前缀当不相等重复前缀REPNZ/REPNE11l重
8、复前缀重复前缀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 u 只在只在(CX)=0时退出循环时退出循环REP执执行行流流程程(CX)=(CX)-1REP后后的的串串 指指 令令YNCX=0?12l当相等重复前缀当相等重复前缀REPZ执行过程:执行过程:(1)当当(CX)=0,结束结束REPZ,执行
9、执行REPZ下一条指令;下一条指令;(2)当当(CX)0,将,将CX 的内容减的内容减1,执行执行REPZ后的串指令;后的串指令;(3)当当ZF=1,返回返回(1);(4)当当ZF1,则结束则结束REPZ,执行执行REPZ下一条指令。下一条指令。u(CX)减减1操作不影响标志操作不影响标志u ZF标志由标志由串操作决定串操作决定REPZ 执执行行流流程程(CX)=(CX)-1REPZ 后后的的串串 指指 令令YNYNCX=0?ZF=1?13l当不相等重复前缀当不相等重复前缀REPNZ执行过程:执行过程:(1)当当(CX)=0,结束结束REPNZ,执行执行REPNZ下一条指令。下一条指令。(2)
10、当当(CX)0,将,将CX 的内容减的内容减1,执行执行REPNZ后的串指令。后的串指令。(3)当当ZF=0,返回返回(1);(4)当当ZF0,则结束则结束REPNZ,执行执行REPNZ下一条指令。下一条指令。REPNZ执执行行流流程程(CX)=(CX)-1REPNZ后后的的串串 指指 令令YNYNCX=0?ZF=0?14串指令使用的一般方法串指令使用的一般方法设置源串地址设置源串地址设置目标串地址设置目标串地址设置串长度设置串长度设置操作方向设置操作方向DF串指令串指令MOV SI,源串首地址源串首地址(或(或LEA SI,源串)源串)MOV DI,目的串首地址目的串首地址(或(或LEA D
11、I,目的串)目的串)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中。中。设置串长度设置串长度
12、 将串的长度(传送次数)放入将串的长度(传送次数)放入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字节字节string1112233、1a2b3c4dstring2112233、1a11223418
13、用用REPZ CMPS 进行串比较进行串比较 编程:编程:设置比较方向设置比较方向(STD或或CLD)设置源串、目的串地址设置源串、目的串地址 将源串首地址将源串首地址(DF=0时时),或末地址(,或末地址(DF=1时)放入时)放入 DS、SI 将目的串首地址将目的串首地址(DF=0时时),或末地址(,或末地址(DF=1时)放入时)放入ES、DI 设置串长度设置串长度 将串的长度放入将串的长度放入CX中中 按按字节比较字节比较用用 REPZ CMPSB 按按字比较字比较 用用 REPZ CMPSW19执行完执行完REPZ CMPS后,根据后,根据ZF判断两串比较结果。判断两串比较结果。若若ZF
14、=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 ;目的串首地址目的串首地址 ES:DI MO
15、V 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(关键字为字节关键字为字
16、节)或或 放入放入AX(关键字为字关键字为字)。设置串长度设置串长度 将串的长度放入将串的长度放入CX中。中。查找字节查找字节用用 REPNZ SCASB 查找字查找字 用用 REPNZ SCASW22执行完执行完REPNZ SCAS后,根据后,根据ZF判断查找结果。判断查找结果。若若 ZF=1,则串中有关键字,此时:则串中有关键字,此时:CX的值为剩下的未搜索的元素个数,的值为剩下的未搜索的元素个数,DI指向关键字元素的下一元素,指向关键字元素的下一元素,而关键字而关键字在在(DI)-1的位置的位置 若若 ZF=0,则串中无关键字,此时:则串中无关键字,此时:CX=0,表明串中所有元素以搜索
17、完毕,表明串中所有元素以搜索完毕 DI指向串尾的下一单元。指向串尾的下一单元。23例例 MOV AL,$、REPNZ SCASB JZ found 未找到处理未找到处理 JMP exitfound:找到处理找到处理exit:、关键字元素关键字元素(DI)=0003C$BAD(CX)=0002 ZF=1执行后执行后(DI)=0000(CX)=0005(AL)=$执行前执行前注意:注意:$字符在字符在(DI)-1=0002H 的位置的位置24串指令可单独使用串指令可单独使用 MOV AL,SI MOV ES:DI,AL 等价于等价于 MOVSB INC SI INC DI (假设假设 DF=0)n
18、ext:JCXZ exit DEC CX MOVSB 等价于等价于 REP MOVSB JNZ next exit:、说明:说明:25重复前缀中重复前缀中CX 减减1操作,不影响标志。操作,不影响标志。REPNZ 执执行行流流程程(CX)=(CX)-1REPNZ 后后的的串串 指指 令令YNYNCX=0?ZF=0?REP 执执行行流流程程(CX)=(CX)-1REP 后后的的串串 指指 令令YNCX=0?(CX)=(CX)-1REPZ 后后的的串串 指指 令令YNYNCX=0?ZF=1?REPZ 执执行行流流程程266处理机控制指令处理机控制指令1、标志处理指令、标志处理指令 CLC,STC,
19、CMC,CLD,STD,CLI,STI 2、处理机控制指令处理机控制指令HLT,NOP,WAIT,ESC,LOCK271、标志处理指令标志处理指令设置和清除标志的指令,只影响指令指定的标志设置和清除标志的指令,只影响指令指定的标志282、处理机控制指令处理机控制指令 暂停指令暂停指令HLT 格式格式 HLT 执行执行 使使CPU处于暂停状态处于暂停状态用于等待外部中断,中断处理结束后,用于等待外部中断,中断处理结束后,继续执行继续执行HLT后的下一条指令后的下一条指令例例 、STI ;允许外部中断允许外部中断 HLT ;等待中断等待中断 MOV AX,0、(HLT指令在第指令在第6章中断技术用
20、到章中断技术用到)29 空操作指令空操作指令NOP 格式格式 NOP 指令不执行任何操作指令不执行任何操作例:例:(也可用(也可用NOP指令进行短延时指令进行短延时(教材中的一些例子用到)教材中的一些例子用到)其机器码占一个字节单元,其机器码占一个字节单元,在调试程序时,修改程序用。在调试程序时,修改程序用。MOV BX,100 00B8 0107 3ACMP AL,BXB8FE11MOV BX,100 00B8 0190 90CMP AL,BX903A07NOPNOPNOPMOV CX,20HB9 20 0030指指令令类类型型助助记记符符通通用用传传送送MOV,PUSH,POP,XCHG,
21、XLAT地地址址传传送送LEA,LDS,LES标标志志传传送送PUSHF,POPF,LAHF,SAHF数数据据传传送送输输入入输输出出IN,OUT加加法法ADD,ADC,INC,AAA,DAA减减法法SUB,SBB,DEC,NEG,CMP,AAS,DAS乘乘法法MUL,IMUL,AAM除除法法DIV,IDIV,AAD算算术术运运算算符符号号扩扩展展CBW,CWD逻逻辑辑运运算算AND,TEST,OR,XOR,NOT移移位位SHL,SAL,SHR,SAR逻逻辑辑操操作作循循环环移移位位ROL,ROR,RCL,RCR指令助记符表指令助记符表31指指令令类类型型助助记记符符串串操操作作MOVS,CM
22、PS,SCAS,LODS,STOS串串处处理理重重复复控控制制REP,REPE/REPZ,REPNE/REPNZ无无条条件件转转移移JMP条条件件转转移移JE/JZ,JNE/JNZ,JS,JNS,JO,JNOJP,JNP,JC,JNC,JCXZJA/JNBE,JAE/JNB,JB/JNAE,JBE/JNAJG/JNLE,JGE/JNL,JL/JNGE,JLE/JNG循循环环控控制制LOOP,LOOPE/LOOPZ,LOOPNE/LOOPNZ过过程程调调用用CALL,RET控控制制转转移移中中断断指指令令INT,INTO,IRET处处理理机机控控制制CLC,STC,CMC,CLD,STD,CLI
23、,STINOP,HLT,WAIT,ESC,LOCK322.学习指令的要点学习指令的要点从以下几个方面来掌握一条指令从以下几个方面来掌握一条指令:l 指令的助记符指令的助记符l 指令的格式指令的格式:操作数的个数、类型(:操作数的个数、类型(B,W,DW)l 执行的操作执行的操作:指令执行后的结果:指令执行后的结果包括包括:哪些寄存器、内存单元的值发生了变化哪些寄存器、内存单元的值发生了变化 对标志位有无影响,哪些受影响对标志位有无影响,哪些受影响l 特点及注意事项特点及注意事项 只介绍常用的指令,其他需要时可自学只介绍常用的指令,其他需要时可自学。333.指令中操作数的表示指令中操作数的表示符
24、号符号表示内容表示内容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.书写指令注意事项:书写指令注意事项:l 不区分字母的大小写。不区分字母的大小写。下列写法表示同一条指令:
25、下列写法表示同一条指令:MOV AX,1ABDH mov ax,1abdhl 不添加指令系统没有的指令,即不自创助记符。不添加指令系统没有的指令,即不自创助记符。将将 MOV AL,0 写成写成 MOVE AL,0 JMP lable 写成写成 JUMP lable35l 注意操作数的范围注意操作数的范围对字节操作指令对字节操作指令 0 FFH 0 255 对字操作指令对字操作指令 0 FFFFH 0 65535 MOV AL,260 MOV AX,70000 MOV AL,1FFH MOV AL,2ABCDH 36l 对无操作数指令,不添加操作数。对无操作数指令,不添加操作数。STC AL
26、l 对单操作数指令,操作数不能是立即数。对单操作数指令,操作数不能是立即数。IMUL 6 37l 对双操作数指令对双操作数指令 不能两个同为存储器操作数不能两个同为存储器操作数 MOV DI ,SI 目的操作数不能是立即数目的操作数不能是立即数 ADD 3,AL 两个操作数的类型应相同两个操作数的类型应相同 SUB AX,BL 若若 value 定义为字类型存储器变量:定义为字类型存储器变量:MOV CL,value BX 38l 内存操作数的属性应明确。内存操作数的属性应明确。MOV BX ,0MOV BYTE PTR BX ,0MOV WORD PTR BX ,0MOV BX ,ALMOV
27、 BX ,AX39l A、B、C、D、E、F开头的十六进制数前面加开头的十六进制数前面加0,与与H结尾的标识符区别。结尾的标识符区别。如如 寄存器名:寄存器名:AH、BH、CH、DH 变量名变量名:abcdH 等等例例 mov AL,0AH mov AL,AH mov BX,0ABCDH40l CS 和和 IP的值只在的值只在控制转移指令控制转移指令中修改。中修改。l 对非控制转移指令,取完指令后对非控制转移指令,取完指令后IP值自动值自动 指向下条指令。指向下条指令。l 段寄存器段寄存器CS的值,只在的值,只在MOV、PUSH中可作操作数,中可作操作数,且这两条指令执行结果不改变且这两条指令执行结果不改变CS值。值。MOV AX,CSPUSH CSl IP、FLAGS两个寄存器不作为操作数在指令中出现。两个寄存器不作为操作数在指令中出现。MOV IP,1234HMOV FLAGS,0F0FHl FLAGS状态寄存器的值由指令执行后确定,状态寄存器的值由指令执行后确定,不同的指令对各标志的影响不同。不同的指令对各标志的影响不同。41
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。