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

「Hello World」進階組語教學:選擇分支與字串輸入輸出完整實作

     編輯:組合語言

系列簡介

本系列以經典「Hello World」為基礎,逐步引入分支結構、子程式模組化、鍵盤輸入與字串處理,展示 DOS 組合語言的互動程式設計技巧。兩個完整範例分別演示選單選擇與使用者輸入姓名後的歡迎訊息。

範例一:選單驅動的分支顯示

功能描述

  • 顯示歡迎畫面與選單:1) BASIC MESSAGE 2) ADVANCED MESSAGE
  • 讀取鍵盤輸入(1 或 2),分支顯示對應訊息
  • 輸入錯誤時鳴響蜂鳴器並重新提示
  • 模組化子程式:DISPCH(單字元)、ENTER(換行)、DISPCHS(字串)

核心程式碼片段

AGAIN:
    CALL ENTER
    LEA DX, MSG3      ; "PLEASE CHOOSE:"
    CALL DISPCHS
    MOV AH, 01H       ; 鍵盤輸入並回顯
    INT 21H
    CMP AL, '1'
    JE BASICP
    CMP AL, '2'
    JE ADVANP
    JMP ERROR         ; 錯誤處理

BASICP:
    CALL ENTER
    LEA DX, MSG4      ; "HELLO,WORLD!^-^"
    CALL DISPCHS
    JMP EXIT

ADVANP:
    CALL ENTER
    LEA DX, MSG5      ; "THIS IS MY FIRST ASM_86 PROGRAM! @^-^@"
    CALL DISPCHS
    JMP EXIT

ERROR:
    CALL ENTER
    LEA DX, ERRMSG    ; "CHOOSE ERROR! -_-b"
    CALL DISPCHS
    MOV DL, 07H       ; BEL 蜂鳴
    CALL DISPCH
    JMP AGAIN

子程式實作

DISPCH PROC NEAR
    MOV AH, 02H
    INT 21H
    RET
DISPCH ENDP

ENTER PROC NEAR
    MOV DL, 0DH       ; CR
    CALL DISPCH
    MOV DL, 0AH       ; LF
    CALL DISPCH
    RET
ENTER ENDP

DISPCHS PROC NEAR
    MOV AH, 09H       ; 顯示 '$' 結尾字串
    INT 21H
    RET
DISPCHS ENDP

範例二:字串輸入與格式化輸出

功能描述

  • 提示使用者輸入姓名(以 Enter 結束)
  • 逐字元讀取並存入緩衝區,手動補上 '$' 結尾
  • 輸出格式:Hello, [輸入姓名], Welcome to here!

關鍵輸入迴圈

REPEAT:
    MOV AH, 01H
    INT 21H
    CMP AL, 0DH       ; CR?
    JE EXIT_INPUT
    MOV INPUT[SI], AL
    INC SI
    JMP REPEAT

EXIT_INPUT:
    MOV INPUT[SI], 24H ; 補上 '$'

編譯與執行

; 範例一
masm helloch.asm
link helloch.obj
helloch.exe

; 範例二
masm heinout.asm
link heinout.obj
heinout.exe

教學重點總結

  1. 分支控制:CMP + JE/JNE/JMP 實現多路選擇
  2. 子程式模組化:PROC NEAR 封裝重複功能,CALL/RET 傳遞控制權
  3. DOS 中斷服務:INT 21h 功能號 01H(輸入)、02H(單字元輸出)、09H(字串輸出)
  4. 字串處理:以 '$' (24H) 為結尾標記,輸入時需手動附加
  5. 使用者體驗:錯誤提示、蜂鳴器、換行排版細節

這兩個範例涵蓋了 DOS 互動式程式的核心要素,是進階學習組合語言控制流與 I/O 處理的優秀實作參考。

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