我得到了像这样的阶梯输出
我的程序工作正常,除了当我打印一个新行,然后打印当前行中的内容时,它显示在下一行,但在它之前有一些空格。
该程序是这样的:(打印一个从0到9的多个数字的表):
data_seg segment
I DB 0D
J DB 0D
R DB ?
DIVER DB 10D
data_seg ends
stack_seg segment
stack_seg ends
code_seg segment
MAIN proc far
assume cs:code_seg, ds:data_seg, ss:stack_seg
MOV AX,data_seg
MOV DS,AX
FOR1:
MOV J,0D
FOR2:
MOV AX,0H
MOV AL,I
MUL J
DIV DIVER
MOV R,AH
ADD AL,48D
MOV AH,0EH
INT 10H
MOV AL,R
ADD AX,48D
MOV AH,0EH
INT 10H
MOV AX,32D
MOV AH,0EH
INT 10H
INC J
MOV AX,0
MOV AL,J
SUB AX,10D
JNZ FOR2
INC I
MOV AX,10D
MOV AH,0EH
INT 10H
MOV AX,0
MOV AL,I
SUB AX,10D
JNZ FOR1
MOV AX,4CH
INT 21H
MAIN endp
code_seg ends
end MAIN
字符串
7条答案
按热度按时间mwg9r5ms1#
您需要打印新行 * 和 * 回车。
lo8azlld2#
如果你使用emu80x86,这段代码应该可以做到。
字符串
idfiyjo83#
这将打印一个新行:
1)在数据段中添加:
字符串
2)然后在需要新行的任何地方使用这个:
型
omjgkv6w4#
正如anthony所说,根据你的汇编程序,你需要做一个回车和换行来转到下一行,并将光标放在该行的开头。对于MASM,你可以分别使用Call crlf或print值0dh和0ah。
hk8txs485#
你得到了一个阶梯式的输出,因为在你想在另一行继续的代码中,你只需要将控制代码10发送到显示器:
字符串
在DOS平台上,New Line 由两个字节表示:第一个字节称为 Carriage Return,它使用控制代码13,第二个字节称为 Line Feed,它使用控制代码10。
这个两字节的序列模仿了古代打字机的动作,每当你想继续下一行时,你就可以拉动一个杠杆。
这个杠杆有双重作用:
在BIOS中,它看起来像:
型
在DOS下,它看起来像:
型
如果你的程序已经包含了一个以
13, 10, '$'
结尾的字符串,那么将这3个字节移到下面的一行,适当地标记这一行,并输出新的一行:型
ps.虽然我们通常写13后面跟着10,模拟器emu8086似乎更喜欢10在13之前出现。很可能这是它的许多错误之一,而不是设计师的预期选择。
被广泛接受和接受的答案是:
你需要打印新行和回车
这就像说“要打印新行,你需要打印新行和回车”。
“New Line”是组合动作的名称,“Carriage Return”加上“Line Feed”是其组成部分。
即使在不需要回车码(13)的平台上,你也可以说:“To print new line,you need to print the linefeed code(10)"。
brvekthn6#
在emu8086中,您可以使用此功能:
字符串
r8uurelv7#
尝试将车道用于线路返回
字符串