АСМ - встроенный ассемблер в C++
Итак, у меня есть этот код asm со мной, и я хочу использовать его встраиваемый с c++, (комбинация asm и cpp)
я видел много ссылок для этого, но ни один не отвечает, как это сделать, код asm приведен ниже
.text .def ___main; .scl 2; .type 32; .endef .section .rdata,"dr" LC0: <<<<<<< ********************************************** LC0 is here .ascii "Hello, world!\0" .text .globl _main .def _main; .scl 2; .type 32; .endef _main: LFB15: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 andl $-16, %esp subl $16, %esp call ___main movl $LC0, (%esp) call _printf movl $0, %eax leave .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc LFE15: .ident "GCC: (MinGW.org GCC-8.2.0-3) 8.2.0" .def _printf; .scl 2; .type 32; .endef
Так что, да. может ли кто-нибудь написать код с помощью asm выше? это просто простая программа hello world.
кстати, он был создан из кода на языке Си, так что да, я пытаюсь преобразовать один язык в другой(используя встроенный в другом)
Что я уже пробовал:
Я пытался это сделать:
#include<iostream> using namespace std; int main() { __asm__( "pushl %ebp;" "movl %esp, %ebp;" "andl $-16, %esp;" "subl $16, %esp;" "call ___main;" "movl $LC0, (%esp);" "call _printf;" "movl $0, %eax;" "leave;" "ret;" ); }
но без var $LC0 это не работает. и я понятия не имею, как это сделать,
пожалуйста, помогите мне, и, пожалуйста, не предоставляйте никаких ссылок!
Я видел все ссылки, и ни одна из них на самом деле не помогает мне, так что, пожалуйста, запишите код для меня.
Stefan_Lang
Вместо того чтобы рассылать свой вопрос по всему этому месту, попробуйте объяснить, зачем вам это нужно. Вам неоднократно говорили, и с очень здравыми рассуждениями, что это очень трудно сделать и вообще плохая идея. Если есть веская причина, почему вы хотите сделать это, тогда, возможно, есть менее каменистый путь, по которому вы могли бы пойти, и вы просто не подумали об этом.
Поэтому, пожалуйста, сделайте шаг назад, подумайте о том, что заставляет вас думать, что вам нужна такая программа, и поделитесь этой причиной с нами.
Rick York
Посмотрите на список еще раз. Он говорит вам, что такое LC0 прямо там. Я бы предположил, что LC означает буквальную константу. Может быть, и нет, но это ключ к разгадке.
Rick York
Я изменил ваш вопрос, чтобы выделить LC0.