Post view

組合語言新手上路篇:打造文字窗(3)

組合語言新手上路篇

打造文字窗(3)

作者:蘇言霖

畫一個文字窗並不難,但如果希望在螢幕上,畫幾個能任意縮放的視窗就不容易了,特別是用組合語言這樣的工具!

現在讓我們換個方式,試著打造一個能在螢幕上隨意定位、放大縮小、而且能指定顏色的「視窗」!

哇,會不會很難?不會的!其實我們只更換WINS2.ASM其中的視窗「資料結構」與「畫窗副程式」兩個組件而已。比方講,我們改用底下的資料結構來表示一個視窗:

windows db TopX,TopY,Width,Length,color

TopX與TopY表示視窗左上角,在螢幕上的(X,Y)位置。Width與Length代表視窗的寬度與長度。color可表示視窗的顏色。這個資料結構是我們定的,您也可以試著設計不同的結構,讓視窗擁有更強大的功能。

如此一來,只要這樣寫:

windows db 10,6,30,5,070H

並呼叫ShowWindows程式,就可以在螢幕上(10,6)的位置畫一個30*5大小的「反白」視窗了。如需移動視窗,只要改變10,6這兩個數字。若希望改變視窗大小,則改變30,5這兩個數字即可。當然,您也可以只改變視窗顏色。

狂飆組合語言

焦點:主程式組件

焦點:含括檔組件

焦點:副程式組件

焦點:巨集程式組件

焦點:函式庫組件

模組化程式編譯方式

組合語言自動排擋系統

架構排檔系統

操作自動排檔桿 (談 Make)

自動化程式編譯方式

設計高級巨集程式

簡易型巨集程式

智慧型巨集程式

打造文字視窗系統

架構全新的文字窗

畫一個文字窗並不難,但如果希望在螢幕上,畫幾個能任意縮放的視窗就不容易了,特別是用組合語言這樣的工具!

我們的目的是輕輕鬆鬆學會組合語言,而不是把問題複雜化,建一套像Windows那樣的視窗系統來難倒自己!因此,本期將延續上次迷你WINDOW.ASM程式的話題,試著把組合語言排入不同的檔位。

專欄名稱:組合語言新手上路篇

企劃:蘇言霖 4/21/95

打造文字窗 (1)

‧ 發動組合語言引擎

‧ 打造一個文字視窗

‧ 好用的編譯工具

‧ 認識組合語言

‧ 更輕鬆的學習方式

‧ 關於編譯器

打造文字窗 (2)

‧ 變換組合語言排檔

副程式設計之一 (使用標記)

副程式設計之二 (使用 proc

‧ 文字視窗組件

含括檔配件

繪框副程式配件

建構文字視窗

‧ 打造新的文字窗

架構副程式模組

多程式編譯方式

使用函式庫

函式庫程式編譯方式

打造文字窗 (3)

‧ 狂飆組合語言

焦點:主程式組件

焦點:含括檔組件

焦點:副程式組件

焦點:巨集程式組件

焦點:函式庫組件

模組化程式編譯方式

‧ 組合語言自動排擋系統

架構排檔系統

操作自動排檔桿 (談 Make

自動化程式編譯方式

‧ 設計高級巨集程式

簡易型巨集程式

智慧型巨集程式

‧ 打造文字視窗系統

架構全新的文字窗

雙凸輪軸引擎系統

‧ 螢幕引擎系統

文字螢幕的結構

直接操作組件

‧ 檔案引擎系統

MS-DOS 檔案結構

檔案的基本操作組件

‧ 抓文字螢幕程式

打造一個非常駐的抓文字螢幕程式

☆主題:輕鬆學組合語言(暫定)

☆企劃:蘇言霖

▽組合語言快速入門

‧ 介紹組合語言程式的基本架構
‧ 必學的 CPU 指令
‧ 必學的假指令
‧ 使用 MASM 或 TASM
‧ 使用 LINK 或 TLINK
‧ 最簡單的組合語言程式
‧ 認識軟硬體中斷(簡介)
‧ 實例:非常駐的「抓文字螢幕」程式

▽模組化組合語言

‧ 認識 LIB 函式庫
‧ 認識含括檔
‧ 模組化的第一步:建立函式庫
‧ 模組化的第二步:建立含括檔
‧ 認識 MAKE 程式製作器
‧ 實例:列印字串、10、16 進制整數的簡單函式庫

▽巨集組合語言

‧ 認識 Macro 巨集
‧ 認識條件組譯指令
‧ 靈巧的巨集指令(建立聰明自動的巨集程式)
‧ 實例:以巨集製作更簡單好用的函式庫
‧ 鍵盤簡介
‧ 實例:鍵盤跑馬燈(把 NumLock、CapsLock、ScrollLock 循環點亮)

▽MASM 與 TASM

‧ 簡介 MASM 6.1
‧ 簡介 TASM 4.0
‧ 簡介 TASM 的 Ideal Mode
‧ 簡介與 C 和 C++ 的連結

    精神恍惚之際,彷彿聽到幾個磁性的聲音,一個爽朗的笑聲很快地吸引我抬頭瞧瞧...


如何學會組合語言


    組合語言的程式一向給人冰冷的感覺,缺少人性與您熟悉的指令,為什麼組合語言不能像 BASIC、C 語言一樣呢?

    個人的經驗認為學組合語言只有兩種方法,一是改變自己的習慣,從此不說 BASIC、C 語言,把 Assembly 當做母語天天講另一種是改變組合語言,把 Assembly 高階化,配合您的習慣!不會吧?這可能嗎?可以的而且不難,只要您先學會「變把戲」,就可以用程式來寫組合語言程式。

    本文已預設讀者至少會一種高階語言,如 BASIC、PASCAL、C、C++ 均可,讀者應該都會寫點程式吧,如果您完全沒有概念,請先從 C 或 C++ 開始,先學會一套高階語言,再來學組合語言,這樣您的組合語言程式會寫得很漂亮。當然也會有人持不同看法,當然,您也可以先學低階的組合語言,再先高階語言,不過用這種方式養成習慣,高階語言,特別是物件導向程式,就學不好啦!原因?很簡單,組合語言的非結構化、到處的標記、隨便 Jump 跳躍等,絕對會在您的心中埋下一顆
壞精靈,不時干擾您!

    組合語言在您心目中是什麼樣子呢?簡單直接?複雜難懂?像外星人般怪異?您覺得如何?
    很奇怪,奇怪的指令、奇怪的、還有一大堆不知所以的標記,其實組合語言的任何一個程式片段,別說您看不懂,即使是超級高手也不知所以。挫折感對任何人都很沉重,最後誰不是遍體麟傷才能苦盡甘來,

    在這個單元,我們將透過三個輕快的主題引導穿插,與您閒聊,快速地帶您進入組合語言的天地。這幾個題目是:

‧製作一個文字視窗:在這裡您可以學會組合語言的‧抓螢幕程式:文字模式非常駐型。這個例子可以學會如果直接存取
  螢幕,以及建立簡單的文字檔案。


‧迷你編輯器:這是一個單螢幕的文字編輯程式,您可以學會如何使用鍵盤、控制游標位置、檔案處理等。


    本文不想報導最新的 MASM 6.x,新增的 486、Pentium 和假指令群對初學者並沒有很大的幫助,而且程式體積龐大只能在硬碟上執行。反倒是簡單的 MASM 5.1 比較適合初學者,只要一張磁片就可以玩得十分愉快,適合沒有硬碟的各層學校與電腦教育中心。

    駕御這樣的組合車,需要一位玩家級的車主,以及一顆耐力超強的心和高超的駕駛技術,免得把車子撞壞了。

    嗯,說了一堆似乎有點懂又不太懂?其實初學者只要當做 MASM 這老外規定「組合語」得這樣說,那我們就這樣寫就對了。如果一開始就想知道每個指令細節與 CPU 實際執行方式,不就變成學開車前先去研究汽車結構設計?不會設計車子就不能上路,果真如此,那台北市交通就不會這樣了。

    反過來說,對組合語言有基本認識的讀者而言,一定會覺得我們太囉唆了,一個小程式講了半天。現階段還請您多包涵,為顧及從未接觸組合語言的讀者,只好如此了。但是,我們的介紹方式和順序絕對與眾不同!每期看下去就會知道。

認識 CPU 指令

    任何一個高階語言都可以輕鬆寫出 ax=bx+cx; 變數相加的式子。然這樣的式子用組合語言來做,卻得寫成下列的二個指令:

    mov ax,bx
    add ax,cx

    mov 和 add 是 CPU 指令,而 ax,bx 等則是該指令的「參數」。


這兩個指令用 MASM 或 TASM 等「組合語言編譯程式」翻譯之後,會直接換成兩個 CPU 命令(機器指令)。

    486 以上只要花 1-2 個千萬分之一秒就跑完了。誰叫 DX4-100 擁有 100Mhz 即 100*10^6 的轉速!

    初學者常會硬記 mov ax,bx 是把 bx 搬到 ax,而不是將 ax 搬到 bx。add 是把 cx 累加到 ax,而不是將 ax 加上 cx,結果放在 dx。

    幾百個 CPU 指令加上幾百個 MASM 假指令,統統硬背下來,難怪消化不良。從 8088 起每一代 CPU 都新增了幾個指令,永遠有學不完的指令。電腦補習班開組合語言課程,往往才開始上餐前酒就已紛紛離席,真正吃到水果點心者已寥寥可數。

    請不要誤會,並非叫您把黃蓮甘之如飴般嚥下。其實不好吃而又必須吃的菜,何不自己動手加點調味料,改成自己喜歡的口味呢?比如:

    mov ax,bx   ; ax=bx
    add ax,cx   ; ax=ax+cx

    哦,原來這兩個指令是 ax=bx 以及 ax=ax+cx。我們只要在指令後面用一個 ; 分號區隔,就可以添上任何註解文字,中英文均可。

    剛開始學組合語言時,最好在每個指令後面加一點註解,不見得要用文字說明,您可以加上 BASIC、C、dBASE 或任何您會高階語言。

    分號左邊的指令看不懂?沒關係,只要看看右邊的指令,這不就輕鬆多了。

    另外,限於螢幕的長度,常無法使思緒連貫。特別是寫一堆組合語言程式,才做完一件簡單的事。因此建議您每寫完幾段程式,就把程式印出來,把程式前前後後再思考一次。這對學習組合語言有很大的幫助。


認識 MASM 假指令

    同樣是組合語言程式基本架構,用 MASM 4.x、5.x、6.x 就會寫成程式一、二、三,3 種不同的樣子。顯然程式一最複雜,程式三最簡潔有力。

    程式外觀雖然不同,但經由 MASM 編譯後,交給 CPU 執行的指令卻是完全相同的。

    是否您在您心中能「組合」出所要的程式「語言」。

蘇言霖 2013/09/11 0 2057
Comments
Order by: 
Per page:
 
  • There are no comments yet
Rate
0 votes
Post info
蘇言霖
「超級懶貓級」社群網站站長
2013/09/11 (2083 days ago)
Actions