用汇编进行代码转换程序设计

用汇编进行代码转换程序设计

一、实现功能

      设计完成一个字母或数制之间的转化程序,主程序分别具有 5 种可选择的子功能,按相应的字符可分别进入相应的子功能并在屏幕上显示结果,按“q”键退出。 5 种可选择的子功能分别为:

  • 实现小写字母向大写字母的转换
  • 实现大写字母向小写字母的转换
  • 实现二进制数向十六进制数的转换
  • 实现十六进制数向二进制数的转换
  • 实现十六进制数向十进制数的转换

二、系统分析

      对于五个子功能,可以先分别进行编程,最后在总的程序里写为5个子程序,根据用户进行的输入1~5时分别调用相应的子功能,用户输入其他字符时就是为退出程序。程序的总流程图如下:
在这里插入图片描述

     每个小功能的分析我分别写了文章,大家可以根据需要去到对应功能~

  1. 大小写的互相转换
    https://blog.csdn.net/weixin_44194299/article/details/107766574

  2. 二进制数和十六进制数的互相转换
    https://blog.csdn.net/weixin_44194299/article/details/107767047

  3. 十六进制数向十进制数的转换
    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

	
  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面是一个简单的汇编程序,可以将一个16位的十六进制数转换为十进制数: ```assembly ORG 0x100 MOV AX, 0xABCD ; 要转换的十六进制数 MOV BX, 10 ; 十进制的基数 MOV CX, 0 ; 用于保存结果的寄存器 LOOP: XOR DX, DX ; 清空 DX 寄存器 DIV BX ; 将 AX 寄存器中的值除以 10,商保存在 AX 中,余数保存在 DX 中 PUSH DX ; 将余数压入栈中 CMP AX, 0 ; 如果商为 0,说明已经完成转换 JNE LOOP ; 否则继续循环 PRINT: POP DX ; 将栈顶元素弹出到 DX 中 ADD DL, '0' ; 将余数转换为 ASCII 码 MOV AH, 2 ; AH 寄存器中的值为 2,表示要输出字符 INT 21H ; 调用 DOS 的中断 21H,输出字符 CMP SP, 0 ; 如果栈中还有元素,说明还没有输出完毕 JNE PRINT ; 否则退出程序 HLT ; 停机指令 ``` 这个程序的实现思路是将十六进制数除以 10,将余数保存在栈中,最后依次弹出栈中的元素并输出,即可得到对应的十进制数。 ### 回答2: 汇编程序设计是一种通过编写汇编语言来实现程序代码的技术。在这个问题中,我们需要将一个十六进制数转换为十进制数。 要完成这个任务,我们可以按照以下步骤进行操作: 1. 了解十六进制和十进制的基本概念:十六进制是一种由0-9和A-F表示的数字系统,而十进制是我们通常使用的十个数字(0-9)表示的数字系统。 2. 获取输入的十六进制数:我们可以通过读取用户输入或从内存中获取十六进制数。 3. 将十六进制数从字符串或存储单元中读取到寄存器中。 4. 对读取到的十六进制数进行处理:我们需要逐个字符处理十六进制数,将每个字符转换为十进制数。 5. 将每个十六进制字符转换为对应的十进制值:这可以通过编写转换算法来实现。例如,字符'A'将转换为十进制的10。 6. 将得到的十进制字符逐次相加:依次将每个十进制字符相加,以得到最终的十进制结果。 7. 输出结果:将结果以十进制形式输出,可以将其存储到内存中或显示在屏幕上。 以上步骤是完成将十六进制数转换为十进制数的基本过程。在编写汇编程序时,我们需要使用适当的指令和算法来实现这些步骤。最终,我们将获得所需的十进制结果,以便进一步使用或显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值