汇编语言实现输入十进制数字输出显示十六进制数字

一 代码实现

DATA SEGMENT                ;数据段  
DATA ENDS

CODE	SEGMENT             ;代码段
MAIN PROC FAR
	ASSUME CS:CODE,DS:DATA  
START:   
         MOV AX,DATA        ;设置数据段
         MOV DS,AX
GET_CHAR:MOV AH,1   	    ;DOS 1号功能调用
	     INT 21H		    ;AL=键入数字ASCII码
		 CMP AL,0DH	        ;与回车符的ASCII码比较
		 JE EXIT	    	;是回车符,转EXIT
		 SUB AL,30H     	;ASCII码转换成BCD码
		 JL	EXIT		    ;<0(非数字),则退出
		 CMP AL,9		    ;>0,则与9比较
		 JG	EXIT		    ;>9,退出

         CBW	        
         XCHG  AX,BX	    ;将先键入的数->AX
         MOV   CX,10		;10赋值给CX
	     MUL   CX		 	;将先键入的数×10->AX
	     XCHG  AX, BX       ;再次将AX和BX中的值交换,新键入数->AX
	     ADD   BX,AX	    ;累加,结果存入BX
	     JMP GET_CHAR       ;无条件转移到GET_CHAR处执行
EXIT:    
         CALl BIN_HEX ;调用子程序,转十六进制并且显示
         MOV AH,4CH;返回DOS
         INT 21H
MAIN ENDP

;子程序
BIN_HEX PROC NEAR
       MOV CH,4;转换后产生4个十六进制数字
ROTATE:MOV CL,4;小循环次数(左移四次)
       ROL BX,CL;对BX左移4次
       MOV AL,BL;AL<-BL
       AND AL,0FH;截得一个十六进制数字
       ADD AL,30H;30H,转换成ASCII码
       CMP AL,3AH;与‘9+1’比,>9?
       JL DISPLAY;<=9,转显示
       ADD AL,7H;>9,将数字0AH-0FH转换成ACSII码
DISPLAY:MOV DL,AL;DL<-待显示数字的ASCII码
        MOV AH,2
        INT 21H;显示DL中的数字
        DEC CH;4个数字是否显示完?
        JNE ROTATE;否,转回循环
        RET;显示完,退出
BIN_HEX ENDP        
CODE ENDS
END MAIN


二 运行结果
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值