HELLOWORLD進(jìn)階匯編程序系列

字號(hào):

TITLE ***HELLO,WORLD進(jìn)階程序之選擇分支 BY LLUCT***
    DATA SEGMENT ;定義數(shù)據(jù)段
    MSG1 DB '***WELCOME TO MY PROGRAM BY LLUCT***','$'
    ;定義輸出的第一個(gè)字符串信息,字符串必須用DB定義,$為結(jié)束標(biāo)志
    MSG2 DB '1:BASIC MESSAGE 2:ADVANCED MESSAGE','$'
    ;定義輸出的字符串信息:選擇菜單
    MSG3 DB 'PLEASE CHOOSE:','$'
    ;定義輸出的字符串信息:選擇前綴
    MSG4 DB 'HELLO,WORLD!^-^','$'
    ;定義輸出的字符串信息:分支1的信息
    MSG5 DB 'THIS IS MY FIRST ASM_86 PROGRAM! @^-^@','$'
    ;定義輸出的字符串信息:分支2的信息
    ERRMSG DB 'CHOOSE ERROR! -_-b','$'
    ;定義輸出的字符串信息:選擇錯(cuò)誤信息
    DATA ENDS ;數(shù)據(jù)段結(jié)尾
    CODE SEGMENT ;定義代碼段
        ASSUME CS:CODE ;規(guī)定CS的內(nèi)容
        ASSUME DS:DATA ;規(guī)定DS的內(nèi)容
    START: MOV AX,DATA ;程序從START開(kāi)始
        MOV DS,AX ;DS置初值,DATA的段地址
        CALL ENTER ;調(diào)用顯示回車(chē)換行子程序
     LEA DX,MSG1 ;輸出第一個(gè)字符串的偏移地址
        CALL DISPCHS ;調(diào)用顯示字符串子程序
        CALL ENTER ;調(diào)用顯示回車(chē)換行子程序
        CALL ENTER ;這個(gè)...同上啊^-^
        LEA DX,MSG2 ;輸出第二個(gè)字符串的偏移地址
        CALL DISPCHS ;調(diào)用顯示字符串子程序
    AGAIN: CALL ENTER ;定義AGAIN標(biāo)號(hào).用于選擇錯(cuò)誤循環(huán)
        LEA DX,MSG3 ;輸出第三個(gè)字符串的偏移地址
        CALL DISPCHS ;調(diào)用顯示字符串子程序
        MOV AH,01H ;調(diào)用1號(hào)功能:從鍵盤(pán)輸入一個(gè)字符并回顯
        INT 21H ;完成輸入回顯
        CMP AL,'1' ;輸入的字符和1相比較
        JE BASICP ;如果相等,轉(zhuǎn)移到BASICP標(biāo)號(hào)(JE=Jump if Equal)
        CMP AL,'2' ;輸入的字符和2相比較 ||
        JE ADVANP ;如果相等,轉(zhuǎn)移到ADVANP標(biāo)號(hào)(JE=如果相等就轉(zhuǎn)移)
        JMP ERROR ;否則就無(wú)條件轉(zhuǎn)移到ERROR標(biāo)號(hào)
    EXIT: MOV AH,4CH ;4C號(hào)功能調(diào)用:終止當(dāng)前程序并返回調(diào)用程序
        INT 21H ;返回DOS
    BASICP: CALL ENTER ;什么,還要解釋啊.暈-_-!!!
        LEA DX,MSG4 ;輸出第三個(gè)字符串的偏移地址
        CALL DISPCHS ;調(diào)用顯示字符串子程序
        CALL ENTER ;..........
        JMP EXIT ;無(wú)條件轉(zhuǎn)移到EXIT標(biāo)號(hào)
    ADVANP: CALL ENTER ;55555555
        LEA DX,MSG5 ;解釋了四次,應(yīng)該懂了吧
        CALL DISPCHS ;調(diào)用顯示字符串子程序
        CALL ENTER ;再問(wèn)就死給你看
        JMP EXIT ;無(wú)條件轉(zhuǎn)移到EXIT標(biāo)號(hào)
    ERROR: CALL ENTER
        LEA DX,ERRMSG ;輸出選擇錯(cuò)誤信息
        CALL DISPCHS ;調(diào)用顯示字符串子程序
        MOV DL,07H ;輸出ASCII碼的報(bào)警(響鈴)控制符BEL(07H)
       CALL DISPCH ;調(diào)用顯示單個(gè)字符子程序
       CALL ENTER
        JMP AGAIN
    DISPCH PROC NEAR
    ;顯示單個(gè)字符子程序,NEAR說(shuō)明子程序和主程序在同一個(gè)代碼段中(現(xiàn)無(wú)主程序調(diào)用)
     MOV AH,02H ;2號(hào)功能調(diào)用:顯示器輸出字符
        INT 21H ;完成輸出顯示
        RET ;返回
    DISPCH ENDP ;子程序結(jié)尾
    ENTER PROC NEAR ;顯示回車(chē)換行子程序
        MOV DL,0DH ;輸出ASCII碼的回車(chē)控制符CR(0DH)
        CALL DISPCH ;調(diào)用顯示單個(gè)字符子程序
        MOV DL,0AH ;輸出ASCII碼的換行控制符LF(0AH)
        CALL DISPCH ;調(diào)用顯示單個(gè)字符子程序
        RET ;返回
    ENTER ENDP ;子程序結(jié)尾