gpt4 book ai didi

assembly - 在 YASM 或 NASM 程序集中执行退格

转载 作者:行者123 更新时间:2023-12-02 22:41:01 25 4
gpt4 key购买 nike

我有一个以原始模式读取字符的程序。也就是说,任何输入的字符都会被立即读取,而不是被缓冲。

我想知道如何执行退格。也就是说,当我按下退格键时,它应该删除左边的字符并将光标向左移动一位。

我尝试输出一个退格字符后跟一个空格字符。这将删除左侧的字符,但出于某种原因将光标向右移动 两个 空格。

我也试过单独输出退格字符。这会将光标向左移动一个空格,但不会删除该字符。

我的汇编程序是 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

以下代码打印退格键。它不会像常规退格键那样将光标向左移动一位。

    mov     al, 0x08 ; ASCII for Backspace
call printchar

此代码打印一个 Backspace 后跟一个 Space。它将光标向右移动两个空格而不是一个空格。

    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

请注意,正如我之前提到的,我正在以原始模式阅读字符。提前致谢!

最佳答案

I have also tried outputting the Backspace character by itself. This moves the cursor one space to the left, but doesn't delete the character.

你快到了!尝试输出一个退格键,然后是一个常规空格以涂黑光标现在位于其上的字符,然后是另一个退格键以再次将光标移回原处。

这看起来像是 hack,但实际上很常见!

关于assembly - 在 YASM 或 NASM 程序集中执行退格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10765959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com