rdfs:comment
| - Inline-Assembler (oder auch integrierter Assemblercode) wird ein in Assemblersprache geschriebener Programmteil genannt, der im Quelltext einer höheren Programmiersprache integriert ist. Die Einbettung des Assembler-Codeteils wird mittels spezieller Anweisungen deklariert (z. B. beginnend mit asm, __asm__ oder _asm_ sowie ggf. mit weiteren Angaben) und dadurch dem Compiler bekanntgegeben. (de)
- In computer programming, an inline assembler is a feature of some compilers that allows low-level code written in assembly language to be embedded within a program, among code that otherwise has been compiled from a higher-level language such as C or Ada. (en)
- インラインアセンブラ(英: Inline assembler)は、高水準言語の処理系中に埋込まれているアセンブラ、ないし、そのような言語でソースコード中(インライン)にアセンブリ言語によるコードを埋込むことができる、という機能である。たとえば以下のような利用法がある。 最適化アルゴリズムで最も性能に影響する部分をアセンブリ言語に置き換える。これによりプログラマはコンパイラの制約を受けることなく自由に細工を施すことができる。プロセッサ固有の特殊な命令の利用コンペア・アンド・スワップやテスト・アンド・セットのような、セマフォやロックを実装するための命令があるプロセッサがあるが、それらの機能を言語拡張などではなく、インラインアセンブラにより直接簡便に利用できる。他には、SIMD拡張命令など具体的にはSPARCのVIS、インテルのMMXやSSE、モトローラのAltivecといった命令はコンパイラからの有効的利用が難しく(研究はさかんに行われているが)、インラインアセンブラを利用してC言語中から直接利用することで高い性能を実現できることがある。システムコールシステムコールのAPIは、現代では通常はC言語のライブラリとして定義されているが、上述の特殊な命令と同様にSVC命令などを直接利用して呼び出すためにアセンブリ言語が利用される。 (ja)
- 内联汇编(英語:Inline assembly)是部分編譯器支援的一種功能。其將非常低階的組合語言內嵌在高階語言源始碼中。實施行內組語通常是為了以下理由:
* 執行效率最佳化:將演算法中最攸關效能的部份使用手寫組語取代高階程式碼,優點是不會受到編譯器的限制。
* 使用處理器特有指令:某些處理器提供特定的指令,比如Compare-and-swap和Test-and-set指令可以直接用以實作信號機制。因為多工系統都需要信號機制,幾乎所有現代的處理器都支援前述的兩個指令。其它的一些指令集如SPARC架構的VIS指令集,Intel處理器的MMX指令集以及SSE指令集等。
* 系統調用(System Call):高階語言鮮少提供直接調用system calls的機制,故使用組語來進行這項工作。 (zh)
- Vkládaný assembler (také se používá anglické inline assembler) je v programování označení pro kód v jazyce symbolických instrukcí (asembleru) vložený mezi příkazy vyššího programovacího jazyka (např. C). Nevýhodou vložení assembleru je obvykle ztráta nezávislosti kódu na platformě. Vkládání assembleru se provádí nejčastěji z jednoho z následujících důvodů.
* Optimalizace, například využití instrukcí SIMD.
* Přístup k instrukcím CPU (V/V porty, systémové volání), které překladač vyššího programovacího jazyka neumožňuje volat. Následuje ukázka inline assembleru platformy x86 pro překladač GCC. (cs)
- Nella programmazione di un computer, l'assembler inline è un procedimento che permette di aggiungere in un sorgente scritto in un linguaggio di alto livello come il C o l'ADA, parti scritte in un linguaggio di basso livello come l'Assembly. Questa inclusione è fatta solitamente per questi tre motivi: (it)
- Em programação de computadores, um inline assembler é um recurso de alguns compiladores que permitem código-fonte de baixo nível escritos em assembly serem embutidos em linguagens de alto nível como C ou Ada. Esta inclusão de código-fonte de baixo nível é usualmente feita por causa de uma das três razões: (pt)
- Inline assembler är möjligheten att i ett programspråk på hög eller medelhög nivå, kunna infoga assemblerinstruktioner - koder - direkt i källkoden. Man måste då dock ta hänsyn till den arkitektur (till exempel x86) programmet skall tillämpas på, då dessa instruktioner är processorspecifika, och alltså inte portabla. Exempel i programspråket C (Intel syntax): Om du har en annan datatyp (till exempel int) så måste du göra en typomvandling, till exempel: Även ett exempel där videoavbrott 10h används för utmatning av ett tecken (TTY): Exempel:mov ptr [operand], operandmov operand, ptr [operand] (sv)
- В программировании, ассемблерной вставкой называют возможность компилятора встраивать низкоуровневый код, написанный на ассемблере, в программу, написанную на языке высокого уровня, например, Си или Ada. Использование ассемблерных вставок может преследовать следующие цели: (ru)
|
has abstract
| - Vkládaný assembler (také se používá anglické inline assembler) je v programování označení pro kód v jazyce symbolických instrukcí (asembleru) vložený mezi příkazy vyššího programovacího jazyka (např. C). Nevýhodou vložení assembleru je obvykle ztráta nezávislosti kódu na platformě. Vkládání assembleru se provádí nejčastěji z jednoho z následujících důvodů.
* Optimalizace, například využití instrukcí SIMD.
* Přístup k instrukcím CPU (V/V porty, systémové volání), které překladač vyššího programovacího jazyka neumožňuje volat. Následuje ukázka inline assembleru platformy x86 pro překladač GCC. extern int errno; int funcname(int arg1, int *arg2, int arg3){ int res; __asm__ volatile( "int $0x80" /* provedeme požadavek na operační systém */ : "=a" (res) /* jeho výsledek bude vrácen v registru eax ("a") */ "+b" (arg1), /* parametr arg1 předáme v registru ebx ("b") */ "+c" (arg2), /* parametr arg2 předáme v registru ecx ("c") */ "+d" (arg3) /* parametr arg3 předáme v registru edx ("d") */ : "a" (128) /* číslo volané služby předáme v registru eax ("a") */ : "memory", "cc"); /* informujeme překladač, co vše mohl náš kód změnit */ /* Operační systém vrací při chybě zápornou hodnotu; * my nastavíme globální proměnnou errno podle vrácené hodnoty a vrátíme -1 */ if (-125 <= res && res < 0) { errno = -res; res = -1; } return res;} (cs)
- Inline-Assembler (oder auch integrierter Assemblercode) wird ein in Assemblersprache geschriebener Programmteil genannt, der im Quelltext einer höheren Programmiersprache integriert ist. Die Einbettung des Assembler-Codeteils wird mittels spezieller Anweisungen deklariert (z. B. beginnend mit asm, __asm__ oder _asm_ sowie ggf. mit weiteren Angaben) und dadurch dem Compiler bekanntgegeben. (de)
- In computer programming, an inline assembler is a feature of some compilers that allows low-level code written in assembly language to be embedded within a program, among code that otherwise has been compiled from a higher-level language such as C or Ada. (en)
- インラインアセンブラ(英: Inline assembler)は、高水準言語の処理系中に埋込まれているアセンブラ、ないし、そのような言語でソースコード中(インライン)にアセンブリ言語によるコードを埋込むことができる、という機能である。たとえば以下のような利用法がある。 最適化アルゴリズムで最も性能に影響する部分をアセンブリ言語に置き換える。これによりプログラマはコンパイラの制約を受けることなく自由に細工を施すことができる。プロセッサ固有の特殊な命令の利用コンペア・アンド・スワップやテスト・アンド・セットのような、セマフォやロックを実装するための命令があるプロセッサがあるが、それらの機能を言語拡張などではなく、インラインアセンブラにより直接簡便に利用できる。他には、SIMD拡張命令など具体的にはSPARCのVIS、インテルのMMXやSSE、モトローラのAltivecといった命令はコンパイラからの有効的利用が難しく(研究はさかんに行われているが)、インラインアセンブラを利用してC言語中から直接利用することで高い性能を実現できることがある。システムコールシステムコールのAPIは、現代では通常はC言語のライブラリとして定義されているが、上述の特殊な命令と同様にSVC命令などを直接利用して呼び出すためにアセンブリ言語が利用される。 (ja)
- Nella programmazione di un computer, l'assembler inline è un procedimento che permette di aggiungere in un sorgente scritto in un linguaggio di alto livello come il C o l'ADA, parti scritte in un linguaggio di basso livello come l'Assembly. Questa inclusione è fatta solitamente per questi tre motivi:
* Ottimizzazione: permettono al programmatore di sfruttare al meglio le istruzioni.
* Accesso a delle specifiche istruzioni del processore: alcuni processori offrono istruzioni speciali, come quelle di confronto e di scambio o altre primitive di sincronizzazione e di bloccaggio. Quasi tutti i moderni processori hanno queste o simili istruzioni, in quanto sono necessarie per implementare il multitasking. Solo per citarne alcuni, queste istruzioni specializzate si trovano nel VIS SPARC, Intel Pentium MMX e Streaming SIMD Extensions (SSE), e nel set di istruzioni Motorola Altivec.
* Le chiamate di sistema: i linguaggi di alto livello hanno raramente una struttura diretta per eseguire le chiamate di sistema, chiamate che nel linguaggio assembly sono molto usate come nella gestione dell'input e dell'output. (it)
- Inline assembler är möjligheten att i ett programspråk på hög eller medelhög nivå, kunna infoga assemblerinstruktioner - koder - direkt i källkoden. Man måste då dock ta hänsyn till den arkitektur (till exempel x86) programmet skall tillämpas på, då dessa instruktioner är processorspecifika, och alltså inte portabla. Nedan visar hur man med inline assembler i C flyttar en konstant till låga 16-bitars ackumulatorregistret (al) 8-bitars, och sedan flyttar innehållet i detta register till minnesadressen där c finns (c som är 8 bitar skrivs över). Observera att man inte hade behövt utnyttja ah registret för detta enkla ändamål, exemplet är dock gjort för att visa syntaxen för direkt- och registeradressering. Exempel i programspråket C (Intel syntax): #include main{ char c=0; __asm { mov al, 65 /* Flytta värdet 65 till de lägre 8-bitarna på 16-bitars dataregistret AX (ackumulatorn) */ mov c, al /* Eller [c] */ } putchar(c); getchar;} Om du har en annan datatyp (till exempel int) så måste du göra en typomvandling, till exempel: main{ int c=65; __asm { mov al, byte ptr [c] /* Ta endast 8 bitar */ mov byte ptr [c], al /* Samma här */ } putchar(c); getchar;} Även ett exempel där videoavbrott 10h används för utmatning av ett tecken (TTY): main{ char c=0; /* Skriver ut ett versalt A på bildskärmen */ __asm { mov ah, 0ah mov al, 65 /* 65 är den decimala ASCII-koden för symbolen A */ mov bh, 0 int 10h }} Syntaxen är kompilatorberoende, men i grunden finns två metoder. AT&T samt Intels syntax. Notering:En del kompilatorer vill att man refererar till variabeln c som _c (understreck före), och ibland [_c], detta tvistas det dock om. Enligt Intel skall man använda _c för att ladda in adressen till variabeln, och [_c] för att ladda in värdet. Vanligast är dock att man vid Intels syntax helt enkelt skriver till exempel mov 8var, 8reg. 8var står för 8-bitars variabel och 8reg står för 8-bitars register (till exempel låga ackumulatorregistret). Observera att variabeltyperna måste stämma överens, det går till exempel inte att flytta värden mellan register och variabler utan korrekt typ. Exempel:mov ptr [operand], operandmov operand, ptr [operand] Ibland måste man även deklarera den som static, då ett annourlunda minnesschema används. Hur man använder inline assembler är kompilator- och språkberoende och man får vända sig till manualen för närmare beskrivning. Det finns även andra sätt att mata ut tecken i ett konsolfönster (med rättigheter beroende på läge).Se Real Mode, Unreal mode, Protected mode, Long mode och Virtual 8086 mode. Man kan till exempel skriva direkt till videominnet med början på adress 0xb8000 (hexadecimalt).Jämn adress är tecken, udda är attribut: main{ unsigned char *vidmem = (unsigned char *)0xb8000; *vidmem = 'T'; /* Tecken */ *(vidmem++) = 0xF; /* Attribut - svart bakgrund, vit text */} Man kan även använda inline assembler för detta ändamål. Det skulle se ut ungefär så här: main{ __asm { mov bx, 0B800h /* 0:an behövs för tolkning som konstant (annars tolkas B800h som variabel) */ mov es, bx /* Flyttar till segmentregister es (tillhör adressregistren) via bx */ mov byte ptr es:0, 'T' /* Tecken */ mov byte ptr es:1, 1Fh /* Attribut */ } /* OBSERVERA En del kompilatorer vill ha syntaxen mov byte [es:0], 'T' istället, eller mov es:0, 'T' */} OBSERVERA! Alla programexempel ovan kommer att generera felmeddelanden av typen "Access violation" eller "Privileged instruction" om du inte kör i rätt läge eller har tillräckliga rättigheter (se ovan). (sv)
- Em programação de computadores, um inline assembler é um recurso de alguns compiladores que permitem código-fonte de baixo nível escritos em assembly serem embutidos em linguagens de alto nível como C ou Ada. Esta inclusão de código-fonte de baixo nível é usualmente feita por causa de uma das três razões:
* Otimização: quando trechos de códigos-fonte são escritos em linguagem assembly para otimização, a maioria das partes com performance crítica de um algoritmo são substituidas por códigos-fonte assembly escritos pelo desenvolvedor.
* Acesso a instruções específicas de determinado processador: alguns processadores disponibilizam instruções especiais, como "Compare and Swap" e "Test and Set" — instruções que podem ser usadas para construir semáforos ou outros mecanismo de sincronização e bloqueio primitivos. Atualmente os processadores modernos têm estas ou instruções similares, pois, elas são necessárias para implementar multi-tarefa (multitasking). Para dar alguns exemplos, instruções especializadas são encontradas nos conjuntos de instruções SPARC VIS, Intel MMX e SSE, e Motorola Altivec.
* Chamadas de sistema: linguagens de alto nível raramente tem uma direct facility para fazer chamadas de sistema, então códigos-fonte em assembly são usados. (pt)
- В программировании, ассемблерной вставкой называют возможность компилятора встраивать низкоуровневый код, написанный на ассемблере, в программу, написанную на языке высокого уровня, например, Си или Ada. Использование ассемблерных вставок может преследовать следующие цели:
* Оптимизация: С этой целью, вручную пишется ассемблерный код, реализующий наиболее критичные в отношении производительности части алгоритма. Это позволяет программисту использовать в полной мере свою изобретательность, не ограничиваться конструкциями компилятора.
* Доступ к специфичным инструкциям процессора: Некоторые процессоры поддерживают специальные инструкции, такие как сравнение с обменом и test-and-set — инструкции, которые могут быть использованы для реализации семафоров или других примитивов синхронизации и блокировок. Практически все современные процессоры имеют такие или сходные инструкции, так как они необходимы для реализации многозадачности. Специальные инструкции можно найти в системах команд следующих процессоров: SPARC VIS, Intel MMX и SSE, Motorola AltiVec.
* Системные вызовы: Языки программирования высокого уровня редко предоставляют прямую возможность делать системные вызовы, для этих целей используется ассемблерный код. (ru)
- 内联汇编(英語:Inline assembly)是部分編譯器支援的一種功能。其將非常低階的組合語言內嵌在高階語言源始碼中。實施行內組語通常是為了以下理由:
* 執行效率最佳化:將演算法中最攸關效能的部份使用手寫組語取代高階程式碼,優點是不會受到編譯器的限制。
* 使用處理器特有指令:某些處理器提供特定的指令,比如Compare-and-swap和Test-and-set指令可以直接用以實作信號機制。因為多工系統都需要信號機制,幾乎所有現代的處理器都支援前述的兩個指令。其它的一些指令集如SPARC架構的VIS指令集,Intel處理器的MMX指令集以及SSE指令集等。
* 系統調用(System Call):高階語言鮮少提供直接調用system calls的機制,故使用組語來進行這項工作。 (zh)
|