raw モードで文字を読み取るプログラムがあります。つまり、入力された文字はバッファリングされるのではなく、すぐに読み取られます。
バックスペースを実行する方法を知りたいです。つまり、Backspace キーを押すと、左側の文字が削除され、カーソルが 1 つ左に移動します。
バックスペース文字に続いてスペース文字を出力しようとしました。これにより、左側の文字が削除されますが、何らかの理由でカーソルが2スペース右に移動します。
また、バックスペース文字を単独で出力しようとしました。これにより、カーソルが 1 スペース左に移動しますが、文字は削除されません。
私のアセンブラは 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 を出力します。通常の Backspace のように、カーソルを 1 か所左に移動しません。
mov al, 0x08 ; ASCII for Backspace
call printchar
このコードは、Backspace の後に Space を出力します。カーソルを 1 つではなく 2 つ右に移動します。
mov al, 0x08 ; ASCII for Backspace
call printchar
mov al, 0x20 ; ASCII for Space
call printchar
Len は、バックスペース、スペース、バックスペースの順に印刷することを提案しました。これはうまくいくようです:
mov al, 0x08 ; ASCII for Backspace
call printchar
mov al, 0x20 ; ASCII for Space
call printchar
mov al, 0x08 ; ASCII for Backspace
call printchar
前に述べたように、私は raw モードで文字を読んでいることに注意してください。前もって感謝します!