用汇编进行代码转换程序设计
一、实现功能
设计完成一个字母或数制之间的转化程序,主程序分别具有 5 种可选择的子功能,按相应的字符可分别进入相应的子功能并在屏幕上显示结果,按“q”键退出。 5 种可选择的子功能分别为:
- 实现小写字母向大写字母的转换
- 实现大写字母向小写字母的转换
- 实现二进制数向十六进制数的转换
- 实现十六进制数向二进制数的转换
- 实现十六进制数向十进制数的转换
二、系统分析
对于五个子功能,可以先分别进行编程,最后在总的程序里写为5个子程序,根据用户进行的输入1~5时分别调用相应的子功能,用户输入其他字符时就是为退出程序。程序的总流程图如下:
每个小功能的分析我分别写了文章,大家可以根据需要去到对应功能~
-
大小写的互相转换
https://blog.csdn.net/weixin_44194299/article/details/107766574 -
二进制数和十六进制数的互相转换
https://blog.csdn.net/weixin_44194299/article/details/107767047 -
十六进制数向十进制数的转换
https://blog.csdn.net/weixin_44194299/article/details/107768533
三、运行结果
-
功能1-大写转成小写:
-
功能2-小写转成大写:
-
功能3-二进制数转为十六进制数:
-
功能4-十六进制数转为二进制数:
-
功能5-十六进制数转为十进制数
四、源代码
DATA SEGMENT
MSG1 DB 'Please input your choice: (P.S:q is exit)$'
MSG2 DB '1: Uppercase to lowercase $'
MSG3 DB '2: Lowercase to Uppercase $'
MSG4 DB '3: Binary to Hex $'
MSG5 DB '4: Hex to binary $'
MSG6 DB '5: Hex to dec $'
MSG7 DB 'Please input a number: $'
MSG8 DB ' <==> $'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
P:
CALL CRLF
LEA DX,MSG2 ;输出菜单
MOV AH,09H
INT 21H
CALL CRLF
LEA DX,MSG3
MOV AH,09H
INT 21H
CALL CRLF
LEA DX,MSG4
MOV AH,09H
INT 21H
CALL CRLF
LEA DX,MSG5
MOV AH,09H
INT 21H
CALL CRLF
LEA DX,MSG6
MOV AH,09H
INT 21H
CALL CRLF
LEA DX,MSG1
MOV AH,09H
INT 21H
CALL CRLF
MOV AH,01H ;读入一个数到AL中
INT 21H
push ax
CALL CRLF
pop ax
SUB AL,30H
CMP AL,1
JE F1
CMP AL,2
JE F2
CMP AL,3
JE F3
CMP AL,4
JE F4
CMP AL,5
JE F5
CALL EXIT ;按其他键退出
F1:
CALL FUNC1
JMP P
F2:
CALL FUNC2
JMP P
F3:
CALL FUNC3
JMP P
F4:
CALL FUNC4
JMP P
F5:
CALL FUNC5
JMP P
EXIT PROC NEAR
MOV AH,4CH
INT 21H
EXIT ENDP
CRLF PROC NEAR
MOV DL,0DH ;换行
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
RET
CRLF ENDP
FUNC1 PROC NEAR
LEA DX,MSG7
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,41H
JB RET1
CMP AL,5AH
JA RET1
ADD AL,20H
LEA DX,MSG8
MOV AH,09H
INT 21H
MOV DL,AL
MOV AH,02H
INT 21H
RET1: RET
FUNC1 ENDP
FUNC2 PROC NEAR
LEA DX,MSG7
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,61H
JB RET2
CMP AL,7AH
JA RET2
SUB AL,20H
LEA DX,MSG8
MOV AH,09H
INT 21H
MOV DL,AL
MOV AH,02H
INT 21H
RET2: RET
FUNC2 ENDP
FUNC3 PROC NEAR
LEA DX,MSG7
MOV AH,09H
INT 21H
MOV CH,4
MOV DL,0
INPUT3:
MOV AH,1
INT 21H
CMP AL,30H
JB RET3
CMP AL,31H
JA RET3
JE L3 ;输入的是1
ROL DL,1
OR DL,0
JMP AGAIN3
L3:
ROL DL,1
OR DL,1
AGAIN3:
DEC CH
JZ PRINT3
JMP INPUT3
PRINT3:
CMP DL,0
JB RET3
CMP DL,9
JA COMPER3
ADD DL,30H
JMP HEX3
COMPER3:
ADD DL,37H
HEX3:
MOV AL,DL
LEA DX,MSG8
MOV AH,09H
INT 21H
MOV DL,AL
MOV AH,02H
INT 21H
RET3: RET
FUNC3 ENDP
FUNC4 PROC NEAR
LEA DX,MSG7
MOV AH,09H
INT 21H
INPUT4:
MOV AH,1
INT 21H
CMP AL,30H
JB EXIT4
CMP AL,39H
JA COMPER1
JMP CHANGE1 ;在0~9之间
COMPER1:
CMP AL,41H
JB EXIT4
CMP AL,46H
JA COMPER2
JMP CHANGE2 ;在A-F之间
COMPER2:
CMP AL,61H
JB EXIT4
CMP AL,66H
JA EXIT4
JMP CHANGE3 ;在a~f之间
CHANGE1:
SUB AL,30H
JMP ENT
CHANGE2:
SUB AL,37H
JMP ENT
CHANGE3:
SUB AL,57H
JMP ENT
ENT:
LEA DX,MSG8
MOV AH,09H
INT 21H
MOV CH,8
MOV BL,AL
PRINT4:
ROL BL,1
MOV DL,BL
AND DL,1
ADD DL,30H
MOV AH,02H
INT 21H
DEC CH
JZ EXIT4
JMP PRINT4
EXIT4: RET
FUNC4 ENDP
FUNC5 PROC NEAR
LEA DX,MSG7
MOV AH,09H
INT 21H
INPUT5:
MOV AH,1
INT 21H
CMP AL,30H
JB EXIT5
CMP AL,39H
JA COMPER5
JMP CHANGE11 ;在0~9之间
COMPER5:
CMP AL,41H
JB EXIT5
CMP AL,46H
JA COMPER6
JMP CHANGE22 ;在A-F之间
COMPER6:
CMP AL,61H
JB EXIT5
CMP AL,66H
JA EXIT5
JMP CHANGE33 ;在a~f之间
CHANGE11:
SUB AL,30H
JMP ENT5
CHANGE22:
SUB AL,37H
JMP ENT5
CHANGE33:
SUB AL,57H
JMP ENT5
ENT5:
MOV BL,AL
LEA DX,MSG8
MOV AH,09H
INT 21H
MOV AL,BL
MOV AH,0
MOV BL,10
DIV BL
MOV DH,AH
CMP AL,0
JE ONE
MOV DL,AL ;十位数是1
ADD DL,30H
MOV AH,02H
INT 21H
ONE: ;十位数是0
MOV DL,DH
ADD DL,30H
MOV AH,02H
INT 21H
EXIT5: RET
FUNC5 ENDP
CODE ENDS
END START