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

組語打造光柵選單系統:完整原始碼與巨集庫解析(TASM 版)

     編輯:組合語言

專案簡介

大二課程設計作品:純組合語言實現的圖形化下拉選單系統(光柵選單),支援鍵盤導航(方向鍵、Alt+熱鍵、Enter)、子選單彈出、視窗繪製、畫面保存/恢復。代碼模組化,巨集庫 mnmacro.asm 封裝底層視訊操作,主程式 menu.asm 邏輯清晰,易於擴充實際功能。

系統架構

  • menu.asm:主程式,處理選單繪製、鍵盤訊息循環、狀態機切換
  • mnmacro.asm:巨集庫,封裝光標控制、視窗繪製、字串輸出、選單繪製、畫面讀寫、光標顯示/隱藏
  • 編譯工具鏈:TASM + TLINK

核心資料結構

; 主選單項目
mainmenu1 db 'File'
mainmenu2 db 'Edit'
mainmenu3 db 'Run'
mainmenu4 db 'Debug'
mainmenu5 db 'Help'

; 子選單項目(每主選單 3 項)
submenu11 db 'Save'    ; File
submenu12 db 'Open'
submenu13 db 'Exit'
; ... Edit/Run/Debug/Help 同理

; 狀態變數
mainnum  db 1      ; 當前主選單索引 (1-5)
subnum   db ?      ; 當前子選單索引 (2-4)
subshow  db 0      ; 子選單顯示旗標
mainindex db ?     ; 主選單字串長度
scrmm    db 100 dup(?) ; 畫面保存緩衝

巨集庫精華 (mnmacro.asm)

巨集功能關鍵 BIOS/INT
setpos top,left設定光標位置INT 10h/02h
changemenu top,left,width,attr修改指定區域屬性(反白/恢復)INT 10h/08h 讀取, 09h 寫入屬性
drawwindow attr,top,left,bottom,right捲動視窗清除/繪製背景INT 10h/06h
windowtandb l,m,r,top,left,width,attr繪製視窗上/下邊框INT 10h/09h 重複字元
windowlandr char,top,left,width,attr繪製視窗左/右邊框INT 10h/09h
outputchar char,attr,num重複輸出單字元INT 10h/09h
outputstr str,num,top,left,attr輸出字串INT 10h/13h
submenu left,m1,n1,m2,n2,m3,n3,width繪製完整子選單框架與項目組合上述巨集
readscr left,memory讀取螢幕區域到記憶體(50字元×10行)INT 10h/08h 讀取字元/屬性
writescr left,memory從記憶體恢復螢幕區域INT 10h/09h 寫入
showcur show光標顯示/隱藏 (CH=0/1)INT 10h/01h

主程式邏輯流程

  1. 初始化:設定視訊模式 03h (80×25 文字)、隱藏光標、繪製主視窗與標題、輸出操作提示
  2. 繪製主選單列:第 0 行,5 個主選單項目,預設屬性 70h,當前項反白 0Fh + 底線 74h
  3. 訊息循環 input: INT 16h/00h 讀取鍵盤掃描碼,分派處理:
  • ESC (01h) → 退出確認視窗
  • 左/右鍵 (4Bh/4Dh):主選單切換 或 子選單開啟時切換主選單
  • 下鍵 (50h):主選單時展開子選單;子選單時向下選擇項目(循環)
  • 上鍵 (48h):子選單時向上選擇項目(循環)
  • Alt+F/E/R/D/H (21h/12h/13h/20h/23h):直接展開對應子選單
  • Enter (1Ch):主選單時展開子選單;子選單時確認選擇(顯示選中項訊息,Exit 項則退出程式)
  1. 子選單展開 (FALT/EALT/...):保存覆蓋區域畫面、繪製子選單框架、高亮第一項、設置 subshow=1
  2. 子選單導航 (PRSUP/PRSDOWN):修改高亮項、循環切換
  3. 確認選擇 (PRSENTER):根據 mainnum/subnum 顯示對應確認訊息、Exit 項調用 EXIT 程序
  4. 退出程序 (EXIT):繪製感謝視窗、等待按鍵、恢復文字模式、DOS 退出

擴充指南

在 PRSENTER 中各 entersubXX 標號處填入實際功能調用(如檔案操作、編輯功能、編譯運行、除錯命令、幫助顯示),即可轉化為實用工具選單。巨集庫可直接複用於其他文字模式 TUI 程式。

編譯與執行

tasm menu.asm
tlink menu.obj
menu.exe

此專案展示了 DOS 時代組合語言開發文字介面應用的完整工程實踐,巨集化設計極大提升了代碼可讀性與復用性。

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