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

組合語言實作冷啟動、熱啟動與 RESET 重啟

     編輯:組合語言

在 IBM PC 及相容機中,除了開機冷啟動,還有熱啟動(Ctrl+Alt+Del)與 RESET 硬體重啟。兩者共同點是跳轉至 BIOS 入口點(FFFF:0000),差異在於啟動時是否檢測記憶體:熱啟動略過檢測,RESET 重啟則完整檢測。關鍵在於 BIOS 資料區 0040:0072 的重啟標誌字:1234H 表示略過記憶體檢測,其他值則執行完整檢測。

程式一:RESET.ASM - 硬體重啟(含記憶體檢測)

CODE1 SEGMENT AT 0FFFFH
  ASSUME CS:CODE1
  ADDR LABEL FAR        ; BIOS 入口點 FFFF:0000
CODE1 ENDS

CODE SEGMENT
  ORG 100H              ; COM 檔案入口偏移
  ASSUME CS:CODE, DS:CODE, ES:CODE
START:
  JMP FAR PTR ADDR      ; 遠跳轉至 FFFF:0000
CODE ENDS
END START

直接遠跳轉至 BIOS 入口,不修改重啟標誌字,BIOS 將按預設流程執行完整記憶體檢測。

程式二:BOOT.ASM - 熱啟動(略過記憶體檢測)

CODE1 SEGMENT AT 0FFFFH
  ASSUME CS:CODE1
  ADDR LABEL FAR
CODE1 ENDS

CODE SEGMENT
  ORG 100H
  ASSUME CS:CODE, DS:CODE, ES:CODE
START:
  MOV AX, 0040H         ; BIOS 資料區段址
  MOV DS, AX
  MOV AX, 1234H         ; 熱啟動標誌
  MOV SI, 0072H         ; 標誌字偏移
  MOV [SI], AX          ; 寫入 1234H
  JMP FAR PTR ADDR      ; 跳轉 BIOS 入口
CODE ENDS
END START

先將 0040:0072 設為 1234H,再跳轉 BIOS。BIOS 檢測到此標誌,略過記憶體檢測,直接進入系統啟動流程,實現熱啟動效果。

編譯與使用說明

  1. 使用 TASM/MASM 編譯連結生成 .OBJ → .EXE
  2. 用 EXE2BIN 或連結器選項轉換為 .COM 檔案
  3. 在 DOS 環境下直接執行 RESET.COM 或 BOOT.COM

技術細節補充

  • AT 0FFFFH 定義絕對地址段,對應 BIOS ROM 起始位址
  • LABEL FAR 產生遠指標標號,供 JMP FAR PTR 使用
  • COM 程式單段結構,ORG 100H 留出 PSP 空間

這兩個微小程式展示了底層硬體控制的核心機制,也是理解 PC 啟動流程的經典教材。

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