中山大學 West BBS-西子灣站

『主選單』
分類佈告
分類精華
休閒聊天
個人郵件
個人設定
重新登入
『應數系組合語言(楊昌彪老師)』一般區佈告
←回列表  ↑上一篇  ↓下一篇        張貼  回應       
發信人: MARUKO (イゑヘパパア)    看板:math-asm
日期: Mon Jul  7 11:33:42 1997
標題: 組合語言期末程式

8424034 史忠榮

組合語言 期末程式 成果報告書


前言:

  這次本來是要寫個遊戲(轟炸超人),那知卻礙於時間因素,只變成秀圖程式(只秀出遊戲畫面),不過我還是把我用到的東西寫一下吧!



繪圖模式:

  變更顯示模式的方法主要有二種:

    (1) 修改VGA的暫存器。
    (2) 使用BIOS呼叫。

  這次我使用了第二個方法。使用第二個方法有一些考量:

    (1) 方便。只要知道呼叫的方法和傳遞的參數就可以了,而且相容性的問題不會產生,因為顯示卡眾多,雖然都號稱彼此相容,不過可能都只有BIOS相容而已,其
w體構造並不一定相容。
    (2) 安全。修改VGA暫存器不像CPU的暫存器,改錯了頂多當機重開罷了,將VGA的暫存器改錯了,雖然VGA卡不會怎麼樣,但是螢幕就不敢保證了。

  不過使用第一種方法也有好處:

    (1) 速度快。這是使用硬體控制都有的優點。
    (2) 可以定義出自己的顯示模式。BIOS提供的模式就那幾種,自己定義就沒有此限制。

  我這次使用的是VGA MODE 13 320X200 256色。

  順便提一下,BIOS中以7 Bits 來表示顯示模式,其MSB並不會改變顯示模式,它的功用是改變顯示模式時,要不要清除顯示記憶體(1表是不要)。


調色盤:

  MODE 13雖然只能同時顯示256色,但是我們可以自己調色。

  一種顏色是由R(red)G(green)B(blue)三色所組成。每一種顏色用6bits代表,所以總共可以表示262144色。

  設定調色盤的方法跟變更顯示模式的方法一樣,也是那兩種,在此我也是使用了BIOS呼叫。

  調色盤的功用不少,善用調色盤可以做出簡單的動畫效果。。。等。不過說歸說,要做出來可不太容易,還得要有些許的美術天份才行。

  我程式中圖片的顏色都是用 Windows 95 中的小畫家找出來的。不過95中RGB都以1 Byte表示,所以必須將它除以4就可以得到大約的數值。



顯示方式:

  要將圖片在螢幕上顯示的方法,還是少不了BIOS,不過我沒使用這方法,因為它實在太慢了。

  至於有多慢呢?我另外有一個小程式把( PAL.EXE
)是用來顯示出調色盤的顏色,這個程式我就使用了BIOS呼叫,很明顯的會有一些延遲,雖然還是很快,但是就不會像直接讀寫這樣整張一起出來。

  雖然前面都是使用BIOS來做,而且也都是較慢的方式,但是因為不會有畫面出現,所以還不打緊;但是要是圖是一條一條的出現,那可就不一樣了,而且我本來做的是遊戲
A所以顯示的速度不能忽略,所以我使用了直接寫入顯示記憶體的方式。

  在此做的事,就只有記憶體間資料的搬移。

  MODE 13的顯示記憶體從A000:0000開始,所以只要算好位置就行了。

  位置的算法最好不要用乘除法,可以用移位的指令。

  在此我也不使用 MOV 做資料搬移,改用 MOVSB ,再配合 REP ,這樣好處至少有:

    (1) 速度較快。
    (2) 較方便。因為 80x86 的 CPU 是不允許記憶體間資料的搬移,所以必須使用暫存器當 BUFFER ,這樣會使程式碼變長,而且原始檔也會比較大。
    (3) 機器碼較短。

  由於我使用的模式只有一頁(PAGE),所以考慮的不用那麼多。



結論:

  我寫了這個程式,才了解寫一個遊戲實在是不簡單,不單是程式要寫的好,還要有戲劇天份,美術天份也是不可欠缺的。






參考書籍:

(1) EGA與VGA程式設計指南。 Richard F. Ferraro 著。 黃三益。許錦松 譯。 儒林圖書有限公司。 1995年7月3版。
(2) 80X86組合語言徹底研究。 林承戰。林俊杰 著。


--
㊣ Origin: 國立中山大學 West BBS ㊣ From: 140.117.36.146


--
㊣ Origin: 國立中山大學 West BBS ㊣ From: 140.117.36.146


←回列表  ↑上一篇  ↓下一篇        張貼  回應