繁体   English   中英

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

[英]Performing a Backspace in YASM or NASM assembly

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

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

我试过输出一个Backspace字符,再跟一个Space字符。 spaces to the right, for some reason. 这会删除左侧的字符,但是由于某种原因会将光标向右移动空格。

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

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

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

    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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM