到目前为止我已经这样做了,但是在打印时它只显示高位数。 如何解决这个问题?据我所知,我已经尝试了一切。
我想要这样的输出:
输入:101 输出:1011(0的数量)
2(1的数量)
但是我得到这样的输出:
输入:101
输出:000
3
0
问题是什么以及如何解决? 请帮我解决这个问题。
.MODEL SMALL
.STACK 100H
.DATA
D DB 0
F DB 0
C DB 0
.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX
XOR BX,BX
MOV AH,1
INT 21H
WHILE_:
CMP AL,0DH
JE NEW_LINE
AND AL,0FH
SHL BX,1
OR BL,AL
INT 21H
INC C
JMP WHILE_
NEW_LINE:
MOV AH,2
MOV DL,0AH
INT 21H
MOV DL,0DH
INT 21H
MOV CL,1
MOV CH,0
PRINT:
CMP CH,C
JE END_
INC CH
SHL BX,CL
JC RS
MOV AH,2
MOV DL,30H
INC D
INT 21H
JMP PRINT
RS:
MOV AH,2
MOV DL,31H
INC F
INT 21H
JMP PRINT
END_:
MOV AH,2
MOV DL,0AH
INT 21H
MOV DL,0DH
INT 21H
MOV AH,2
ADD D,30H
MOV DL,D
INT 21H
MOV AH,2
MOV DL,0AH
INT 21H
MOV DL,0DH
INT 21H
MOV AH,2
ADD F,30H
MOV DL,F
INT 21H
MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN
答案 0 :(得分:1)
输入数字中的每个数字应在BX
中提供一位。要实现这一点,您需要使用and al, 1
而不是您编写的and al, 0Fh
进行屏蔽。
WHILE_:
CMP AL, 13
JE NEW_LINE
AND AL, 1 ;This has changed!
SHL BX, 1 ;Makes room to receive a single bit
OR BL, AL ;Adds the bit
INT 21h
INC C ;Counts the inputted bits
JMP WHILE_
由于现在输入BX
的最低位,您需要先将这些位移到同一寄存器的{strong>高端 {{ 1}}。
鉴于BX
有16位的位置,并且输入的位数在 C 变量中,您可以写:
BX