2011年5月22日 星期日

MASM_11

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

日期 : Wed May 15, 12:27                                                      
來自 : Jerry Cls                                               39:40/103
給   : All                                
標題 : asm11                                                                
--------------------------------------------------------------------------------

@TID: FastEcho 1.40 17014

crlf    segment
        assume cs:crlf
        mov  dl,0dh     ;carriage return
        mov  ah,2       ;display function
        int  21h        ;call DOS
        mov  dl,0ah     ;linefeed
        mov  ah,2       ;display function
        int  21h        ;call DOS
        int 20          ;return from crlf
crlf    ends
        end

※  現在我們就可以將 BINIHEX 、 DECIBIN 及 CRLF 等模組合併
  成一個完整的大程式了。

※  首先,我們必須將這三個模組程式改成『程序,Procedure』,
  然後,再寫一段簡短的小程式來輪流呼叫每一個程序。
※  所謂程序是由一群組合語言指令集合而成,通常用於執行特定
  的、定義完整的工作,在電腦語言中,常被稱做『副程式』。

crlf    proc    near
        mov  dl,0dh
        mov  ah,2
        int  21h
        mov  dl,0ah
        mov  ah,2
        int  21h
        ret
crlf    endp

※  類似 SEGMENT 與 ENDS 虛擬指令,PROC 與 ENDP 成對出現,
  用來識別並定義一個程序。
※  其實,PROC 真正的作用只是告訴組譯器:所呼叫的程序是
  屬於近程(NEAR)或遠程(FAR)。

※  一般的程式是由 DEBUG 直接呼叫的,所以用 INT 20 返回,
  對於用 CALL 指令所呼叫的程序而言,則必須改用 RET 。
※  返回指令 RET 會把控制權轉移到堆疊頂端所指定的位址,而
  該位址是由呼叫此程序的 CALL 指令所放入的。

;************************************************
decihex segment         ;DECIHEX -- Main Program
        assume  cs:decihex
repeat: call    decibin ;keyboard to binary
        call    crlf    ;print cr and lf
        call    binihex ;binary to screen
        call    crlf    ;print cr and lf
        jmp     repeat  ;do it again
;------------------------------------------------
decibin proc    near    ;PROCEDURE TO CONVERT DEC
        ............    ; ON KEYBD TO BINARY  AND
decibin endp            ; LEFT RESULT IN BX

;------------------------------------------------
binihex proc    near    ;PROCEDURE TO CONVERT BIN
        ............    ; NUMBER IN BX TO HEX ON
binihex endp            ; CONSOLE SCREEN
;------------------------------------------------
crlf    proc    near    ;PROCEDURE TO PRINT
        ............    ; CARRIAGE RETURN
        endp            ; AND LINEFEED
;------------------------------------------------
decihex ends
;************************************************
        end

※  CALL 指令用來呼叫一個副程式(程序),並將控制權轉移到
  運算元內的副程式位址,同時將 CALL 的下一指令位址定為
『返回位址』,並存入堆疊中。
※  CALL 可分為近程(NEAR)及遠程(FAR)兩種:

1.NEAR:IP 暫存器的內容被放入堆疊中。
       用於程式與程序在同一記憶區段中。
2.FAR :CS 暫存器與 IP 暫存器的內容依順序存入堆疊中。
        用於程式與程序在不同一記憶區段中。

※        探討了組合語言程式設計的較佳流程,希望能奠定您
  獨立設計的基礎,而如何利用模組化的觀念來設計程式,則
  全仰賴您平時苦練、多看的苦功,只要再多參考相關的書籍
  ,您必可從範例中獲取的更多的應用技巧,祝您成功。

             THE END
                 全文完 


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

沒有留言:

張貼留言