有没有办法用nasm清除终端窗口中的屏幕?通过清除屏幕,我的意思是模仿Ctrl-L热键。从窗口中删除所有文本。
这可以在nasm汇编中实现吗?
提前谢谢你,
里莱赫
发布于 2012-11-03 14:32:03
在Bash中:
echo -ne "\033[H\033[2J"在C中:
printf("\033[H\033[2J");如何查找字符串:
$ strace -e trace=write clear >/dev/null
write(1, "\33[H\33[2J", 7) = 7
Process 7983 detached发布于 2012-11-03 18:55:15
看看这个NASM程序:
http://www.muppetlabs.com/~breadbox/software/tiny/snake.asm.txt
这里有一个有趣的部分,展示了如何将转义序列写入stdout:
%define SC_write 4 ; eax = write(ebx, ecx, edx)
%define ESC 033q
; (...)
refresh:
mov eax, ESC | ('[' << 8) | (BOTTOMROW << 16)
stosd
mov eax, ';0H' | (SI << 24)
stosd
mov edx, edi
mov edi, outbuf
mov ecx, edi
sub edx, ecx
xor ebx, ebx
lea eax, [byte ebx + SC_write]
inc ebx
int 0x80代码可能并不完全符合您的要求,但是可以很容易地修改它以输出\033[H\033[2J。也可以看看这里:
http://ascii-table.com/ansi-escape-sequences-vt-100.php
此外,如果您希望代码具有可移植性,可以考虑使用一些在不同终端之间兼容的库,比如ncurses。
(编辑:那是为Linux准备的。如果你用的是Windows,我会试试this。)
https://stackoverflow.com/questions/13206629
复制相似问题