【问题标题】:Declaring strings OUTSIDE the .data segment in nasm assembly在 nasm 程序集中的 .data 段之外声明字符串
【发布时间】:2011-12-15 21:30:25
【问题描述】:

有没有办法像这样在汇编代码的.text 部分定义一个字符串指针?

SECTION .text          

        global main             


main:                        
        fmt:    dd      "%s", 10, 0 

或者也许已经构造了字符串并有一个指向它的寄存器,把所有这些都放在.text 部分?

【问题讨论】:

  • 是的。您可能还可以使用.rodata 部分来存储只读数据。

标签: linux gcc assembly intel nasm


【解决方案1】:

汇编器很笨,你必须明确地写所有东西,像这样:

SECTION .text          

        global main             


main:                        
        ; Some code here, you don't want to execute data.

        mov     ebx, fmt ; ebx points to fmt[0] ('%')
        mov     eax, dword [pfmt] ; eax also points to fmt[0] ('%')

        ; Some more code here.

        pfmt    dd fmt ; pfmt is a constant pointer to fmt[0] ('%')
        fmt     db "%s", 10, 0 ; fmt is a constant string

您也许可以使用宏来简化编码:

%macro  LoadRegWithStrAddr 2+

        jmp     %%endstr
  %%str:        db      %2
  %%endstr:
        mov     %1, %%str

%endmacro

SECTION .text          

        global main             


main:                        
        LoadRegWithStrAddr ebx, "%s", 10, 0 ; ebx points to "%s\n"

LoadRegWithStrAddr ebx, "%s", 10, 0 扩展为:

        jmp     %%endstr
  %%str:        db      "%s", 10, 0
  %%endstr:
        mov     ebx, %%str

请参阅 NASM 文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 2015-10-06
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    相关资源
    最近更新 更多