【发布时间】:2012-05-26 11:51:55
【问题描述】:
我有一个程序以原始模式读取字符。也就是说,任何输入的字符都会被立即读取,而不是被缓冲。
我想知道如何执行退格。也就是说,当我按下退格键时,它应该删除左侧的字符并将光标向左移动一位。
我尝试输出一个退格字符后跟一个空格字符。这会删除左边的字符,但出于某种原因,光标会向右移动 两个 个空格。
我也尝试过自己输出退格字符。这会将光标向左移动一格,但不会删除字符。
我的汇编程序是 YASM,我使用的是 64 位 Linux。下面是一些相关代码。
首先,这是我用来输出字符的函数:
printchar:
mov [buf], al ; Backup whatever was in al.
; buf is declared as resb 1 in section .bss
mov edx, 1
mov ecx, buf
mov ebx, 1
mov eax, 4
int 0x80
mov al, [buf] ; restore char that was previously in al
ret
以下代码打印一个退格键。它不会像您的常规 Backspace 那样将光标向左移动一位。
mov al, 0x08 ; ASCII for Backspace
call printchar
此代码打印一个退格键,后跟一个空格键。它将光标向右移动两个空格而不是一个空格。
mov al, 0x08 ; ASCII for Backspace
call printchar
mov al, 0x20 ; ASCII for Space
call printchar
Len 建议打印一个 Backspace,然后是 Space,然后是 Backspace。这似乎有效:
mov al, 0x08 ; ASCII for Backspace
call printchar
mov al, 0x20 ; ASCII for Space
call printchar
mov al, 0x08 ; ASCII for Backspace
call printchar
请注意,正如我之前提到的,我正在以原始模式读取字符。提前致谢!
【问题讨论】: