第十二章子程序设计
第十二章 子程序设计
第节子程序调用与返回指令 1子程序调用指令 (1)段内直接调用 格式:CAL过程名;过程名是个标号 CALL NEAR PTR过程名 操作:SP←SP2;[SP,SP+1]←IP;保护断点IP←子程序入口偏移 地址;转子程序 SP→|mLss:堆栈 PH SP
第1节 子程序调用与返回指令 • 1. 子程序调用指令 • (1) 段内直接调用 • 格式:CALL过程名;过程名是个标号 • CALL NEAR PTR 过程名 • 操作:SP←SP-2;[SP,SP+1] ←IP;保护断点IP←子程序入口偏移 地址;转子程序
(2)段内间接调用 格式: CALLOPRD: OPRD≡{R,M(字) 操作:SPSP2SP,SP←IP;保护断点 P<[EAEA为依寻址方式所得有效地址 例如: CALLBX CALLWORD PTR [BX CALLDAT1;DAT1为字变量 CALLWORDPTRIBPI[SI
(2) 段内间接调用 格式:CALLOPRD;OPRD≡{R,M(字)} 操作:SP←SP-2;[SP,SP+1] ←IP;保护断点 IP←[EA];EA为依寻址方式所得有效地址 例如: CALLBX; CALLWORD PTR [BX]; CALLDAT1;DAT1为字变量 CALLWORDPTR[BP][SI]
3)段间直接调用 格式: CALL FAR PTR过程名 操作:SPSP2;[SP,SP+1CS;倮护断点 SPSP2;[SP,SP+1]←IP; CS←子程序入口段地址;转子程序入口 P子程序入口偏移地址; SS SP→ IPL IPHI SP-CSL CSH SP→
3) 段间直接调用 格式:CALL FAR PTR过程名 操作:SP←SP-2;[SP,SP+1] ←CS;保护断点 SP←SP-2;[SP,SP+1] ←IP; CS ←子程序入口段地址;转子程序入口 IP←子程序入口偏移地址;
(4)段间间接调用 格式: CALLOPRD:OPRD三{M(双字)} 操作:SPSP2;[5SP,SP+1]CS;保护断点 SP←SP2;[SP,SP+1]←IP CS←OPRD的段地址;转子程序入口 IP←ORD的偏移地址; 例如: CALLDWORD PTR [BXI CALLDAT2;DAT2为双字变 CALLDWORDPTRIBPILSI
(4) 段间间接调用 格式:CALLOPRD;OPRD≡{M(双字)} 操作:SP←SP-2;[SP,SP+1] ←CS;保护断点 SP←SP-2;[SP,SP+1] ←IP CS←OPRD的段地址;转子程序入口 IP←OPRD的偏移地址; 例如: CALLDWORD PTR [BX]; CALLDAT2;DAT2为双字变量 CALLDWORDPTR[BP][SI]