8086匯編 call 指令


8086匯編 call 指令

字面意思:調用子程序
實質:流程轉移指令,它們都修改IP,或同時修改CS和IP
call指令實現轉移的方法和 jmp 指令的原理相似
格式:call 標號

返回指令:ret、retf

call 指令說明

CPU執行call指令,進行兩步操作:
  (1)將當前的 IP 或 CS和IP 壓入棧中;
  (2)轉移到標號處執行指令。

call 標號:

  • 16位位移=“標號”處的地址-call指令后的第一個字節的地址;
  • 16位位移的范圍為 -32768~32767,用補碼表示;
  • 16位位移由編譯程序在編譯時算出。

CPU執行“call far ptr 標號”時的操作:

  (1) (sp) = (sp) – 2
       ((ss) ×16+(sp)) = (CS)
       (sp) = (sp) – 2
            ((ss) ×16+(sp)) = (IP)
      (2) (CS) = 標號所在的段地址
            (IP) = 標號所在的偏移地址

CPU執行“call near ptr 標號”時的操作:

“call 標號”類似”jmp near ptr 標號”,對應的機器指令中為相對於當前IP的轉移位移,而不是轉移的目的地址,實現段內轉移。指令“call far ptr 標號”實現的是段間轉移!

ret、retf

使用案例

1、案例模板

說明:在程序走到call s時會直接跳轉到 s: add ax, 1 這里列處理返回值ret以上指令當遇到ret后會返回到 mov ax, 4c00h 行接着往下執行。

    mov ax, 0
    ; 使用主程序 s
    call s
    mov ax, 4c00h
    int 21h
; 創建主程序s
s: add ax, 1
    ; 返回
    ret

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM