微机原理及应用 6 段内直接调用 指令格式: CALL DST; (SP)(SP)-2,((SP2,(SP}1)(IP) IP)(IP)+16位偏移量 例如: CALL1000H;段内直接调用,调用地址 在指令中给出 ●子过程与原调用程序在同一代码段,在调用 之前只需保护断点的偏移地址 返回
微机原理及应用 6 段内直接调用 • 指令格式:CALL DST ; (SP) (SP)-2, ((SP)-2, (SP)-1) (IP) (IP) (IP)+16位偏移量 例如: CALL 1000H ; 段内直接调用,调用地址 在指令中给出 返回 ⚫ 子过程与原调用程序在同一代码段,在调用 之前只需保护断点的偏移地址
微机原理及应用 段内间接调用 指令格式: CALL DST (SP)(SP)2,(SP)-2,(SP)-1)(IP) (IP)-(EA) 例如: CALL AX;段内间接调用,调用地址 由AX给出。(IP)(AX) ●子过程与原调用程序在同一代码段,在调用 之前只需保护断点的偏移地址 返回
微机原理及应用 7 段内间接调用 • 指令格式:CALL DST ; (SP) (SP)-2, ((SP)-2, (SP)-1) (IP) (IP) (EA) 例如: CALL AX ; 段内间接调用,调用地址 由AX给出。(IP) (AX) 返回 ⚫ 子过程与原调用程序在同一代码段,在调用 之前只需保护断点的偏移地址
微机原理及应用 8 段间直接调用 指令格式: CALL DST; (SP)(SP)-2,(SP)-2,(SP-1)(CS)段地址 (SP)(SP)-2,(SP)-2,(SP-1)(P)偏移地址 例如: CALL2500:3600;段间直接调用,调用段地 址和偏移量在指令中给出 ●子过程与原调用程序不在同一代码段,在调用之前 需保护断点的段基地址和偏移地址。先将断点的CS 压栈,再压入IP 返回
微机原理及应用 8 段间直接调用 • 指令格式:CALL DST ; (SP) (SP)-2, ((SP)-2, (SP)-1) (CS)段地址 (SP) (SP)-2, ((SP)-2, (SP)-1) (IP)偏移地址 例如: CALL 2500:3600 ; 段间直接调用,调用段地 址和偏移量在指令中给出 返回 ⚫ 子过程与原调用程序不在同一代码段,在调用之前 需保护断点的段基地址和偏移地址。先将断点的CS 压栈,再压入IP
微机原理及应用 9 段间间接调用 指令格式: CALL DST; (SP).(SP)-2,((SP-2,(SP-1)(CS) (SP).(SP)-2,(SP-2,(SP)-1)+(IP) (IP)(EA)寻址方式确定的有效地址 (CS)←(EA+2) 例如: CALL DWORD PTR[D];段间间接调用,指令给出 调用段地址和偏移量的存 放地址
微机原理及应用 9 段间间接调用 • 指令格式:CALL DST ; (SP) (SP)-2, ((SP)-2, (SP)-1) (CS) (SP) (SP)-2, ((SP)-2, (SP)-1) (IP) (IP) (EA) 寻址方式确定的有效地址 (CS) (EA+2) 例如: CALL DWORD PTR[DI] ; 段间间接调用,指令给出 调用段地址和偏移量的存 放地址
微机原理及应用 示例 10 设(DS)=6000H,(S)=0560H 指令 CAL 代码段 CALL DWORD PTRIDI 的操作示意图 60560H XXH XXH IP XXH XXH 数据段 CS 返回
微机原理及应用 10 示例 • 设(DS)=6000H,(SI)=0560H, 指令 CALL DWORD PTR[DI] 的操作示意图 XXH XXH XXH XXH IP CS CALL ┇ ┇ ┇ ┇ 代 码 段 数 据 段 60560H 返回