linux nasm程序集在终端清除屏幕

时间:2012-11-03 06:25:16

标签: linux assembly x86 nasm

有没有办法用nasm清除终端窗口中的屏幕?通过清除屏幕,我的意思是模拟Ctrl-L热键。从窗口中删除所有文本。

这是否可以在nasm汇编中进行?

提前致谢,

Rileyh

2 个答案:

答案 0 :(得分:0)

在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

答案 1 :(得分:0)

看看这个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。)