首先,我必须声明我是ASM的新手。
我有一个将字符移动到AL并将其打印到屏幕上的示例:
mov al, 041h
int 10h
mov al, 042h
int 10h
mov al, 043h
int 10h
ret
这会将ABC打印到屏幕上。
如何将这3个字符移到另一个寄存器中,我该怎么做?例如DL。
答案 0 :(得分:1)
如何将这3个字符移到另一个寄存器中,我该怎么做?例如DL。
你不能。
int 10h
函数具有固定的调用约定。您可以在需要它们的寄存器中传递参数。 mov al,dl
。
https://en.wikipedia.org/wiki/INT_10H。您需要先在AH中设置功能代码,例如“ {type}输出”功能的mov ah, 0Eh
/ int 10h
。 (在文本模式下,它仅查看AL。文档中还提到了BX中的页码和颜色,但您没有使用它。)
答案 1 :(得分:1)
这会将ABC打印到屏幕上。
仅当我们假设client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname, username = user, password = pw)
channel = client.get_transport().open_session()
command = "cd c:\;dir"
channel.exec_command(command)
out = channel.makefile().read()
err = channel.makefile_stderr().read()
returncode = channel.recv_exit_status()
channel.close() # channel is closed, but not the client
是BIOS Teletype功能的标识号时,您显示的代码才能执行此操作。
如何通过将这3个字符移动到另一个寄存器来类似的操作?例如DL。
可以!
除了BIOS API(AH=0Eh
)外,还有DOS API(int 10h
)。
如果将字符(一次一个)放入int 21h
寄存器中,则DOS Character Output function 02h还将在屏幕上打印它们,并且还有其他好处,您不必担心DisplayPage号DL
中的字符或BH
中的CharacterColor。
BL
彼得·科德斯(Peter Cordes)的答案显然仍然正确。
“您不能自由选择用于请求任何API函数的寄存器。”
在类似mov ah, 02h ;DOS Character Output
mov dl, 41h
int 21h
mov dl, 42h
int 21h
mov dl, 43h
int 21h
的指令中,将十六进制数字加 0 作为前缀是多余的,至少对我来说,这会降低可读性。
您只应将以字母开头的十六进制数字零前缀,所以以'A'...'F'开头的十六进制数字。