首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

匯編語言子程序保護現場與恢復:PUSH/POP 通用寄存器、IRQ 處理流程

     編輯:程式設計疑難解答

代碼問題分析

  • 標號 L1、L2、L3 衝突,需唯一。
  • 子程序 endline、display 未保護 AX、DX 等寄存器。
  • call endline 後未恢復現場,導致主程序寄存器值改變。

標準子程序模板

endline PROC NEAR
    PUSH AX
    PUSH DX
    MOV AH, 02H
    MOV DL, 0AH
    INT 21H
    MOV DL, 0DH
    INT 21H
    POP DX
    POP AX
    RET
endline ENDP

display PROC NEAR
    PUSH AX
    PUSH DX
    MOV DL, AL
    ADD DL, 30H
    MOV AH, 02H
    INT 21H
    POP DX
    POP AX
    RET
display ENDP

主程序調用規範

  • 調用前若需保留寄存器,自行 PUSH。
  • 子程序**只保護自己使用並修改**的寄存器(被調用者保存約定)。
  • 中斷服務程序 (ISR) 需保護**所有**可見寄存器(含標誌寄存器)。

完整修正源碼參考

新浪部落格:匯編子程序保護現場完整範例

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved