代码转换

完成一个字母或数制之间的转化程序,主程序分别具有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  ;程序结束

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

  1. 微机原理换行代码_微机原理学习笔记

    基础概论 硬件设备 主机系统: CPU 存储器 输入输出接口 总线 CPU 微处理器简称CPU,是计算机的核心. 主要包括: 运算器 控制器 寄存器组 存储器 定义: 计算机中的记忆装置.用于存放计算 ...

  2. 微机原理换行代码_设置段落样式的标记中,用来换行的标记是:

    [判断题]( )经检验,收退货品为良品,退货上架员用RF终端设备扫描,并根据指示进行良品入库作业. [单选题]Web of Science中,SAME算符(). [多选题]在进行人员培训时必须考虑的事 ...

  3. 微机原理换行代码_微机原理实验保留最长行输入字符的程序

    STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT STRING DB 30 DB ? DB 30 DUP(?) DISPIN DB ' ...

  4. 微机原理换行代码_微机原理课程设计——汇编输出杨辉三角

    目录 第一章 绪论 . ........................................................................................ ...

  5. 微机原理换行代码_微机原理

    Part1 常量定义 1.常值定义 MAX_NAME_LEN 最大姓名长度 MAX_CLASS_LEN 最大班级编号长度 MAX_ID_LEN 最大学号长度 MAX_SCORE_LEN 最大成绩长度 ...

  6. 河南理工大学c语言报告封面,河南理工大学图书信息管理系统设计_纯c语言课程设计.doc...

    河南理工大学图书信息管理系统设计_纯c语言课程设计 C语言课程设计报告 题 目:图书信息管理系统设计 河南理工大学计算机学院 目 录 第一章 题目与要求 1.1 问题提出1 1.2 本系统涉及的知识点 ...

  7. 为银行设计ATM菜单C语言,ATM银行管理系统代码及程序c语言课程设计【荐】.doc

    ATM银行管理系统代码及程序c语言课程设计[荐].doc #include #include #include #include struct bank{ int account; char name ...

  8. python网络爬虫课程设计题目_山东建筑大学计算机网络课程设计《基于Python的网络爬虫设计》...

    山东建筑大学计算机网络课程设计<基于Python的网络爬虫设计> 山东建筑大学 课 程 设 计 成 果 报 告 题 目: 基于Python的网络爬虫设计 课 程: 计算机网络A 院 (部) ...

  9. 计算机组成与原理如何书写DEC微指令,计算机组成原理课程设计16位机微程序控制器指令系统设计与实现.doc...

    计算机组成原理课程设计16位机微程序控制器指令系统设计与实现 一.设计题目 16位机微程序控制器指令系统的设计与实现 二.设计目的 通过看懂教学计算机组合逻辑控制器中已经设计好并正常运行的几条基本指令 ...

最新文章

  1. 2022-2028年中国铁路机车行业投资分析及前景预测报告
  2. C#LeetCode刷题-并查集
  3. Kali Linux 网络扫描秘籍 第四章 指纹识别(二)
  4. 误删除 linux 系统文件了?这个方法教你解决
  5. nginx 1.11.0实现http和https正向代理
  6. BZOJ 1059 二分图匹配
  7. 计算机c程序题孔融让梨,幼儿园大班语言游戏教案《孔融让梨》含PPT课件
  8. p系列服务器产品介绍,常用p系列服务器RS6000服务器产品号码对照表.doc
  9. Unit 2, TCP header recap
  10. python openpyxl 操作excel 插入行,列
  11. java 自动点击网页_JS脚本实现网页自动秒杀点击
  12. 极坐标变换原理和用法
  13. 用C语言打印一个金字塔
  14. ubuntu 10.10五笔、rar解压及gedit乱码问题的解决
  15. oracle的date_add,SQL Server 中add函数到 oracle date add的操作
  16. 高电压放大器与高电流放大器该如何选择使用
  17. Android接入穿山甲SDK并实现开屏广告
  18. 达内python培训好不好
  19. 2021-05-18 人头检测 version-slim(主干精简速度略快),version-RFB(加入了修改后的RFB模块,精度更高)
  20. 【工业控制系统】工业控制系统(ICS) 安全简介第 2 部分

热门文章

  1. Java 把一个InputStream转换为一个BufferedReader
  2. 【verilog语法】关于testbench与被测module的输入输出数据类型定义:reg/wire原因
  3. Python基础之:数字字符串和列表
  4. 并发和Read-copy update(RCU)
  5. 怎么将swagger API导出为HTML或者PDF
  6. linux信号以及core
  7. package.json mysql_package.json入门
  8. 17.explain_api
  9. 数据结构(5) -- 图
  10. 【简便解法】1079 延迟的回文数 (20分)_31行代码AC