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

