日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微机原理换行代码_东华大学微机原理课程设计--代码转换

發布時間:2024/1/23 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微机原理换行代码_东华大学微机原理课程设计--代码转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼轉換

完成一個字母或數制之間的轉化程序,主程序分別具有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 ?;程序結束

總結

以上是生活随笔為你收集整理的微机原理换行代码_东华大学微机原理课程设计--代码转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。