首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在x86 NASM中向字符串添加分号?

在x86 NASM中向字符串添加分号?
EN

Stack Overflow用户
提问于 2018-09-27 02:36:52
回答 1查看 254关注 0票数 1

我正在尝试在NASM中创建一个x86汇编宏,它使用ANSI转义代码将光标移动到用户终端窗口中指定的X、Y坐标。代码是:

代码语言:javascript
复制
; MoveCursor    X,      Y
segment     .data
format:
    db  `\033[%d;%dH` ; First %d is Y coordinate, second %d is X coordinate
                      ; Backticks tell NASM to process these as C-Strings
                      ; Semicolon seperates the Y and X values.
%macro  MoveCursor  2
        lea     rdi,    [rel format]
        lea     rsi,    [rel %2]
        lea     rcx,    [rel %1]    ; ANSI move cursor code is in Y, X format, hence reversing parameters
                                    ; to provide more traditional X,Y format.
        call    _printf ; Print the ANSI code to move the cursor.
        ; printf should have printed something like "\033[1;5H" at this point
%endmacro

你可能已经看到我的问题了。NASM使用Intel语法,其中";“标记注释的开始。因此,NASM认为"format“中第一个分号之后的所有内容都是注释。因此,宏将更改Y坐标,但不会更改X坐标,因为x坐标的位置已从printf格式中注释掉。我试过了,但是据我所知。我不是ANSI代码方面的专家) ANSI转义代码需要用分号分隔两个数字,我不能使用空格。

有没有办法绕过这个问题呢?如何正确获取"\033[%d;%dH“中分号,而NASM不认为它是注释?当然,我可以编写一个C++程序来做这件事,并将它与我的汇编语言程序链接起来,但我更喜欢用汇编语言。

我正在运行Mac,并且使用x86汇编语言编程。我正在使用NASM和GCC来编译我的程序。

任何帮助将非常感谢,我是新来的,所以请告诉我,如果我写这个问题的时候做错了什么。

EN

回答 1

Stack Overflow用户

发布于 2018-09-27 02:50:57

完美回答你的问题的一个很好的资源是:

https://github.com/richard-jp-leguen/glorified-typings/blob/master/ta-material/soen228-w2011/tut-01.nasm-programming-for-soen228.md

NASM处理字符串转义类似于高级语言(C#、JAVA),但略有不同。将字符串推入寄存器时,请确保添加用于转义的ASCII代码,并添加转义所需的附加长度。

在该链接中,您可以搜索"Can I Use an ASCII code?“,这是开始处理转义分号的过程的地方。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52524173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档