代码转换
完成一个字母或数制之间的转化程序,主程序分别具有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
;声音提醒</