LINUX.ORG.RU

Передача переменных встроенному ассемблеру в gcc

 , ,


0

3

Нужна помощь, никак не могу передать значение переменной. пример: char a='D';//ее надо запихать в регистр al asm(movb [??],%al); Нашел вот это: asm («movl %0,%%eax»::«i»(1)); но с переменной таким макаром не прокатывает. Видит только объявленные данные в ASMt-е. Заранее извините за такой вопрос прост сроки горят нужно срочно а этим компилятором не долго пользуюсь, да и к Intel синтаксису ассемблера привык.

Нашел вот это. Код C int main(void) { int x = 10, y; asm («movl %1, %%eax; „movl %%eax, %0;“ :»=r"(y) /*y - выходной операнд*/ :«r»(x) /*x - входной операнд*/ :«%eax»); /*%eax - «затираемый» регистр*/ } но так и не допер как char в al сунуть(

Собственно повода делать mov нет!

$ more al.c
main()
{
	int x = 10;
	asm volatile("" : : "a"(x));
}
$ gcc -S -O3 al.c
$ more al.s
	.file	"al.c"
	.text
	.p2align 4,,15
.globl main
	.type	main, @function
main:
	pushl	%ebp
	movl	$10, %eax
	movl	%esp, %ebp
	popl	%ebp
	ret
...
anonymous
()

но так и не допер как char в al сунуть

#include <stdio.h>

int main(void)
{
        char a = 0x77;
        char b = 0;

        printf("1: %x\n", b);
        asm ("\
                movb %1,   %%al; \
                movb %%al, %0;   \
        "
                :"=r"(b)
                :"r"(a)
                :"%al"
        );
        printf("2: %x\n", b);

        return 0;
}
x-signal ★★
()
Ответ на: комментарий от anonymous

спасибо, ближе к 3 ночи, после дня кодинга сообразил посмотреть в мануал, прост в английском я не бум бум, а в русском мануале была ошибка в нумерации параметров, но уже разобрался, и вродь я пометил тему как решенную. Всем спасибо. Вот что я искал: asm [параметр] («шаблон кода на асме» : выходные параметры: входные параметры: список используемых регистров)

electrobas94
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.