2011年5月22日 星期日

MASM_9

信區 : 破解網-破解技術討論區

日期 : Tue May 14, 14:58                                                      
來自 : Jerry Cls                                               39:40/103
給   : All                                
標題 : ASM9                                                                 
--------------------------------------------------------------------------------

@TID: FastEcho 1.40 17014

※  您是否覺得用組譯器產生程式的方法,比 DEBUG 麻煩多了!
※  以小程式而言,的確是如此;但對於較大的程式,您就可以發
  現其優點了。
※  我們將 ASCII 程式以組譯器方式再做一次,看看有無差異。
※  首先,您必須先利用文書處理程式建立 ASCII.ASM 檔案。

prognam segment         ;start of segment
        assume cs:prognam  ;assume what's in CS
        mov  cx,100h    ;put counter in CX
        mov  dl,0       ;first ASCII character
next:   mov  ah,2       ;Display Output Function
        int  21h        ;call DOS to print
        inc  dl         ;next ASCII chacter
        loop  next      ;do again, until counter = 0
        int 20h         ;return to DOS
prognam ends            ;end of segment
        end             ;end of assembly

※  在組合語言的原始程式碼中,每一個程式列都包含四項元素:
      start:    mov        dl,1    ;first character
       標記   運算子    運算元     註解
※  在原始檔案中加上註解可使程式更易瞭解,便於以後參考。

※  每列註解欄以『;』開頭。
※  組譯器會將『;』以後的敘述當做註解而不予理會。
※  註解欄的資料不會出現在 OBJ、EXE 或 COM 檔案中。
※  在中文系統下,註解也可使用中文,但為了程式的可攜性,
  建議您還是練習英文吧!

※  由於在撰寫原始程式碼時,我們並不知道每一程式列的位址
  ,所以必須以符號名稱來代表相對位址,稱為『符號位址』。
    如上  next:   mov  ah,2       ;Display Output Function
    之 next:
※  我們通常在適當列上的標記欄位置上,鍵入符號位址。
※  當要修改程式時,會發現使用標記讓程式的彈性較大,因為
  組譯器會自動算出標記欄中的符號位址。

※  標記(label)最長可達 31 個字元,因此我們在程式中,儘
  量以簡潔易懂的文字做為標記。
※  標記欄是每列的第一欄,可與所要標記的指令在同一列,也可
  位於該指令的前一列。
※  現在,您可以將此 ASCII.ASM 檔案組譯成 ASCII.COM 了。
1.請輸入 MASM ASCII       3.請輸入 EXE2BIN ASCII ASCII.COM
2.請輸入 LINK ASCII       4.請輸入 ASCII

Microsoft (R) Macro Assembler Version 5.10
Copyright (C) Microsoft Corp 1981, 1988.  All rights reserved.
Object filename [ASCII.OBJ]:

Source listing  [NUL.LST]:

Cross-reference [NUL.CRF]:

  48096 + 403883 Bytes symbol space free
      0 Warning Errors
      0 Severe  Errors

※  對初學者而言,MASM 的功能太強了,它的許多命令太複雜,
  以致常會妨礙了我們學習組合語言的興緻與效果。
※  某些高明的指令事實上只對頗有經驗的組合語言程式師有用
  ,對我們而言,是太過高深了。
※  事實上,使用 MASM 就好像在開 747 一樣,只有 DEBUG 才有
  螺旋槳飛機的味道;因為,在 DEBUG 上面的控制全部都跟組合
  語言有直接的關係。
※  如果您覺得組合語言蠻有趣的,終究您必須要用到 MASM。
※  為了使學習組合語言程式有個好的開始,您必須要先排除那些
  華麗複雜的命令,將心力集中在最重要的幾個命令上。
※  隨著您對 MASM 技巧的成長,最後您一定會感覺它是您在組合
  語言程式設計上的左右手。

※  當您以組譯器組合您自己設計的程式時,常會發生打字錯誤、
  助憶符號名稱拼錯、十六進制數字少了h、邏輯錯誤等。
※  組合語言的老手常給新鮮人的忠告是:最好預期自己所寫的
  程式一定會有些錯誤。
※  如果第一次執行程式後,就得到合理的答案,您最好還是帶
  著懷疑的心,因為它可能是錯的。
※  原則上,只要大體的邏輯架構正確,發掘程式中間題的過程
  ,應該與撰寫程式本身有相同的樂趣。
※  撰寫大程式時,最好能分成許多模組(Module),如此可使
  程式本身的目的較單純,易於撰寫與維修;另外也可讓程式
  式中不同的部份之間的介面較清楚,並節省組譯的時間。

※            我們將撰寫一個能從鍵盤取得一個十進位的數值,
  並將其轉換成十六進位數值而顯示於螢幕上的『大程式』。
※  要讓 8088 微處理器執行這樣的功能,我們必須先將此問題
  分解成一連串的步驟,稱為『程式規劃』。
※  首先,以流程圖的方式,來確保整個程式的邏輯沒有問題。
※  您可使用一種界於英文與 8088 組合語言間的『虛擬語言』來
  解釋程式,例如:以 BASIC 的方式來表達程式規劃的問題。
※  最後就是將『虛擬程式碼』改寫成 8088 組合語言的程式。
※  這種模組化的規劃方式,稱之為『由上而下的程式規劃』。
※  在真正撰寫程式時,卻是從最小的單位(模組)開始撰寫,
  當每個模組都完成之後,再將其合併成大方程式;這種大處
  著眼,小處著手的方式稱為『由下而上的程式設計』。

※  我們的第一個模組是 BINIHEX,其主要用途是從 8088 的 BX
  暫存器中取出二進位數,並以十六進位方式顯示在螢幕上。 


--- SuperBBS 1.17 (Reg)
 * Origin: BEAR BBS OPEN:24HR  TEL : (02)377-6746 (39:40/103)
PATH: 40/103 100

沒有留言:

張貼留言