3.串取出:不影响FR ⑴LODSB
功能:AL←DS:[SI],SI←SI±1 ⑵LODSW
功能:AX←DS:[SI],SI←SI±2 4.串存入:不影响FR ⑴STOSB
功能:ES:[DI]←AL,DI←DI±1 ⑵STOSW
功能:ES:[DI]←AX,DI←DI±2 5.串比较:
比较方法:将源串中的一个字或字节减去目的串中的一个字或字节,不保留相减结果,但在FR中反映。
⑴CMPSB
功能:DS:[SI]——ES:[DI] ⑵CMPSW
功能:同上,按字比较。 6.串搜索:
在目的串中查找AX或AL指定的内容。查找方法是用AX或AL的内容减去目的串中一个字或一个字节,相减结果反映在FR中。
⑴SCASB ⑵SCASW 五、 循环和转移指令 1.转移指令
转移指令分为:无条件转移指令和条件转移指令 ⑴无条件转移指令 格式:JMP DST
功能:使程序无条件的转移到“目标”处,“目标”通常用标号来表达。 例: JMP
TARGET
TARGET:??
说明:JMP指令不影响FR。段内转移:只改变IP指针的内容,有直接寻址
和间接寻址两种;段间转移: CS、IP都改变,也分直接寻址和间接寻址两种。
①段内转移:只改IP,CS不变。
I.段内转移直接寻址:格式同上,DST只需使用符号地址。 ? 短转:IP←IP+8bit位移
如:JMP SHORT DST
? 近转:IP←IP+16bit位移
如:JMP NEAR PTR DST
II.段内转移间接寻址:目标地址在某一个通用寄存器或某一字存储单元中。 例:JMP CX 或
JMP WORD PTR[BX] 即DS:[BX]→IP
CS段OP码②段间转移:CS,IP都要修改 I.段间转移直接寻址:要转移的“目标”地址在指令中直接给出。
例:JMP FAR PTR TARGET 即TARGET所对应物理地址应为20250H
II.段间转移间接寻址:目标地址在
JMP指令 50新(IP)=0250H020020新(CS)=2000H一个做地址指针的双字单元中。地址指针的前2个byte存放偏移量(IP),后2个byte存放目标的段基址(CS)。
例:JMP DWORD PTR ADDR[BX]
JMP DWORD PTR [BX][SI]
⑵条件转移指令:8086共有18条 格式:JXX DST
①简单条件转移指令:10条
标志位 CF 指令 JC JNC JE/JZ JNE/JNZ JS JNS JO 转移条件 CF=1 CF=0 ZF=1 ZF=0 SF=1 SF=0 OF=1 含义 有进位/借位 无进位/借位 相等/等于‘0’ 不相等/不等于‘0’ 是负数 不为负 有溢出 ZF SF OF JNO PF JP/JPE JNP/JPO OF=0 PF=1 PF=0 无溢出 有偶数个‘1’ 有奇数个‘1’ 功能:根据单个条件(状态)标志的设置情况转移。一般适用于测试某一次运算的结果并根据其不同特征产生程序分支作不同处理的情况。
②无符号数条件转移指令:4条
指令 JA/JNBE JAE/JNB JB/JNAE JBE/JNA 转移条件 CF=0 AND ZF=0 CF=0 OR ZF=1 CF=1 AND ZF=0 CF=1 OR ZF=0 含义 A>B A≥B A<B A≤B 功能:在条件转移指令前使用比较指令(CMP),比较两个无符号的数(A——B),并根据比较的结果转移。
说明:
A:ABOVE 高于, B:BELOW低于, E:EQUAL 等于
③带符号数条件转移指令:4条
指令 JG/JNLE JGE/JNL JL/JNGE JLE/JNG 转移条件 SF=OF AND ZF=0 SF=OF OR ZF=1 SF≠OF AND ZF=0 SF≠OF OR ZF=1 含义 A>B A≥B A<B A≤B 功能:在条件转移指令前使用比较指令(CMP),比较两个带符号数,并根据比较的结果转移。
说明:
G:Greater 大于, L:Less 小于 ⑶比较指令
格式:CMP DST,SRC
功能:减法类型指令。(DST)-(SRC),其结果不送回(DST),仅根据结果设置FR。
说明:
ZF=1时,表示(DST)=(SRC)
无符号数: CF=0,表示(DST)≥(SRC);
CF=1,表示(DST)<(SRC)
有符号数: OF=SF,表示(DST)>(SRC);
OF≠SF,表示(DST)<(SRC)
2.循环指令:4条
特点:都是段内短距离相对转移指令,转移范围在-128~+127(8bit)之间;都隐含使用CX寄存器作为循环次数计数器,都需要把循环次数送给CX;执行后对FR均无影响。
⑴LOOP指令 格式:LOOP DST
功能:CX←CX-1,若CX≠0则转移到目标地址;若CX=0则顺序执行。 例:有一个首地址为ARRAY的M个字的数组,试编一程序,求出该数组的内容之和(不考虑溢出),并把结果存入TOTAL中。
MOV CX,M MOV AX,0 MOV SI,AX START-LOOP:
ADD ADD
AX,ARRAY[SI] SI,2
LOOP START-LOOP MOV TOTAL,AX
⑵LOOPE/LOOPZ指令
格式:LOOPE DST 或 LOOPZ DST 功能:CX←CX-1
若CX≠0,且ZF=1,则转移到目标地址;否则顺序执行。
⑶LOOPNE/LOONZ指令
格式:LOOPNE DST 或LOOPNZ DST 功能:CX←CX-1
若CX≠0,且ZF=0,则转移到目标地址;否则顺序执行。
△LOOPZ、LOOPNZ指令提供了提前结束循环的可能性。譬如,有时需要在字符串中查找一个字符,找到后可提前结束循环而不需要一查到底。
例:NEXT:??
??
CMP AL,ASCⅡ STR[SI]
LOOPNE NEXT ??
⑷JCXZ指令 格式:JCXZ DST
功能:若CX=0,则转移到目标地址;否则顺序执行。 六、 子程序的调用和返回指令
?段内调用与返回?直接寻址(直接调用)?类型? 对 FR 无影响 ???段间调用与返回?间接寻址(间接调用)? 断点:子程序调用指令的下一条指令的首字节地址。 1.子程序调用指令 格式:CALL 过程名
功能:先保护程序断点 段内调用:当前IP内容压栈保护。
段间调用:先把CS压栈,再把IP内容压栈保护。
然后无条件转移到目标地址。 2.返回指令
格式:RET 或RET n
功能:执行与CALL相反的操作,从子程序返回主程序。 若指令不带操作数 段内返回:IP←SP SP←SP+2
段间返回:IP←SP,SP←SP+2;CS←SP,SP←SP+2
若带立即操作数,上述功能完成后,再次修改SP的值,即:SP←SP+n ,n为偶数。
七、 输入输出指令 1.输入指令
格式:IN OPRN1,OPRN2
说明:OPRN1是AL或AX;OPRN2是端口地址。若采用直接寻址,OPRN2可以是立即数形式,端口地址在0~255(8位)之间;间接寻址时,需要用DX寄存器存放16位端口地址,地址范围在0~65535之间。 2.输出指令
格式:OUT OPRN1,OPRN2
说明;OPRN1为端口地址;OPRN2为累加器AL或AX。端口地址的确定方法同站上。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库8086CPU指令系统(4)在线全文阅读。
相关推荐: