Advik Raj Ответов: 3

АСМ - встроенный ассемблер в 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.

3 Ответов

Рейтинг:
2

Rick York

Мы не всегда можем получить то, что хотим. Вот три ссылки на статьи, которые показывают вам, как писать встроенную сборку. Первая ссылка - это статья на этом сайте.

https://www.codeproject.com/articles/15971/using-inline-assembly-in-c-c

https://www.ibm.com/developerworks/rational/library/inline-assembly-c-cpp-guide/index.html

https://gcc.gnu.org/onlinedocs/gcc/Using-Assembly-Language-with-C.html

Люди не собираются делать это для вас, так что лучше всего, чтобы ты научитесь делать это сами.


Рейтинг:
0

OriginalGriff

Цитата:
пожалуйста, запишите код для меня.

Это не совсем так работает.
Мы не делаем вашу работу за вас.
Если вы хотите, чтобы кто - то написал ваш код, вы должны заплатить- я предлагаю вам пойти в Freelancer.com и спросите там.

Но знайте: вы получаете то, за что платите. Плати копейки, получай обезьян.

Идея "развития" заключается в следующем: "систематическое использование научно - технических знаний для достижения конкретных целей или требований." BusinessDictionary.com[^]
Это не то же самое, что "быстро гуглите и сдавайтесь, если я не могу найти точно правильный код".
Так что либо заплатите кому-нибудь за это, либо научитесь писать сами. Мы здесь не для того, чтобы делать это за вас.


Рейтинг:
0

Richard MacCutchan

Вы спрашиваете об этом уже в третий раз, и мы уже дали вам несколько советов. Во-первых, ассемблерный код не может быть непосредственно преобразован в код C++, между ними нет никакой корреляции. А во-вторых, если вы хотите правильно изучить C++, то возьмите книгу или поищите в интернете учебники. И если вы действительно не можете понять, как писать:

include <iostream>
int main()
{
    cout << "Hello world" << endl;
}

...