Как сделать ассемблерный код, написанный на Keil Software, в исполняемый файл? - PullRequest
0 голосов
/ 20 января 2011

Я могу написать ассемблерный код для процессоров x86. Но мне нужно знать, как преобразовать его в исполняемый файл.

Ответы [ 2 ]

0 голосов
/ 22 января 2011

В последний раз, когда я смотрел, Кейл делал компиляторы C51 (8051), а не i386 (80386+).

Так что, если это правда, и у вас есть компилятор C51: шансов нет.В то время как 8051 - это Intel, и в некоторой степени он связан с самой ранней родословной x86 (8080), с 8086, и, что более важно, с i386 (а позже и с x86_64), настолько многое изменилось, что это, вероятно, будет бесплодным.

Компилятор Keil C51 - 8-битный 8051 с 16-битными расширениями (например, Hitachi 80515), и вы, вероятно, ищете что-то i386 или x86_64 (32/64-битные)

0 голосов
/ 20 января 2011

Я думаю, что Keil делает компилятор C ++, но я думаю, что вы пытаетесь использовать интерфейс IDE для кодирования ASM. Вам нужен ассемблер x86.

Если вы хотите продолжать использовать свой компилятор C ++, обратите внимание, что C ++ поддерживает ключевое слово __asm, поэтому все, что вам нужно сделать, это:

//all your includes here

int main()
{
    asm
    {
        //your assembly code here
    }

    return 0;
}

Обратите внимание, что это рискованный бизнес, компилятор C ++ НЕ БУДЕТ выдавать ошибку за любые ошибки кодирования, которые вы делаете внутри блока asm, вместо этого он просто, скорее всего, скомпилируется нормально, и просто вылетает при запуске, и это делает отладку почти адом Однако преимущество заключается в том, что вы можете комбинировать преимущества языка среднего уровня, такого как C ++ (или даже использовать код C ++ в этих блоках ASM ), с преимуществами использования языка более низкого уровня, такого как ASM (а именно, скорость и размер, хотя это в значительной степени незначительно, когда вы запускаете код через компилятор C ++, тем более что компилятор не будет оптимизировать ваш код ASM, но я сохраню свою критику кодирования ASM в другой раз). Подробнее о C ++ и ASM здесь .

В зависимости от того, что вы кодируете и какова ваша целевая ОС, вы можете выбрать один из множества ассемблеров ассемблерного кода (технически ассемблер собирает ассемблерный код, в то время как компилятор компилирует язык более высокого уровня, такой как C ++, в ассемблерный код, затем исполняемый) там, Nasm, Tasm, GoAsm, Masm, Gasm (просто Google их имена). Я считаю FASM одним из самых популярных. Обратите внимание, что все они, кажется, имеют несовместимость со своими стилями кодирования, поэтому вы адаптировались к конкретному компилятору, который вы выбрали (хотя по одной из причин, почему мне никогда не нравился ASM, я в основном писал High Level Assembly).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...