2014计算机三级《PC技术》考试要点:80x86指令系统(2)
4.串操作指令
串可以是字节串(一组字节)或字串(一组字)。串指令有两类,每类有5种。一类是串操作命令,一类是控制操作重复执行的前缀命令。串操作时,下列寄存器及标志起着特定的作用,程序应根据操作的具体要求先赋予初值。SI寄存器 源串变址用DI寄存器 目的串变址用CX寄存器 重复次数寄存器AL/AX 扫描值(关键字)FLAGS中标志位:
DF 0表示重复操作中DI、SI应自动增量,1表示自动减量。 ZF 用于控制扫描或比较操作结果。
(1)基本串操作命令
①MOVS
格式: MOVS OPRD1,OPRD2
功能:将由SI作为偏移地址的源串中的一个字节或字,传送到由DI作为偏移地址的目的串,且相应修改偏移地址,以指向串中下一个元素。传送完一个字节或字后,则依据控制标志位DF和源、目的操作数的属性,修改偏移地址。在使用MOVS指令之前,必须将源、目的操作数的偏移地址分别送SI、DI,并设置DF。
②MOVSB/MOVSW
字节串/字串传送命令,不带操作数,地址修改MOVSB命令以±1形式修改偏移地址,MOVSW以±2形式修改偏移地址。其余与MOVS相同。
③CMPS
格式: CMPS OPRD1,OPRD2
功能:字节串或字串比较。从由SI作为偏移地址的源串中减去由DI为偏移地址的目标串(字或字节),减的结果不送至任何操作数,仅反映到标志位上。同时修改源、目的串的偏移地址,以指向串中的下一个元素。标志位AF、CF、OF、PF、SF和ZF反映两串元素之间的关系。
④CMPSB/CMPSW
字节串/字串比较,无操作数。
⑤LODS OPRD
读出字节串或字串。从由SI为偏移地址的源串中读出一个字节或一个字送AL或AX,同时修改偏移地址,指向串的下一个元素。此指令对标志位无影响。
⑥LODSB/LODSW
字节或字操作,无操作数。
⑦SCAS
格式: SCAS OPRD
功能:搜索(扫描)串元素命令。从AL(字节操作)或AX的内容中减去由DI作为偏移地址的目标串元素。结果不改变累加器的值,只改变标志位。利用SCAS指令可以进行搜索,此时将搜索关键字放在AL(字节)或AX(字)中,用于查找字符串中有无此关键字,记下查找次数。
⑧SCASB/SCASW
搜索串中字节或字元素,无操作数。
⑨STOS
格式:STOS OPRD
功能:存储字节或字串的指令。将AL(字节)或AX(字)中内容,存储到以DI为偏移地址的目的串中,同时修改偏移地址,指向串的下一个元素。
⑩STOSB/STOSW
存储字节串/字串,无操作数。
(2)重复前缀
①REP
可作为串传送、串比较、串存储、串搜索指令的前缀。最常用的是串传送指令,使用时数据长度必须放在CX中。
②REPE/REPZ
用于串传送、串搜索指令的前缀,使紧随其后的指令重复执行,直到CX=0或ZF=0为止。
③REPNE/REPNZ
用于串比较或串搜索指令的前缀,使其重复执行直到XC=1或ZF=1为止。
5.程序控制指令
8086/8088程序中指令的执行顺序是由代码寄存器CS和指针IP来决定的。程序转移指令用来改变这两个寄存器的内容,从而改变程序的执行顺序。转移指令分四组;无条件转移指令、条件转移指令、循环控制指令及有关中断指令。
(1)无条件转移指令
①JMP
格式: JMP OPRD(标号)
功能:无条件转移到目的单元,无返回值。
段内直接转移,范围为段内任何位址(±32K)。若转移范围在±127B之内时,则称之为段内短转移。例如:
JMP SHORT NEXT ;段内短转移
段间直接转移,可转到程序的任何位置,例如:JMP FAR PTR NEXT
此时需用NEXT的段地址和偏移地址取代当前的CS和IP。段内间接转移,可转移到段内的任何位置,例如:JMP CX
指令执行时用CX的内容取代当前IP,而CS不变。段间间接转移,可转移到程序的任何位置。例如:JMP SEGOFF
指令执行时,在由SEGOFF的段和偏移量所确定的双字单元中,用较小地址的字单元内容取代IP,较大地址字单元内容取代CS。②CALL
格式: CALL OPRD调用指令。
③RET
返回指令。
(2)条件转移指令
条件转移指令以某些标志位或其逻辑运算为依据,满足条件时则转移。本类指令的转移的目的地址在±127字节以内。本类指令大体上分三类:
①依据单个标志位的条件转移指令
依据单个标志位的条件转移指令如下表所示。
依据单个标志位的条件转移指令
指 令 转移条件 说 明
JC
JNC CF=1
CF=0
有进位/借位时转移
无进位/借位时转移
JE/JZ
JNE/JNZ ZF=1
ZF=0 相等/等于零时转移
不相等/不等于零时转移
JS
JNS SF=1
SF=0 符号位为1(负数)时转移
符号位为0(正数)时转移
JO
JNO OF=1
OF=0 有溢出时转移
无溢出时转移
JP/JPE
JNP/JPO PF=1
PF=0 奇偶位为1/偶时转移
奇偶位为0/奇时转移
②用于无符号数的条件转移指令
用于无符号数的条件转移指令如下表所示。
本指令用于无符号数比较。
用于无符号数的条件转移指令
指 令 转移条件 说 明
JA/JNB
JAE/JNB
JB/JNAE
JBE/JNA CF=0且ZF=0
CF=0或ZF=1
CF=1且ZF=0
CF=1且ZF=1 高于/不等于且不低于时转移
高于或等于/不低于时转移
低于/不高于、不等于时转移
高于、等于/不等于时转移
③带符号数的条件转移指令
带符号数的条件转移指令如下表所示。
带符号数的条件转移指令
带符号数的条件转移指令
指 令 转移条件 说 明
JG/JNLE (SF)XOR(OF)=0且ZF=0 高于/低于且不等于时转移
JGE/JNL (SF)XOR(OF)=0
或ZF=1 高于或等于/低于时转移
JL/JNGE ( SF)XOR(OF)=1且ZF=0 高于/低于时转移
JLE/JNG (SF)XOR(OF)=1
或ZF=0 低于或等于/高于时转移
上述指令用于带符号数的比较。