微机原理换行代码_东华大学微机原理课程设计--代码转换
代碼轉換
完成一個字母或數制之間的轉化程序,主程序分別具有5種可選擇的子功能,按相應的字符可分別進入相應的子功能并在屏幕上顯示結果,按“q”鍵退出。
5種可選擇的子功能分別為:
1)實現小寫字母向大寫字母的轉換
2)實現大寫字母向小寫字母的轉換
3)實現二進制數向十六進制數的轉換
4)實現十六進制數向二進制數的轉換
5)實現十六進制數向十進制數的轉換
要求顯示美觀,操作界面友好。
Code、
;===============================================================================
;
DHU.asm--代碼轉換
;
微機匯編語言程序設計
;===============================================================================
;定義數據段
DATAS SEGMENT
BUFFER DB 40
DUP(?)
CAPTCHAMA DB 4
DUP(?)
MSG1 DB "PLEASE
INPUT YOUR CHOICE: $"
MSG2 DB "1:Lowcase
to Capital:$"
MSG3 DB "2:Capital
to Lowcase:$"
MSG4 DB "3:Binary
to Hex:$" ?;在存儲器中存放供顯示的數據,以下類推
MSG5 DB "4:Hex to
Binary:$"
MSG6 DB "5:Hex to
Decimal:$"
MSG18 DB "6:Decimal
to Hex:$"
MSG19 DB "7:DeFrac
to BiFrac:$"
MSG11 DB "q:Press q
to Quit $"
MSG7 DB "PLEASE
INPUT SOME LOWERCASE CHARACTERS:$"
MSG8 DB "PLEASE
INPUT SOME(<9) BINARY NUMBERS:$"
MSG9 DB "PLEASE
INPUT SOME(<21) HEX NUMBER:$"
MSG10 DB "All
Rights Reserved by DHU_Wyl $ "
MSG12 DB
"Attention:Your Entered Incorrectly! $"
MSG13 DB "Please
Press Enter,Try Again! $"
MSG14 DB "PLEASE
INPUT SOME CAPITAL:$"
MSG15 DB "PLEASE
INPUT SOME(<5) HEX NUMBER:$"
MSG16 DB "PLEASE
INPUT SOME(<5) FRACTIONAL:$"
MSG17 DB "PLEASE
INPUT DECIMAL(<65536):$"
MSG20 DB "THE
ANSWER IS:$"
MSG21 DB "PRESS ANY
KEY TO RETURN!$"
MSG22 DB "PLEASE
INPUT DECIMAL Fractional(.XXXX):$"
MSG23 DB
"DATATIME:$"
MSG24 DB "Please
enter the verification code:$"
MSG25 DB "
EXACTNESS,PRESS ANY KEY TO MAINMENU!$"
DATAS ENDS
;定義堆棧段
STACKS SEGMENT
DB 100 DUP(0) ?;在存儲器的某個區域建立一個堆棧區
STACKS ENDS
;定義代碼段
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS;段寄存器說明
START: MOV AX,DATAS
;取數據段段地址
MOV DS,AX
;建立數據段的可尋址性
CALL CAPTCHA
;調用驗證碼子函數
;------------------------------返回DOS系統----------------------------------
EXIT:
MOV AH,4CH ?;返回DOS系統
INT 21H
;中斷調用
;-------------------------------驗證碼子函數--------------------------------
CAPTCHA PROC
NEAR
CAP:
CALL CAPINPUT
;調用驗證碼輸入子函數
MOV AH,02
;設置光標位置
MOV DH,3H
;3行15列
MOV
DL,15
INT 10H
LEA SI,MSG24
MOV DX,SI
MOV AH,09
;顯示MSG24的內容
INT 21H
;讀取時鐘秒數作為隨機數,輸入正確則進入主界面,輸入錯誤則循環驗證
MOV AH,02H
;讀取時間,入口參數:AH=02H
INT
1AH
PUSH DX
;入棧,DH=BCD碼格式的秒
AND
DH,0F0H ?;DH=BCD碼格式的秒
MOV
CL,04H
SHR DH,CL
;取秒的十位
LEA
SI,CAPTCHAMA
ADD DH,30H
;轉換為ASCII碼后在屏幕輸出
MOV DL,DH
MOV AH,02H
INT 21H
MOV
[SI],DH ?;保存到CAPTCHAMA字節單元
INC SI
POP DX
;出棧,DH=BCD碼格式的秒
AND DH,0FH
;取秒的個位
ADD DH,30H
;轉換為ASCII碼后在屏幕輸出
MOV
DL,DH
MOV
AH,02H
INT
21H
MOV
[SI],DH ?;保存到CAPTCHAMA字節單元
MOV AH,02
;設置光標位置
MOV DH,5H ;第5行
MOV DL,50 ;第50列
INT 10H
MOV AH,01H
;等待鍵盤輸入
INT 21H
MOV CL,0H
CMP AL,[SI-1]
;鍵盤輸入AL與秒的十位比較,相等則跳轉CAPRIGHT0
JZ CAPRIGHT0
MOV CL,1H
CAPRIGHT0: MOV
AH,01H ?;鍵盤輸入AL與秒的個位比較,相等則跳轉CAPRIGHT1
INT 21H
CMP AL,[SI]
JZ CAPRIGHT1
MOV CL,1H
CAPRIGHT1:CMP CL,1
;驗證碼輸入錯誤則跳轉CAINPERR1
JNZ CAP1
;驗證碼輸入正確則跳轉CAP1
CAINPERR1:CALL
CAPINPUT
MOV DL,7
;聲音提醒
MOV AH,06H
;直接控制臺I/O
INT 21H
MOV AH,02
;設置光標位置
MOV DH,5 ;第5行
MOV DL,15 ;第15列
INT 10H
LEA SI,MSG12
;輸出MSG12字符串
MOV DX,SI
MOV
AH,09
INT
21H
MOV AH,02
;設置光標位置
MOV DH,7
MOV DL,15
INT 10H
LEA SI,MSG13
MOV DX,SI
MOV
AH,09 ;顯示MSG13的內容
INT
21H
MOV AH,02
;設置光標位置
MOV DH,9
MOV DL,15
;第9行/第15列
INT 10H
MOV AH,01H
INT 21H
CMP AL,0DH
JNZ CAINPERR1
JMP CAP
;輸入回車Enter則
CAP1: CALL
CAPINPUT
MOV AH,02
;設置光標位置
MOV DH,2H ;第2行
MOV DL,15 ;第15列
INT 10H
LEA SI,MSG25
MOV DX,SI
MOV
AH,09 ;顯示MSG25的內容
INT
21H
MOV AH,01
;輸入一個字符
INT 21H
MOV AX,0H
MOV BX,0H
MOV CX,0H
MOV DX,0H
CALL INITI ?;驗證碼正確后任意字符進入主頁面初始化子程序
RET
CAPTCHA ENDP
;----------------------------驗證碼輸入頁面子函數-------------------------------
CAPINPUT PROC
NEAR
MOV AH,07
;屏幕初始化,向下滾屏
MOV AL,40 ;下卷行數
MOV BH,30H
;卷入行屬性,BH=10H,藍底黑字
MOV CH,0 ;左上角行號
MOV CL,0 ;左上角列號
MOV DH,80
MOV DL,120
INT 10H
MOV AX,0H
MOV BX,0H
MOV CX,0H
MOV DX,0H
RET
CAPINPUT ENDP
;------------------------------主界面初始化函數---------------------------------
INITI PROC NEAR
MOV
AX,0H
MOV BX,0H
MOV CX,0H
MOV DX,0H
CALL
MENU ?;子程序調用MENU(初始化)
MOV
AH,01 ?;鍵盤輸入
INT
21H
CMP AL,31H
;數字1的ASCII碼為31H,小寫轉換到大寫
JZ JLTC
;若 AL=1,則轉到JLTC
CMP AL,32H
;數字2的ASCII碼為32H,大寫轉換到小寫
JZ JCTL
;若AL=2,則轉到JCTL
CMP AL,33H
;代碼含義同上
JZ JBTH
CMP AL,34H
JZ JHTB
CMP AL,35H
JZ JHTD
CMP AL,36H
JZ JDTH
CMP AL,37H
JZ JFTF
CMP AL,'q'
JZ JEXIT
JNZ JINPUTERROR
;鍵盤輸入其它字符,報用戶輸入錯誤
RET
INITI ENDP
;條件轉移只能用8位位移量,當跳轉距離超出范圍時,跳到近處某
;處的一條JMP/call指令上,通過接力實現遠距離跳轉
JLTC:
CALL LTC
JCTL:
CALL CTL
JBTH:
CALL BTH
JHTB: CALL HTB
JHTD:
CALL HTD
JDTH:
CALL DTH
JEXIT:
CALL EXIT
JFTF:
CALL FTF
JINPUTERROR: CALL
INPUTERROR
;------------------------小寫字母轉換為大寫字母------------------------------------
LTC PROC NEAR
CALL CLEAR
;調用子程序
MOV SI,OFFSET
MSG7
CALL INPUT
;在INPUT子函數設置"LEA SI,BUFFER"
LTC1:
MOV AL,[SI]
CMP AL,'a'
;判斷輸入范圍是否在'a'~'z'之間,超出則輸出報錯
JB LTCINERR
CMP AL,'z'
JA LTCINERR
SUB AL,20H
;輸入范圍正確,小寫字母轉換為大寫字母
MOV
DL,AL
MOV AH,02
;輸出轉換后的大寫字母
INT 21H
INC SI
MOV AL,[SI]
CMP AL,0DH
;若輸入不是回車,則繼續小寫字母轉換為大寫字母
JNZ LTC1
MOV AH,01
;輸入一個字符
INT 21H
CMP AL,0DH
JMP INITI
;輸出結束后按任意鍵返回主頁面
RET
LTC
ENDP
LTCINERR: CALL
INPUTERROR
;--------------------------大寫字母轉換為小寫字母-----------------------------------
CTL PROC NEAR
CALL CLEAR ?;子程序CLEAR調用
MOV SI,OFFSET MSG14
;取MSG14的地址指針送入SI
CALL INPUT
;調用輸入函數INPUT,在INPUT子函數設置"LEA
SI,BUFFER"
CTL1:
MOV AL,[SI]
CMP AL,'A'
;判斷輸入范圍是否在'A'~'Z'之間,超出則輸出報錯
JB CTLINERR
CMP AL,'Z'
JA CTLINERR
ADD AL,20H
;輸入范圍正確,大寫字母轉換為小寫字母
MOV
DL,AL
MOV AH,02
;顯示一個字符
INT
21H
INC SI
MOV
AL,[SI]
CMP
AL,0DH
JNZ CTL1
;若不輸入回車的話,則繼續大寫字母轉換為小寫字母
MOV
AH,01
INT
21H
CMP AL,0DH
JMP INITI
;輸出結束后按任意鍵返回主頁面
RET
CTL ENDP
CTLINERR: CALL
INPUTERROR
;----------------------------二進制轉換十六進制-----------------------------------
BTH PROC NEAR
CALL CLEAR
;二進制轉換十六進制
MOV SI,OFFSET
MSG8
CALL INPUT
;調用輸入函數INPUT,在INPUT子函數設置"LEA SI,BUFFER"
MOV BX,0
;初始化數
BTH0: ADD BX,BX
MOV
AL,[SI]
SUB AL,30H
;將ASCII碼轉換為二進制
CMP AL,1
;判斷輸入是否是0、1,超出則輸出報錯
JZ BTH1
CMP AL,0
JZ BTH2
JNZ BTHINERR
;輸入超出0、1,則輸出報錯,跳轉BTHINERR
BTH1:
ADD BX,1
BTH2:
INC SI
MOV
AL,[SI]
CMP AL,0DH
;若不輸入回車的話,則繼續轉換
JNZ BTH0
MOV AX,BX
MOV CL,10H
DIV CL
;除以16,AH余數做個位,AL商做高位
MOV DH,AH
MOV DL,AL
;輸出十六進制數
CMP DL,9
;判斷是否小于等于9
JBE BTH3
ADD DL,7H
;'A'~'F'則加37H變為ASCII碼
BTH3: ADD DL,30H
;'0'~'9'則加30H變為ASCII碼
MOV AH,02
INT 21H
MOV DL,DH
CMP DL,9
JBE BTH4
ADD DL,7H
;'A'~'F'則加37H變為ASCII碼
BTH4: ADD DL,30H
;'0'~'9'則加30H變為ASCII碼
MOV AH,02
INT 21H
MOV DL,'H'
;輸出'H'表示十六進制
MOV AH,02
INT 21H
MOV AH,01
;輸入一個字符
INT 21H
CMP AL,0DH
JMP INITI
;按任意鍵返回主頁面
RET
BTH ENDP
BTHINERR:
CALL INPUTERROR
;----------------------十六進制轉換二進制----------------------------------------------
HTB PROC NEAR
;十六進制轉換二進制
CALL
CLEAR
MOV SI,OFFSET
MSG9
CALL INPUT
;調用輸入函數INPUT,在INPUT子函數設置"LEA SI,BUFFER"
RE:
MOV AL,[SI]
CMP AL,'0'
;判斷輸入范圍是否在'0'~'F'之間,超出則輸出報錯
JB HTBINERR
CMP AL,'F'
JA HTBINERR
CMP
AL,39H
JBE LL1
;小于或等于數字9,跳轉LL1
SUB AL,7H
LL1:
SUB AL,30H ?;輸入ASCII碼轉換為對應數
MOV
CL,4
SHL AL,CL
;邏輯左移4位
MOV CX,4H
HTB1: ROL AL,1
;帶進位循環左移
PUSH
AX
AND AL,1
;和1與,AL=1則輸出1,AL=0則輸出0
MOV DL,AL
ADD DL,30H
MOV AH,02
;輸出字符
INT 21H
POP AX
LOOP HTB1
INC SI
MOV AL,[SI]
CMP
AL,0DH
JNZ RE
;若不輸入回車的話,則繼續轉換
MOV AH,01
;輸入一個字符
INT 21H
JMP INITI
;按任意鍵返回主頁面
RET
HTB ENDP
HTBINERR:
CALL INPUTERROR
;-----------------------------十六進制轉換十進制-----------------------------------------
HTD PROC NEAR
;十六進制轉換十進制
CALL
CLEAR
MOV SI,OFFSET
MSG15
CALL INPUT
;在INPUT子函數設置"LEA SI,BUFFER"
MOV BX,0H
;初始化結果
HTDLP1: MOV
CL,04H
SHL BX,CL
;左移四位等于乘以16
MOV
AL,[SI]
CMP AL,'0'
;判斷輸入范圍是否在'0'~'F'之間,超出則輸出報錯
JB HTDINERR
CMP AL,'F'
JA HTDINERR
CMP
AL,3AH
JB
HTDLP2
SUB
AL,07H
HTDLP2: SUB AL,30H
;輸入ASCII碼轉換為對應數
MOV AH,0H
ADD BX,AX
INC SI
MOV AL,[SI]
CMP AL,0DH
JNZ HTDLP1
;若不輸入回車的話,則繼續轉換
MOV
CX,10000D
CALL
DEC_DIV ?;調用除法子函數,以下類推
MOV
CX,1000D
CALL
DEC_DIV
MOV
CX,100D
CALL
DEC_DIV
MOV
CX,10D
CALL
DEC_DIV
MOV
CX,1D
CALL
DEC_DIV
MOV AH,01 ?;輸入一個字符
INT 21H
CMP AL,0DH
JMP INITI
;按任意鍵返回主頁面
HTD ENDP
HTDINERR: CALL
INPUTERROR
;-----------------------------十進制轉換十六進制-------------------------------------
DTH PROC NEAR
;十進制轉換十六進制
CALL
CLEAR
MOV SI,OFFSET
MSG17
CALL INPUT
;在INPUT子函數設置"LEA SI,BUFFER"
MOV BX,0H
;初始化結果
DTHLP1: ADD
BX,BX
MOV CX,BX
ADD BX,BX
ADD BX,BX
ADD BX,CX
;BX乘以10
MOV
AL,[SI]
CMP AL,'0'
;判斷輸入范圍是否在'0'~'9'之間,超出則輸出報錯
JB DTHINERR
CMP AL,'9'
JA DTHINERR
SUB AL,30H
;輸入ASCII碼轉換為對應數字
MOV AH,0H
ADD BX,AX
INC SI
MOV AL,[SI]
CMP AL,0DH
;若不輸入回車的話,則繼續轉換
JNZ DTHLP1
MOV
CX,1000H ?;調用除法子函數,以下類推
CALL
DEC_DIV
MOV
CX,100H
CALL
DEC_DIV
MOV
CX,10H
CALL
DEC_DIV
MOV
CX,1H
CALL
DEC_DIV
MOV AH,02H
MOV DL,'H'
INT 21H
MOV AH,01 ?;輸入一個字符
INT 21H
CMP AL,0DH
JMP INITI
;按任意鍵返回主頁面
DTH ENDP
DTHINERR: CALL
INPUTERROR
;----------------------------十進制小數轉換為二進制小數---------------------------------
FTF PROC NEAR
;十進制小數轉換為二進制小數
CALL
CLEAR
MOV SI,OFFSET
MSG22
CALL INPUT
;在INPUT子函數設置"LEA SI,BUFFER"
MOV AL,[SI]
CMP AL,2EH
;2EH對應小數點(.)
JNZ FTFINERR
MOV BX,0H
;初始化結果
MOV DX,1H
INC SI
FTFLP1: ADD
BX,BX
MOV AX,BX
ADD BX,BX
ADD BX,BX
ADD BX,AX
;BX乘以10
MOV
AL,[SI]
CMP AL,30H
;判斷輸入范圍是否在'0'~'9'之間,超出則輸出報錯
JB FTFINERR
CMP AL,39H
JA FTFINERR
SUB AL,30H
;輸入ASCII碼轉換為對應數字
MOV AH,0H
ADD BX,AX
;BX被賦值
ADD DX,DX
MOV CX,DX
ADD DX,DX
ADD DX,DX
ADD DX,CX
;DX乘以10
INC SI
MOV AL,[SI]
CMP
AL,0DH
JNZ FTFLP1
PUSH DX
MOV DL,30H
;輸出“0.XX”
MOV AH,02H
INT 21H
MOV DL,2EH
MOV AH,02H
INT 21H
POP DX
MOV CX,04H
;小數精度設置
FTFLP3: ADD BX,BX
;轉換為二進制小數
MOV
AL,0
CMP BX,DX
;BX每次乘以2,DX相當于1,二者比較
JB FTFLP2
SUB BX,DX
MOV AL,1
FTFLP2: PUSH DX
;入棧
MOV
DL,AL
ADD DL,30H
;轉變為ASCII碼輸出
MOV AH,02H
INT 21H
POP DX
;出棧
LOOP FTFLP3
MOV AH,01
;輸入一個字符
INT 21H
CMP AL,0DH
JMP INITI
;按任意鍵返回主頁面
FTF ENDP
FTFINERR: CALL
INPUTERROR
;---------------------------除法輸出--------------------------------------------
DEC_DIV PROC NEAR
;以十進制形式輸出
MOV AX,BX
;BX存儲數值
MOV DX,0
DIV CX
;DX,AX
MOV BX,DX
;余數—>BX
MOV DL,AL
;商->DL
CMP DL,0AH
JB DIV1
ADD DL,07H
DIV1:
ADD DL,30H
MOV AH,2H
;輸出商的ASCII碼
INT 21H
RET
DEC_DIV ENDP
;-----------------------------------界面MENU--------------------------------
MENU PROC NEAR
;界面MENU子函數
CALL CLEAR
;調用子程序CLEAR
MOV AH,02 ;設置光標位置(24,55)
MOV DH,24
MOV DL,55
INT 10H
LEA SI,MSG23
MOV DX,SI
MOV
AH,09 ;顯示MSG23的內容
INT
21H
MOV AH,04H
;功能04H,讀取日期
INT 1AH
PUSH DX
;DH=BCD碼格式的月,DL=BCD碼格式的日
PUSH CX
;CH=BCD碼格式的世紀,CL=BCD碼格式的年
PUSH CX
PUSH CX
MOV CL,CH
MOV AL,CL
AND CL,0F0H
;讀出十位世紀
XCHG BH,CL
MOV CL,4
SHR BH,CL
XCHG
BH,CL
CMP CL,0AH
JB YEAR6
ADD CL,07H
YEAR6:
ADD CL,30H
MOV DL,CL
MOV AH,02H
INT 21H
POP CX
MOV CL,CH
AND CL,0FH
;讀出個位世紀
CMP CL,0AH
JB YEAR7
ADD CL,07H
YEAR7:
ADD CL,30H
MOV DL,CL
MOV AH,02H
INT 21H
POP CX
MOV AL,CL
AND CL,0F0H
;讀出十位年份
XCHG BH,CL
MOV CL,4
SHR BH,CL
XCHG
BH,CL
CMP CL,0AH
JB YEAR0
ADD CL,07H
YEAR0:
ADD CL,30H
MOV
DL,CL
MOV AH,02H
INT 21H
POP CX
AND CL,0FH
;讀出個位年份
CMP CL,0AH
JB
YEAR1
ADD CL,07H
YEAR1:
ADD CL,30H
MOV
DL,CL
MOV AH,02H
INT 21H
MOV DL,2FH
;"/"
MOV AH,02H
INT 21H
POP DX
;DH=BCD碼格式的月,DL=BCD碼格式的日
MOV CX,DX
PUSH CX
PUSH CX
PUSH CX
MOV CL,CH
MOV AL,CL
AND CL,0F0H
;讀出十位月份
XCHG BH,CL
MOV CL,4
SHR BH,CL
XCHG BH,CL
CMP CL,0AH
JB
YEAR4
ADD CL,07H
YEAR4:
ADD CL,30H
MOV
DL,CL
MOV AH,02H
INT 21H
POP CX
MOV CL,CH
AND CL,0FH
;讀出個位月份
CMP CL,0AH
JB
YEAR5
ADD CL,07H
YEAR5:
ADD CL,30H
MOV
DL,CL
MOV AH,02H
INT 21H
MOV DL,2FH
;"/"
MOV AH,02H
INT 21H
POP CX
MOV AL,CL
AND CL,0F0H
;讀出十位日
XCHG BH,CL
MOV CL,4
SHR BH,CL
XCHG BH,CL
CMP CL,0AH
JB
YEAR2
ADD CL,07H
YEAR2:
ADD CL,30H
MOV
DL,CL
MOV AH,02H
INT 21H
POP CX
AND CL,0FH
;讀出個位日
CMP CL,0AH
JB
YEAR3
ADD CL,07H
YEAR3:
ADD CL,30H
MOV
DL,CL
MOV AH,02H
INT 21H
MOV AX,0H
MOV BX,0H
MOV CX,0H
MOV DX,0H
MOV AH,02
;設置光標位置
MOV DH,3
;第3行,第25列
MOV DL,25
INT 10H
LEA SI,MSG2
MOV DX,SI
MOV
AH,09 ;顯示MSG2的內容
INT
21H
MOV
AH,02
MOV
DH,5
MOV
DL,25
INT
10H
LEA
SI,MSG3 ;取MSG3的有效地址
MOV
DX,SI
MOV
AH,09
INT
21H ;輸出MSG3字符串
MOV
AH,02 ?;設置光標位置
MOV
DH,7
MOV
DL,25
INT
10H
LEA
SI,MSG4 ;取MSG4的有效地址
MOV
DX,SI
MOV
AH,09
INT
21H ;輸出MSG4字符串
MOV
AH,02 ?;設置光標位置
MOV
DH,9
MOV
DL,25
INT
10H
LEA
SI,MSG5
MOV
DX,SI
MOV
AH,09
INT
21H ;輸出MSG5字符串
MOV
AH,02 ;至光標位置
MOV
DH,11
MOV
DL,25
INT
10H
LEA
SI,MSG6
MOV
DX,SI
MOV
AH,09
INT
21H ?;輸出MSG6字符串
MOV ?AH,02
MOV
DH,13
MOV
DL,25
INT
10H
LEA
SI,MSG18
MOV
DX,SI
MOV
AH,09 ?;輸出MSG18字符串
INT
21H
MOV
AH,02
MOV
DH,15
MOV
DL,25
INT
10H
LEA
SI,MSG19 ;輸出MSG19字符串
MOV
DX,SI
MOV
AH,09
INT
21H
MOV
AH,02 ;至光標位置
MOV
DH,17
MOV
DL,25
INT
10H
LEA
SI,MSG11 ?;輸出MSG11字符串
MOV
DX,SI
MOV
AH,09
INT
21H
MOV
AH,02 ;至光標位置
MOV
DH,23
MOV
DL,05
INT
10H
LEA
SI,MSG10 ?;輸出MSG10字符串
MOV
DX,SI
MOV
AH,09
INT
21H
MOV
AH,02 ;至光標位置
MOV
DH,20
MOV
DL,20
INT
10H
LEA
SI,MSG1
MOV
DX,SI
MOV
AH,09 ?;輸出MSG1字符串
INT
21H
RET
;返回
MENU ENDP
;------------------------設置初始化背景界面---------------------------------------------------
CLEAR PROC NEAR
;CLEAR子函數,設置初始化界面
PUSH AX
;寄存器入棧保護
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
MOV AH,07
;屏幕初始化,向下滾屏
MOV AL,40 ;下卷行數
MOV BH,20H
;卷入行屬性
MOV CH,0 ;左上角行號
MOV CL,0 ;左上角列號
MOV DH,80
MOV DL,120
INT 10H
POP DI
;出棧
POP SI
POP DX
POP CX
POP BX
POP AX
RET
;返回
CLEAR ENDP
;--------------------------------回車換行過程----------------------------------------
CRLF
PROC NEAR ?;回車換行輸出
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
MOV DL,0DH
;輸出回車CR
MOV AH,02
;輸出DL寄存器的字符到顯示
INT 21H
MOV DL,0AH
;輸出換行LF
MOV AH,02
INT 21H
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
RET
CRLF ENDP
;-----------------------鍵盤輸入函數------------------------------------
INPUT PROC NEAR
;鍵盤輸入函數
MOV AH,02 ?;設置光標位置
MOV DH,3
MOV DL,2
INT 10H
MOV DX,SI
MOV AH,09
;輸出字符串
INT 21H
LEA SI,BUFFER
CONTINUE: MOV AH,01
;輸入一個字符
INT 21H
MOV [SI],AL
INC SI
CMP AL,0DH
JNZ
CONTINUE ?;若不輸入回車,則繼續執行CONTINUE
CALL CRLF
;調用回車換行子程序
MOV AH,02
;設置光標位置
MOV DH,8
MOV DL,36
INT 10H
MOV SI,OFFSET
MSG21
MOV DX,SI
MOV AH,09
INT 21H
;顯示MSG21的內容
MOV AH,02
MOV DH,5
MOV DL,2
INT 10H
MOV SI,OFFSET MSG20
;顯示MSG20的內容
MOV DX,SI
MOV AH,09
INT 21H
LEA SI,BUFFER
RET
INPUT ENDP
;--------------------報錯界面(有聲音)-----------------------------------
INPUTERROR PROC
NEAR
INPERR1: CALL CLEAR
;調用子程序
MOV DL,7 ?;聲音提醒輸入錯誤
MOV AH,06H
;直接控制臺I/O
INT 21H
MOV AH,02
;設置光標位置
MOV DH,5 ;第5行
MOV DL,15 ;第15列
INT 10H
LEA SI,MSG12
MOV DX,SI
MOV AH,09
;顯示MSG2的內容
INT 21H
MOV AH,02
;設置光標位置
MOV DH,7 ;第7行
MOV DL,15 ;第15列
INT 10H
LEA SI,MSG13
MOV DX,SI
MOV
AH,09 ;顯示MSG13的內容
INT
21H
MOV AH,02
;設置光標位置
MOV DH,9 ;第9行
MOV DL,15 ;第15列
INT 10H
MOV AH,01H
INT 21H
CMP AL,0DH
JNZ INPERR1
;輸入其它按鍵跳轉INPERR1
CALL INITI
;輸入回車返回主頁面
RET
INPUTERROR ENDP
CODES ENDS
;代碼段結束
END START ?;程序結束
總結
以上是生活随笔為你收集整理的微机原理换行代码_东华大学微机原理课程设计--代码转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: layui option 动态添加_la
- 下一篇: 手机的小窗口怎么弄_做一个表白小程序