编程实现键盘输入16位二进制数,转换成等值十进制数显示。
程序执行后,要求操作员键入16位二进制数,然后程序立即进行转换,显示出等值的十进制数。
对于非法键入不受理,不回显,也不显示错误信息。
显示格式示范如下:
000010011101011B = 1259D
做而论道编写的程序如下:
;==================================
DATA SEGMENT
BUF1 DB 10, 13, 'PLEASE INPUT BIN : ', 13, 10, '$'
BUF2 DW 0
DATA ENDS
;----------------------------------
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, ES:DATA
BEG:
MOV AX, DATA
MOV DS, AX
MOV AH, 09H
MOV DX, OFFSET BUF1
INT 21H
MOV BX, 0
MOV CX, 16
_IN_:
MOV AH, 07H ;输入字符
INT 21H
CMP AL, 13
JE _OUT_
CMP AL, '0'
JB _IN_
CMP AL, '1'
JA _IN_
ADD BX, BX
CMP AL, '1'
JNE NO_0
INC BX
NO_0:
MOV AH, 02H
MOV DL, AL
INT 21H
LOOP _IN_
;--------------------------
_OUT_:
MOV BUF2, BX ;保存
MOV AH, 02H
MOV DL, 13
INT 21H
MOV DL, 10
INT 21H
MOV AX, BUF2
MOV BX, 2
CALL OUT_AX
MOV AH, 02H
MOV DL, 'B'
INT 21H
MOV DL, '='
INT 21H
MOV AX, BUF2
MOV BX, 10
CALL OUT_AX
MOV AH, 02H
MOV DL, 'D'
INT 21H
EXIT:
MOV AH, 4CH
INT 21H
;------------------------------
OUT_AX PROC ;
OR AX, AX
JZ _0_
LOOP_P:
XOR DX, DX
DIV BX
MOV CX, AX ;
OR CX, DX
JZ _E_ ;
PUSH DX ;
CALL LOOP_P
POP DX ;
CMP DL, 10
JB A30
ADD DL, 7
A30:
ADD DL, '0' ;
JMP _1_
_0_:MOV DL, '0' ;
_1_:CALL PUTC
_E_:RET
OUT_AX ENDP
;------------------------------
PUTC PROC
MOV AH, 2
INT 21H
RET
PUTC ENDP
;------------------------------
CODE ENDS
END BEG
;==================================
经过编译、连接、执行后的结果,完全符合题目要求。
题目链接:http://zhidao.baidu.com/question/544543775.html
提问者评价:THX !