在8086中,我想打印输入的二进制文件并按原样打印

时间:2017-11-20 17:10:26

标签: assembly emu8086

到目前为止我已经这样做了,但是在打印时它只显示高位数。 如何解决这个问题?据我所知,我已经尝试了一切。

我想要这样的输出:

  输入:101   输出:101

     

1(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

1 个答案:

答案 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