汇编语言:将四位十六进制数转换成二进制数

汇编语言:将四位十六进制数转换成二进制数

题目要求

从键盘接收一个四位的十六进制数,将其转换成二进制数后输出,不考虑错误输入。

运行截图

编程平台

Masm for Windows 集成实验环境 2012.5

代码实现

DATAS SEGMENT
    data DW 0;存放输入的十六进制数
    input DB 'Enter a four-digit hexadecimal number: $'
    print DB 13,10,'Corresponding binary number: $'
DATAS ENDS

STACKS SEGMENT STACK
    DB 200H DUP(?)
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC
    MOV AX,DATAS
    MOV DS,AX
    
    LEA DX,input;输入提示
    MOV AH,9H
    INT 21H
    
    ;循环接收四个字符,一边接收一边整合到data变量中
    LEA SI,data
    MOV DI,4;输入的字符个数
  l:
    MOV AH,1H;输入一个字符
    INT 21H
    CALL SUBP1;将输入的字符转换成对应的十六进制数
    MOV AH,0
    MOV BX,AX;BX存放转换好的十六进制数
    ;将当前字符移动到正确位置
    MOV AX,DI
    DEC AX
    CMP AX,0;判断是否需要移位
    JE n
    MOV CL,4
    MUL CL
    MOV CL,AL
    SHL BX,CL
  n:
    ADD [SI],BX
    DEC DI
    CMP DI,0
    JNE l
    
    LEA DX,print;输出提示
    MOV AH,9H
    INT 21H
    
    MOV BX,data
    CALL SUBP2;用二进制形式输出数据
    
    MOV AH,4CH
    INT 21H
MAIN ENDP
;子程序
;功能:将输入的字符转换成对应的十六进制。
;入口参数:AL存放输入的字符。
SUBP1 PROC
    ;判断是否为数字
	CMP AL,30H
	JB stop
    CMP AL,39H
    JG upper
    SUB AL,30H
    JMP stop
    
    ;判断是否为大写字母(A-F)
upper:
    CMP AL,41H
    JB stop
    CMP AL,46H
    JG lower
    SUB AL,37H
    JMP stop
    
    ;判断是否为小写字母(a-f)
lower:
    CMP AL,61H
    JB stop
    CMP AL,66H
    JG stop
    SUB AL,57H
    
stop:
    RET
SUBP1 ENDP
;子程序
;功能:用二进制形式输出数据。
;入口参数:BX存放要转换的数据。
SUBP2 PROC
    MOV CH,4;外循环次数,以循环得到每半个字节
    MOV CL,4;移位次数
    
  b:
    ROL BX,CL
    MOV AL,BL
    AND AL,0FH;高4位置0,低4位保持不变
    MOV DH,4;内循环次数,以循环得到每一位
    
 bo:
    ROL AL,1;每次循环移位一次,使AL的高4位依次单独存放其低4位中从左到右的每一位
    MOV DL,AL
    SHR DL,CL;使得DL中的高4位右移4位到低4位,并置高4位为0
    ADD DL,30H
    AND AX,0FH;AX低8位中的低4位保持不变,其他置0
    PUSH AX;保存,因为下面会使AH和AL的值改变
    MOV AH,2H
    INT 21H
    POP AX;恢复
    DEC DH
    CMP DH,0
    JNE bo
    
    MOV DL,' ';输出空格以便校对二进制数结果的正确性
    MOV AH,2H
    INT 21H
    
    DEC CH
    JNZ b
    
    RET
SUBP2 ENDP
CODES ENDS
    END MAIN

如果文章内容出错或者您有更好的解决方法,欢迎到评论区指正和讨论!

相关推荐
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页