c - 如何在内联汇编中声明字符缓冲区?

标签 c arrays assembly visual-c++ inline-assembly

到目前为止我有以下代码:

char* s;
s = new char[10];

__asm
{       
    mov ebx, s
    mov byte ptr[ebx], 0x48       ;'H'
    mov byte ptr[ebx + 1], 0x65   ;'e'
    mov byte ptr[ebx + 2], 0x6C   ;'l'
    mov byte ptr[ebx + 3], 0x6C   ;'l'
    mov byte ptr[ebx + 4], 0x6F   ;'o'
    mov byte ptr[ebx + 5], 0x0A   ; 'new line'
    mov byte ptr[ebx + 6], 0;
    mov eax, ebx
    push eax
    call DWORD ptr printf
    pop ebx  
}

我想在 asm 中声明一个 char 数组而不使用 DB,那会是什么样子?

最佳答案

也可以这样:

call do_print
db "Hola...Hello", 0Ah,0
do_print:
call DWORD ptr printf
pop rcx

在调用 do_print 时,我们将缓冲区“Hello..”的实际起始地址放入堆栈返回地址,汇编语言很简单,改为 pop rcx 而不是 pop [esp]

关于c - 如何在内联汇编中声明字符缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58980426/

相关文章:

c - 我不明白deleteall(key)函数中这条语句 "cur = prev->next;"的逻辑

c - 如何更改C中的工作目录?

c++ - 使用*指针数组 C++ 设置构造函数和析构函数

ios - 检查 Jsonobject 的 Int

c - 如何使用 libelf 为我自己的编译器生成 ELF 文件?

c++ - 在流行的实现中,C 和 C++ 中的动态内存分配是否不同?

c - 为什么在减去指向结构的指针时会得到奇怪的结果?

java - 动态按钮上的事件监听器

c - 谐波平均产生不正确的结果

c - 1k 的程序空间,64 字节的 RAM。是否可以进行 1 线通信?