第3章8086指令系统 数据传送指令 算术运算指令 逻辑运算指令 串操作指令 控制传送指令 CPU控制指令
第3章 8086指令系统 • 数据传送指令 • 算术运算指令 • 逻辑运算指令 • 串操作指令 • 控制传送指令 • CPU控制指令
3.4.5控制传送指令(P104) 调用(Ca)、转移(Jump)、返回( Return) 条件传送 重复控制 中断指令
3.4.5 控制传送指令(P104 ) • 调用(Call)、转移(Jump)、返回(Return) • 条件传送 • 重复控制 • 中断指令
3.4.5控制传送指令(P104) ■1、调用和返回指令 编程时往往将程序中常用到的具有相同功能的 部分独立出来,设计为一个子程序(或叫过程)。 需要时进行调用,子程序结束后,再返回原来调 用的地方。 方法的优点是:源程序长度缩短,有利于模块 化设计,使程序的编制、阅读和修改都比较方便。 8086/8088CPU为实现这一功能提供下面两条 指令 ◆调用指令CALL ◆返回指令RET
3.4.5 控制传送指令(P104 ) 1、调用和返回指令 编程时往往将程序中常用到的具有相同功能的 部分独立出来,设计为一个子程序(或叫过程) 。 需要时进行调用,子程序结束后,再返回原来调 用的地方。 方法的优点是:源程序长度缩短,有利于模块 化设计,使程序的编制、阅读和修改都比较方便。 8086/8088 C P U为实现这一功能提供下 面 两 条 指令: ◆调用指令 CALL ◆返回指令 RET
3.4.5控制传送指令(P105) (1)调用指令CALL 由于子程可能与主程序同在一个段内,也可能 不同在一个段内,与JMP指令类似,调用指令也分 如下四种。 ■①段内直接调用 例:CAL0120H;调用地址由指令给出 执行的操作为: (SP)-1,(P)-2)←(IP);IP压栈 (SP)←(SP)-2 ;修改SP (IP)←(IP)+偏移量
3.4.5 控制传送指令(P105 ) (1)调用指令CALL 由于子程可能与主程序同在一个段内,也可能 不同在一个段内,与J M P指令类似,调用指令也分 如下四种。 ①段内直接调用 例:CALL 0120H ;调用地址由指令给出. 执行的操作为: ((SP)-1,(SP)-2)←(IP) ;IP压栈 (SP)←(SP)-2 ;修改SP (IP)←(IP)+偏移量
3.4.5控制传送指令 操作的第3项解释为:调用的地址(即IP值)是 IP的当前值与指令中给定的位移量之和。给定的位 移量由汇编算出来,方法为: 例:CS:0100M0VAL,38H2字节 CS:0102CALL0120H3字节 CS:0105 则位移量:0120-0105H=001BH 于是CALL0120H的机器码为E81B00 参考P?段内直接调用 于是0105+001B=0120H
3.4.5 控制传送指令 操作的第3项解释为:调用的地址(即IP值) 是 I P的当前值与指令中给定的位移量之和。给定的位 移量由汇编算出来,方法为: 例:CS:0100 MOV AL,38H 2字节 CS:0102 CALL 0120H 3字节 CS:0105 则位移量:0120-0105H=001BH 于是CALL 0120H的机器码为E8 1B 00 参考P? 段内直接调用 于是0105+001B=0120H
3.4.5控制传送指令 ②段内间接调用 例: CALL AⅩ;调用地址由AX给出 CALL[SI];调用地址由存储器给出 指令的操作为 (SP)-1,(SP)-2)←(IP (SP)←(SP)-2 (IP)+(reg16)/(mem16)
3.4.5 控制传送指令 ②段内间接调用 例:CALL AX ;调用地址由AX给出. CALL [SI] ;调用地址由存储器给出. 指令的操作为: ((SP)-1,(SP)-2)←(IP) (SP)←(SP)-2 (IP)←(reg16)/(mem16)
3.4.5控制传送指令 ■③段间直接调用 例:CALL2000H:1000H 指令的操作为 (SP)-1,(SP)-2)←(CS);CS压栈 (SP)←(SP)-2 ;修改SP (CS)←段地址 ;(CS)←给定的段地址 (SP)-1,(SP)-2)←(IP);IP压栈 (SP)←(SP)-2 ;修改SP (IP)←偏移地址 ;(IP)←给定的偏址 返回
3.4.5 控制传送指令 ③段间直接调用 例:CALL 2000H:1000H 指令的操作为: ((SP)-1,(SP)-2)←(CS) ;CS压栈 (SP)←(SP)-2 ;修改SP (CS)←段地址 ;(CS)←给定的段地址 ((SP)-1,(SP)-2)←(IP) ;IP压栈 (SP)←(SP)-2 ;修改SP (IP)←偏移地址 ;(IP)←给定的偏址 返回
3.4.5控制传送指令 ■④段间间接调用 例: CALL DWORD PTR[DI 调用地址在D,DI+1,D+2,D+3所指的存储单元 中,前两个字节内容为偏移地址,后两个字节内容为 段地址 执行的操作与上段间直接调用类似。 返回
3.4.5 控制传送指令 ④段间间接调用 例:CALL DWORD PTR[DI] ; 调 用 地 址 在 DI,DI+1,DI+2,DI+3 所 指 的 存 储 单 元 中,前两个字节内容为偏移地址,后两个字节内容为 段地址. 执行的操作与上段间直接调用类似。 返回
3.4.5控制传送指令 (2)返回指令RET 段内返回指令RET的操作为: (IP)←(SP)+1,(SP)),(SP)←(SP)+2 段间返回指令RET的操作为: (IP)←(SP)+1,(SP),(SP)←(SP)+2 (CS)←(SP)+1,(SP),(SP)←(SP)+2 为了正确返回,RET类型必须与CAL指令相匹配, 这将由伪指令来加以区别,后面第四章将予以介绍
3.4.5 控制传送指令 (2)返回指令RET 段内返回指令RET的操作为: (IP)←((SP)+1,(SP)),(SP)←(SP)+2 段间返回指令RET的操作为: (IP)←((SP)+1,(SP)),(SP)←(SP)+2 (CS)←((SP)+1,(SP)),(SP)←(SP)+2 为了正确返回, R E T类型必须与C A L L指令相匹配, 这将由伪指令来加以区别,后面第四章将予以介绍
3.4.5控制传送指令 rET n 另有一种带立即数返回指令:RETn 式中n为偶数。表示从栈顶弹出地址后舍掉的字节数。 例:RET4,返回后舍掉4个字节
3.4.5 控制传送指令 RET n 另有一种带立即数返回指令:RET n 式中n为偶数。表示从栈顶弹出地址后舍掉 的 字 节 数 。 例:RET 4,返回后舍掉4个字节