汇编语言实验——十进制与十六进制转换

汇编语言练习题

1、输入两个十进制的数,以十六进制输出两者的和,例如,输入3和4,输出07;输入6和7,输出0D;输入8和9,输出11
2、输入两个十六进制的数,以十进制输出两者的和。例如,输入3和5,输出08;输入6和7,输出13;输入9和A,输出19

;输入两个十进制的数,以十六进制输出两者的和,例如,输入3和4,输出07;输入6和7,输出0D;输入8和9,输出11
;输入两个十六进制的数,以十进制输出两者的和。例如,输入3和5,输出08;输入6和7,输出13;输入9和A,输出19
ASSUME CS:CODE,DS:DATA,SS:STACK
DATA SEGMENT
        NUM1 DB 0,0     ;存放第一种运算的两个加数
        NUM2 DB 0,0     ;存放第二种运算的加数
        SUM  DW 0,0     ;存放两个运算的和
        STR1 DB 'Please input two numbers (DEC) :',0AH,0DH,'$'
        SUM1 DB 'The sum is (HEX) :',0AH,0DH,'$'
        STR2 DB 'Please input two numbers (HEX) :',0AH,0DH,'$'
        SUM2 DB 'The sum is (DEC) :',0AH,0DH,'$'
        CRLF DB 0AH,0DH,'$'
DATA ENDS

STACK SEGMENT
        DB 128 DUP(0)
STACK ENDS

CODE SEGMENT
START:
        MOV AX,DATA
        MOV DS,AX
        MOV AX,STACK
        MOV SS,AX
;-------输出提示语句------
        LEA DX,STR1
        MOV AH,9
        INT 21H
INPUT_DEC:
;-------输入两个十进制数-----
        MOV AH,01H
        INT 21H
        MOV NUM1[0],AL
        SUB NUM1[0],30H
        
        MOV AH,01H
        INT 21H
        MOV NUM1[1],AL
        SUB NUM1[1],30H

        LEA DX,CRLF
        MOV AH,9
        INT 21H

SUM_DEC:
        MOV BL,NUM1[0]
        ADD BL,NUM1[1]
        ;SUB BX,30H
        MOV SUM[0],BX  ;将第一个计算结果的ASCII码存放在sum1

PRINTSUM_HEX:
;-------提示输出答案16进制
        LEA DX,SUM1
        MOV AH,9
        INT 21H

        MOV AX,SUM[0]
        CMP AX,16
        JG  PRINT_DIGIT      ;比9小,在0-9范围
        CMP AX,10
        JB PRINT_DIGIT      ;在10-15范围内
        JMP  PRINT_CHAR     ;比9大,比16小,输出字母

PRINT_DIGIT:
        MOV BX,16		;dx=10,除以10
	    MOV CX,0		;cx记录位数,最后输出字符的个数,记录循环次数
	    MOV DX,0		;dx记录余数
S1:		                ;将单个数字依次入栈
	    DIV BX		    ;ax=ax/16商,dx=ax/16余数
	    PUSH DX	    	;将余数dx入栈
	    INC CX		    ;位数加一
	    CWD			    ;将ax扩展到dx.ax
	    CMP AX,0		;将剩下的数ax与0比较
	    JNE S1  		;若ax!=0,继续循环
S2:      		        ;输出字符,cx为循环次数,一个数有多少位
	    POP DX		    ;栈顶的数据出栈,给dx
	    ADD DL,30H	    ;转化为字符
        MOV AH,02H
	    INT 21H		    ;dl字符输出
        LOOP S2		    ;循环cx
        JMP INPUT_HEX

PRINT_CHAR:
        MOV DX,0
        SUB AX,10
        MOV DL,AL
        ADD DL,65
        MOV AH,02H
        INT 21H
        JMP INPUT_HEX

INPUT_HEX:
;------输出换行-----
        LEA DX,CRLF
        MOV AH,9
        INT 21H
;------输出提示字符串-----
        LEA DX,STR2
        MOV AH,9
        INT 21H
;-------输入加数-----
        MOV AH,01H
        INT 21H
        MOV NUM2[0],AL

        MOV AH,01H
        INT 21H
        MOV NUM2[1],AL

        LEA DX,CRLF
        MOV AH,9
        INT 21H
        LEA DX,SUM2
        MOV AH,9
        INT 21H

JUDGE PROC NEAR
        MOV CX,2
        MOV SI,0
        MOV BX,0
SUM_HEX:
;-------比较判断是数字还是字母-----
        MOV AL,NUM2[SI]
        CMP AL,57               ;和9比较
        JG  TO_DEC              ;是字母,变回数字   
SUM_AGAIN:
        SUB NUM2[SI],30H
AD:     INC SI
        LOOP SUM_HEX
        JMP DEAL_SUM
TO_DEC:
        SUB AL,65
        ADD AL,48
;-------将字母对应的数字扩成对应十进制-----        
        SUB AL,38
        SUB AL,32
        MOV NUM2[SI],AL
        JMP AD
    RET
JUDGE ENDP
        
DEAL_SUM:
        MOV BL,NUM2[0]
        ADD BL,NUM2[1]
        MOV SUM[2],BX
        JMP PRINT_DIGIT2

PRINT_DIGIT2 PROC NEAR
        MOV AX,BX       ;AX存放着sum2
        MOV BX,10		;dx=10,除以10
	    MOV CX,0		;cx记录位数,最后输出字符的个数,记录循环次数
	    MOV DX,0		;dx记录余数
T1:		                ;将单个数字依次入栈
	    DIV BX		    ;ax=ax/10商,dx=ax/10余数
	    PUSH DX	    	;将余数dx入栈
	    INC CX		    ;位数加一
	    CWD			    ;将ax扩展到dx.ax
	    CMP AX,0		;将剩下的数ax与0比较
	    JNE T1  		;若ax!=0,继续循环
T2:      		        ;输出字符,cx为循环次数,一个数有多少位
	    POP DX		    ;栈顶的数据出栈,给dx
	    ADD DL,30H	    ;转化为字符
        MOV AH,02H
	    INT 21H		    ;dl字符输出
        LOOP T2		    ;循环cx
        JMP EXIT
    RET
PRINT_DIGIT2 ENDP

EXIT:
        MOV AX,4C00H
        INT 21H

CODE ENDS
END START

  • 6
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值