Как сделать на языке C встроенный язык ассемблера forloop? - PullRequest
2 голосов
/ 12 июня 2011

Как я могу сделать встроенный язык C чистым ассемблером?Я хотел сделать для цикла, но не работает.

#include <stdio.h>

int main()
{
  asm 
  {
    for(int i=0; i<10; i++)
    { 
         // is this how i will do the assembly language as inline C?
         // is this how the for loop looks as inline c?
    } 
  } // ?
}

Ответы [ 5 ]

1 голос
/ 12 июня 2011

Что-то похожее,

__asm{
        xor esi,esi
go:
        inc esi
        cmp esi,10
        jnz go

    }
1 голос
/ 12 июня 2011

Это не работает, потому что это не сборка.IIRC, самый простой for -подобный цикл в сборке - это что-то вроде

.L3:
    addl    $1, -4(%ebp)
    cmpl    $9, -4(%ebp)
    jle     .L3
0 голосов
/ 12 июня 2011

Проверьте инструкции по управлению потоком, чтобы узнать, как реализовать циклы на языке ассемблера.Ознакомьтесь с инструкциями условного перехода x86 и инструкциями LOOPX.Посмотрите http://en.wikibooks.org/wiki/X86_Assembly/Control_Flow.Для лучшего и подробного описания, обратитесь к руководству Intel.

0 голосов
/ 12 июня 2011

Я думаю, что он спрашивает, возможно ли написать «встроенный C» в программе на языке ассемблера. Ответ будет "нет", вам придется скомпилировать вашу C-программу в библиотеку и вызвать ее из вашей программы на ассемблере. Я полагаю, вы могли бы также написать макрос, чтобы сделать реализацию цикла for более удобной при сборке, но это будет зависеть от ассемблера, и вам придется сообщить нам, какой вы используете. Я прошу прощения, если я не прав, я просто делаю снимок в темноте, ваш вопрос был не совсем ясен.

0 голосов
/ 12 июня 2011

Когда вы используете ключевое слово asm, вы не можете писать код на языке C. Вы можете использовать только ключевые слова на ассемблере, а способ написания ассемблерного кода зависит от компилятора. Каждый компилятор позволяет вам по-своему. Например, Turbo использует этот синтаксис

void main()
{
   asm
   {
      mov ax,4C00h
      int 21h
   }
}
...