1. 程式人生 > >CALL 指令

CALL 指令

CALL指令用在主程式中,實現子程式的呼叫。它類似無條件轉移JMP指令,但是,子程式執行結束是要返回的;所以,CALL指令不僅要同JMP指令一樣改變CS : IP以實現轉移,而且還要保留下一條要執行指令的地址,以便返回時重新獲取它。保護CS : IP值的方法是壓入堆疊,獲取CS : IP值的方法就是彈出堆疊。

CALL指令的4種格式如下:  
CALL label ;段內呼叫,相對定址:SP←SP-2,SS:[SP]←IP,
           ;IP←IP+16位位移量
        CALL r16/m16 ;段內呼叫,間接定址:SP←SP-2,SS:[SP]←IP,
           ;IP←r16/m16
        CALL far ptr label ;段間呼叫,直接定址:SP←SP-2,SS:[SP]←CS,
           ;SP←SP-2,SS:[SP]←IP,
           ;IP←label偏移地址,CS←label段地址
        CALL far ptr mem ;段間呼叫,間接定址:SP←SP-2,SS:[SP]←CS,
           ;SP←SP-2,SS:[SP]←IP,
           ;IP←[mem],CS←[mem+2]
根據過程偽指令,彙編程式可以自動確定是段內還是段間呼叫,同時也可以採用near ptr或far ptr操作符強制成為近呼叫或遠呼叫。