LINUX.ORG.RU
ФорумTalks

Кросс-платформенный ассемблер


0

0

Кто-нибудь знает, что это такое?

[quote]«...в случае crossplatform-assembler код пишется на неком псевдоассемблере, который затем транслируется в нативный асмовый код для нужной архитектуры...»[/quote]

Поиск в гугле по словам crossplatform и assembler выдаёт фразу «C — the cross-platform assembly language» и ассемблеры для PDP и 6502. А существует ли что-либо подобное описанному в цитате и применимое к современным десктопным и серверным процессорам?

★★★★★

Ответ на: комментарий от KRoN73

А что-нибудь более похожее на низкоуровневый ассемблер?

question4 ★★★★★ ()
Ответ на: комментарий от mono

> чем Си то не нравится? :)

Есть программа на ассемблере, во что её быстрее превратить: в программу на C, или в программу на гипотетическом универсальном ассемблере, предназначенном для лёгкого преобразования в ассемблеры реальных процессоров. Только существует ли такой?

Пока пишу на С.

question4 ★★★★★ ()
Ответ на: комментарий от KRoN73

> http://ru.wikipedia.org/wiki/MSIL

Это и есть промежуточный ассемблер.

Аналогично - в llvm.

Я неправильно сказал. LLVM, MSIL и подобные — код, получаемый из программы-транслятора. Я имею в виду код, предназначенный для написания человеком.

Судя по массовому непониманию, никто про такой не слышал?

question4 ★★★★★ ()

на wasm.ru зайди и спроси у них на форуме.

anonomouso ()

вы все еще привыкли к х86 ассемблеру? или к набору команд, предназначенных для человека?

так вот - в реальном мире это не так. Многие современные процессоры делаются так, чтоб код для них писал хорошо только компилятор, а не человек (в смысле низкоуровневого кода).

Как правильно заметили, тот же llvm имеет свой ассемблер. Но я как-то сомневаюсь, что он близок к х86 по читабельности.

Да и код с оптимизацией, которую делает gcc, для того же х86 часто не совсем читабелен.

namezys ★★★★ ()

> crossplatform-assembler

тред не читал, кроссплатформенным ассемблером называют Си.

name_no ★★ ()
Ответ на: комментарий от question4

Я имею в виду код, предназначенный для написания человеком.

На MSIL прекрасно можно писать вручную. И компилить потом с помощью /usr/bin/ilasm

Я же ссылку кинул на http://ru.wikipedia.org/wiki/MSIL Там пример кода есть:

.assembly Hello {}
.method public static void Main() cil managed
{
     .entrypoint
     .maxstack 1
     ldstr "Hello, world!"
     call void [mscorlib]System.Console::WriteLine(string)
     ret
}

Сохранил пример, скомпилил, запустил - работает.

KRoN73 ★★★★★ ()

Любая виртуальная машина с компиляцией в код родной архитектуры.

Parrot, JVM, LLMV и т.д.

Quasar ★★★★★ ()
Ответ на: комментарий от namezys

using System;

class Fib
{
   public static void Main (String[] args)
   {
      int a = 1, b = 1;
      for (int i = 1; i != 10; ++i)
      {
         Console.WriteLine (a);
         int c = a + b;
         a = b; b = c;
      }
   }
}
На следующих слайдах мы покажем результаты трансляции этой программы в MSIL.
// объявление имени assembly
.assembly fib as "fib" { /* здесь могут быть параметры */ }.class public Fib {
  .method public static void Main () {
    .entrypoint // означает начало assembly       
       .locals (int32 a, int32 b)
       ldc.i4.1  // загрузка константы 1
       stloc   a // сохранение 1 в a (a = 1)
       ldc.i4.1
       stloc   b // аналогично: b = 1
       ldc.i4.1  // загрузка 1 на стек (счетчик цикла)
Loop:   
        ldloc   a
        call    void System.Console::WriteLine(int32)         
        ldloc   a // stack: 1 a
        ldloc   b // stack: 1 a b
        add       // stack: 1 (a+b)
        ldloc   b
        stloc   a // a = b
        stloc   b // b = (a+b)
        ldc.i4.1
        add     // инкремент счетчика
        dup 
        ldc.i4.s   10
        bne.un.s   Loop // сравнение и переход на новую итерацию
        pop  // удаление счетчика цикла со стека
        ret
  }
}

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