我正在用 NASM 编写简单的时钟程序。我通过 iTerm 在 OSX 下使用 Ubuntu 14.10 Vagrant box。终端是 xterm,所以应该兼容 VT-100。
我需要删除一行。例如,我期望以下行为:
Hello, this is clock program
13:01:25 UTC+4
下一刻:
Hello, this is clock program
13:01:26 UTC+4
我写了以下函数。对于打印:
func_print:
mov eax, sys_write
mov ebx, stdout
int 0x80
ret
为了清楚:
clr db 0x1b, "[K"
clr_len equ $-clr
...
func_clear:
mov ecx, clr
mov edx, clr_len
call func_print
为了保存和恢复位置,我使用 VT-100 及其命令:[7
和[8
分别:
csave db 0x1b, "[7"
csave_len equ $-csave
crestore db 0x1b, "[8"
crestore_len equ $-crestore
我的代码:
global _start
_start:
mov ecx, welcome
mov edx, welcome_len
call func_print
call func_print
call func_save_cursor_pos
mov dword [tv_sec], 2
mov dword [tv_usec], 0
call func_sleep
call func_clear
call func_restore_cursor_pos
mov ecx, welcome
mov edx, welcome_len
call func_print
jmp func_exit
然而,结果是:
vagrant@vagrant-ubuntu-trusty-64:~$ ./run.sh
Hello, this is the clock program
Hello, this is the clock program
Hello, this is the clock program
vagrant@vagrant-ubuntu-trusty-64:~$
如果我clr
通过添加进行更改,[1A
或者[1B
似乎将行删除到远高于或低于所需的水平:
vagrant@vagrant-ubuntu-trusty-64:~$ ./run.sh
Hello, this is the clock program
Hello, this is the clock program
Hello, this is the clock program
vagrant@vagrant-ubuntu-trusty-64:~$
我该如何解决?什么是正确的代码?