微机原理换行代码_东华大学微机原理课程设计--代码转换
代码转换
完成一个字母或数制之间的转化程序,主程序分别具有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 ;程序结束
微机原理换行代码_东华大学微机原理课程设计--代码转换相关推荐
- 微机原理换行代码_微机原理学习笔记
基础概论 硬件设备 主机系统: CPU 存储器 输入输出接口 总线 CPU 微处理器简称CPU,是计算机的核心. 主要包括: 运算器 控制器 寄存器组 存储器 定义: 计算机中的记忆装置.用于存放计算 ...
- 微机原理换行代码_设置段落样式的标记中,用来换行的标记是:
[判断题]( )经检验,收退货品为良品,退货上架员用RF终端设备扫描,并根据指示进行良品入库作业. [单选题]Web of Science中,SAME算符(). [多选题]在进行人员培训时必须考虑的事 ...
- 微机原理换行代码_微机原理实验保留最长行输入字符的程序
STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT STRING DB 30 DB ? DB 30 DUP(?) DISPIN DB ' ...
- 微机原理换行代码_微机原理课程设计——汇编输出杨辉三角
目录 第一章 绪论 . ........................................................................................ ...
- 微机原理换行代码_微机原理
Part1 常量定义 1.常值定义 MAX_NAME_LEN 最大姓名长度 MAX_CLASS_LEN 最大班级编号长度 MAX_ID_LEN 最大学号长度 MAX_SCORE_LEN 最大成绩长度 ...
- 河南理工大学c语言报告封面,河南理工大学图书信息管理系统设计_纯c语言课程设计.doc...
河南理工大学图书信息管理系统设计_纯c语言课程设计 C语言课程设计报告 题 目:图书信息管理系统设计 河南理工大学计算机学院 目 录 第一章 题目与要求 1.1 问题提出1 1.2 本系统涉及的知识点 ...
- 为银行设计ATM菜单C语言,ATM银行管理系统代码及程序c语言课程设计【荐】.doc
ATM银行管理系统代码及程序c语言课程设计[荐].doc #include #include #include #include struct bank{ int account; char name ...
- python网络爬虫课程设计题目_山东建筑大学计算机网络课程设计《基于Python的网络爬虫设计》...
山东建筑大学计算机网络课程设计<基于Python的网络爬虫设计> 山东建筑大学 课 程 设 计 成 果 报 告 题 目: 基于Python的网络爬虫设计 课 程: 计算机网络A 院 (部) ...
- 计算机组成与原理如何书写DEC微指令,计算机组成原理课程设计16位机微程序控制器指令系统设计与实现.doc...
计算机组成原理课程设计16位机微程序控制器指令系统设计与实现 一.设计题目 16位机微程序控制器指令系统的设计与实现 二.设计目的 通过看懂教学计算机组合逻辑控制器中已经设计好并正常运行的几条基本指令 ...
最新文章
- 2022-2028年中国铁路机车行业投资分析及前景预测报告
- C#LeetCode刷题-并查集
- Kali Linux 网络扫描秘籍 第四章 指纹识别(二)
- 误删除 linux 系统文件了?这个方法教你解决
- nginx 1.11.0实现http和https正向代理
- BZOJ 1059 二分图匹配
- 计算机c程序题孔融让梨,幼儿园大班语言游戏教案《孔融让梨》含PPT课件
- p系列服务器产品介绍,常用p系列服务器RS6000服务器产品号码对照表.doc
- Unit 2, TCP header recap
- python openpyxl 操作excel 插入行,列
- java 自动点击网页_JS脚本实现网页自动秒杀点击
- 极坐标变换原理和用法
- 用C语言打印一个金字塔
- ubuntu 10.10五笔、rar解压及gedit乱码问题的解决
- oracle的date_add,SQL Server 中add函数到 oracle date add的操作
- 高电压放大器与高电流放大器该如何选择使用
- Android接入穿山甲SDK并实现开屏广告
- 达内python培训好不好
- 2021-05-18 人头检测 version-slim(主干精简速度略快),version-RFB(加入了修改后的RFB模块,精度更高)
- 【工业控制系统】工业控制系统(ICS) 安全简介第 2 部分
热门文章
- Java 把一个InputStream转换为一个BufferedReader
- 【verilog语法】关于testbench与被测module的输入输出数据类型定义:reg/wire原因
- Python基础之:数字字符串和列表
- 并发和Read-copy update(RCU)
- 怎么将swagger API导出为HTML或者PDF
- linux信号以及core
- package.json mysql_package.json入门
- 17.explain_api
- 数据结构(5) -- 图
- 【简便解法】1079 延迟的回文数 (20分)_31行代码AC