Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 在8086中,我想打印输入的二进制文件并按原样打印_Assembly_Emu8086 - Fatal编程技术网

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

Assembly 在8086中,我想打印输入的二进制文件并按原样打印,assembly,emu8086,Assembly,Emu8086,到目前为止我已经这样做了,但在打印时它只显示高位数字。 如何解决这个问题?我已经尝试了我所知道的一切 我想要这样的输出: 输入:101 产出:101 1(0的数量) 2(共1个) 但我得到的输出是这样的: 输入:101 产量:000 三, 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

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

我想要这样的输出:

输入:101 产出:101

1(0的数量)

2(共1个)

但我得到的输出是这样的:

输入:101

产量:000

三,

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
在输入端: 输入数字中的每个数字应在
BX
中提供一个位。为此,您需要使用
和al,1
来屏蔽,而不是您编写的
和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
最低位,因此需要首先将这些位移到同一寄存器
BX
高端 假设
BX
有16位位置,并且输入的位数在C变量中,您可以写入:

 mov cl, 16       ;Total bits in BX
 sub cl, C        ; minus count of inputted bits
 shl bx, cl       ;Now inputted bits start at bit[15]

 MOV CH, 0
PRINT:
 CMP CH, C
 JE  END_
 INC CH
 SHL BX, 1        ;Here you shift out the highest bit
 JC  RS
 ; and so on...

老实说,我不明白你在说什么。在你描述的场景中(输入为
101
),你希望
SHL BX,CL
如何生成进位?也许你想做的是
SHR BX,1
,尽管你将按相反的顺序打印位。我不明白为什么你不使用中断函数,先读取字符串输入,然后检查循环中的每个字符。您的代码根本没有任何注释,也不清楚您将计数保存在哪里-只有三个存储字节
D
F
C
,这些名称到底有多混乱?寄存器、十六进制还是什么?