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

組合語言入門實戰:在 DOS 環境下輸出 Hello World

     編輯:組合語言

「Hello World!」是程式設計學習的經典起點,但對組合語言初學者而言,這看似簡單的輸出卻隱含了段架構、中斷呼叫與記憶體模型等核心觀念。本文將帶領讀者從零開始,完成一個可在 DOS 環境(或 DOSBox)執行的經典範例。

程式碼完整實作

DATA SEGMENT
    STRING DB 'Hello World!', '$'
DATA ENDS

STACK1 SEGMENT PARA STACK
    DW 20H DUP (0)
STACK1 ENDS

CODES SEGMENT
    ASSUME CS:CODES, DS:DATA, SS:STACK1
BEGIN:
    MOV AX, DATA        ; 將資料段基址載入 AX
    MOV DS, AX          ; 設定 DS 指向資料段
    LEA DX, STRING      ; 將字串偏移地址載入 DX
    MOV AH, 09H         ; DOS 21h 中斷功能 09h:顯示 '$' 結尾字串
    INT 21H             ; 呼叫 DOS 服務
    MOV AH, 4CH         ; DOS 21h 中斷功能 4Ch:正常終止程式
    INT 21H             ; 返回作業系統
CODES ENDS
END BEGIN

關鍵指令解析

  • SEGMENT ... ENDS:定義邏輯段(資料段、堆疊段、程式碼段),這是 8086 分段記憶體模型的基礎。
  • ASSUME:告訴組譯器段暫存器(CS, DS, SS)與邏輯段的對應關係,方便地址計算。
  • MOV DS, AX:段暫存器不可直接載入立即數,必須透過通用暫存器中轉。
  • LEA DX, STRING:載入有效地址,將標號 STRING 的偏移量存入 DX,作為中斷參數。
  • INT 21H, AH=09H:DOS 服務中斷,功能 09h 要求 DS:DX 指向以 '$' 結尾的字串。
  • INT 21H, AH=4CH:標準程式退出呼叫,避免程式結束後機器當機或亂碼。

建置與執行步驟

  1. 使用 MASM (ml.exe) 或 TASM 組譯原始碼(.asm)產生目標檔(.obj)。
  2. 使用連結器(link.exe)將 .obj 連結為可執行檔(.exe)。
  3. 在命令提示字元(CMD)或 DOSBox 中直接執行該 .exe 檔案,螢幕即會顯示 Hello World!。

執行結果畫面

透過這個範例,你已跨越了組合語言最基礎也最關鍵的門檻:段定義、暫存器佈局、中斷服務呼叫。這將是後續學習 BIOS/DOS 程式設計、保護模式進入甚至作業系統開發的基石。

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