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é)尾
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é)尾