インラインアセンブラ

インラインアセンブラ: inline assembler)は、主にC言語C++などで書かれたプログラムの中にアセンブリ言語によるプログラムを埋め込むことができるようにする、コンパイラの機能である[1]

概要

コンパイラの一機能を指しており、高水準言語で書かれたソースコードに埋めこまれたアセンブリ言語によるコードも機械語に変換する機能のこと。

この機能があれば、アセンブリ言語で書かれたコードをわざわざ別途アセンブラでアセンブル(機械語に変換)してリンクするという手間が省ける。特定のプロセッサが持つ特殊な拡張命令も使えるというメリットや、高速化が図れるなどのメリットがある[1]

一方デメリットとして、機種に強く依存したアセンブリ言語のコードをソースコードに含んでしまうことになるため、C言語などの高級言語の強みであるソースレベル互換性が低下する。

インラインアセンブラを利用する目的には次のようなものがある。

最適化
アルゴリズムで最も性能に影響する部分をアセンブリ言語に置き換える。これによりプログラマはコンパイラの制約を受けることなく自由に細工を施すことができる。
プロセッサ固有の特殊な命令の利用
コンペア・アンド・スワップテスト・アンド・セットのような、セマフォやロックを実装するための命令があるプロセッサがあるが、それらの機能を言語拡張などではなく[2]、インラインアセンブラにより直接簡便に利用できる。他には、SIMD拡張命令など具体的にはSPARCVISインテルMMXSSEモトローラAltivecといった命令はコンパイラからの有効的利用が難しく(研究はさかんに行われているが)、インラインアセンブラを利用してC言語中から直接利用することで高い性能を実現できることがある。
システムコール
システムコールのAPIは、現代では通常はC言語のライブラリとして定義されているが、上述の特殊な命令と同様にSVC命令などを直接利用して呼び出すためにアセンブリ言語が利用される。

最適化の例とプロセッサ固有命令の例

x86FPUを利用して変数xのタンジェントを計算するD言語で記述されたインラインアセンブラの例。x86系プロセッサで利用可能な円周率の近似値を得るためのfldpi命令を利用でき、コンパイラが浮動小数点を用いた場合より高速である。

// 変数xのタンジェントを計算する
real tan(real x)
{
   asm
   {
       fld     x[EBP]                  ; // xをロード
       fxam                            ; // 不正な値の検査
       fstsw   AX                      ;
       sahf                            ;
       jc      trigerr                 ; // xはNAN(非数)、無限、または空
                                         // 387は非正規化数を扱えない
SC18:  fptan                           ;
       fstp    ST(0)                   ; // dump X, which is always 1
       fstsw   AX                      ;
       sahf                            ;
       jnp     Lret                    ; // C2 = 1 (xは範囲外)
       // argument reductionしてxを有効範囲内に収める
       fldpi                           ;
       fxch                            ;
SC17:  fprem1                          ;
       fstsw   AX                      ;
       sahf                            ;
       jp      SC17                    ;
       fstp    ST(1)                   ; // piをスタックから除去
       jmp     SC18                    ;
   }
trigerr:
   return real.nan;
Lret:
   ;
}

システムコールの例

メモリが保護されている環境でOSの機能を直接呼び出すことは一般的に不可能である。OSはユーザーモードより上位の特権モード(カーネルモード)で動作しており、OSにリクエストするためには(ソフトウェア)割り込みを利用する。これを行う機能をもつ高級言語はほとんどなく、システムコールのためのラッパー関数はインラインアセンブラを用いて記述されている。

下記のC言語によるサンプルにはシステムコールのラッパーも含まれる。一般的にはマクロと組み合わせて記述するが、ここでは説明のためにあえてマクロを利用していない。

基本的なインラインアセンブラの形式は非常に単純である。基本形は下記のとおり(GCCのみ、Visual Studio では __asm{ }の形式に直す必要がある)。

asm("アセンブリコード");

例:

asm("movl %ecx, %eax"); /* ecxの中身をeaxに移動する */

または

__asm__("movb %bh, (%eax)"); /* bhから1バイトをeaxが指し示すメモリに移動する */

asm__asm__はいずれも正しい。もしasmというキーワードがソースコード中のほかのキーワードと重複している場合は__asm__を利用してもよい。

extern int errno;

int funcname(int arg1, int *arg2, int arg3)
{
  int res;
  __asm__ volatile(
    "int $0x80"        /* OSに命令を発行する */
    : "=a" (res)       /* eaxの中身("a")を結果として返す */
      "+b" (arg1),     /* arg1をebxに渡す ("b") */
      "+c" (arg2),     /* arg2をecxに渡す ("c") */
      "+d" (arg3)      /* arg3をedxに渡す ("d") */
    : "a"  (128)       /* システムコール番号をeaxに渡す ("a") */
    : "memory", "cc"); /* メモリと条件レジスタが修正されたことをコンパイラに通知する */

  /* エラーが発生した場合、OSは負数を返す。
   * エラーが発生するとラッパー関数は-1を返し、グローバル変数errnoに値をセットする */
  if (-125 <= res && res < 0) {
    errno = -res;
    res   = -1;
  }  
  return res;
}

  1. ^ a b IT用語辞典バイナリ【インラインアセンブラ】[1]
  2. ^ GCCはそれらをサポートする組込み関数を持っている( https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html

外部リンク

Read other articles:

Alvaneu Lambang kebesaranNegaraSwissKantonGraubündenDistrikAlbulaPemerintahan • WalikotaThomas KolleggerLuas[1] • Total35,63 km2 (13,76 sq mi)Ketinggian1.181 m (3,875 ft)Populasi (Kesalahan: waktu tidak sah.[2]) • Total394 • Kepadatan11/km2 (29/sq mi)Kode pos7492Kode area telepon3511Dikelilingi olehArosa, Brienz/Brinzauls, Filisur, Lantsch/Lenz, Schmitten, Surava, TiefencastelSitus webwww.alvan...

 

 

Untuk artikel tentang seribu bangau kertas, lihat Seribu bangau kertas. Untuk buku cerita tentang non-fiksi Sadako Sasaki yang ditulis oleh Eleanor Coerr, lihat Sadako and the Thousand Paper Cranes. Thousand Cranes Edisi pertamaPengarangYasunari KawabataJudul asliSenbazuru (千羽鶴code: ja is deprecated )Negara JepangBahasaJepangGenreNovelPenerbit Kawabata Publishing (JP) Narasi (ID) Tanggal terbit1952Tgl. terbit (bhs. Inggris)1964Tgl. terbit (bhs....

 

 

Sedevacantist Catholic organization This article relies excessively on references to primary sources. Please improve this article by adding secondary or tertiary sources. Find sources: Most Holy Family Monastery – news · newspapers · books · scholar · JSTOR (December 2023) (Learn how and when to remove this template message) vaticancatholic.com redirects here. For the location of the Holy See, see Vatican City. Most Holy Family Monastery (also stylized...

For the FM radio station in Princeton, Illinois, United States, see WZOE-FM. 41°21′8.00″N 89°28′5.00″W / 41.3522222°N 89.4680556°W / 41.3522222; -89.4680556 Radio station in Princeton, IllinoisWZOEPrinceton, IllinoisBroadcast areaPrinceton, Il and surrounding areaFrequency1490 kHzBrandingNewstalk 1490 AMProgrammingFormatNews Talk InformationAffiliationsCBS News Radio, Premiere Radio Networks, Westwood OneOwnershipOwnerFletcher Ford(Virden Broadcasting Corp....

 

 

This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This biographical article is written like a résumé. Please help improve it by revising it to be neutral and encyclopedic. (November 2017) A major contributor to this article appears to have a close connection with its subject. It may require cleanup to comply with Wikipedia's content policies, particularly neutral point of view. Please dis...

 

 

West Germanic language For the dialects of English spoken in Scotland, see Scottish English. For the Celtic language, see Scottish Gaelic. ScotsLowland ScotsBroad Scots(Braid)ScotsLallansDoricPronunciation[skɔts]Native toUnited Kingdom, Republic of IrelandRegion Scotland: Scottish Lowlands, Northern Isles, Caithness, Arran and Campbeltown Ulster (Ireland): Counties Down, Antrim, Londonderry, Donegal and Armagh EthnicityScotsNative speakers1,541,693 (2011)[1]Language...

Очеретник бурый Научная классификация Домен:ЭукариотыЦарство:РастенияКлада:Цветковые растенияКлада:МонокотыКлада:КоммелинидыПорядок:ЗлакоцветныеСемейство:ОсоковыеПодсемейство:СытевыеТриба:ОчеретниковыеРод:ОчеретникВид:Очеретник бурый Международное научное на...

 

 

Public university in Provence, France Aix-Marseille UniversityAix-Marseille UniversitéTypePublic research universityEstablished1409 – University of Provence[1]1896 – University of Aix-Marseille1968 – University of Provence Aix-Marseille I1968 – University of the Mediterranean Aix-Marseille II1973 – Paul Cézanne University Aix-Marseille III2012 – Aix-Marseille UniversityBudget€750 million[2]PresidentEric BertonAcademic staff4,273Administrative staff4,107Students...

 

 

Oronerosingolo discograficoScreenshot tratto dal video del branoArtistaGiorgia Pubblicazione30 settembre 2016 Durata3:32 Album di provenienzaOronero GenerePopContemporary R&B EtichettaSony Music ProduttoreMichele Canova Iorfida Registrazione2016 FormatiDownload digitale, streaming CertificazioniDischi di platino Italia[1](vendite: 50 000+) Giorgia - cronologiaSingolo precedenteLa mia stanza(2014)Singolo successivoVanità(2017) Oronero è il primo singolo estrat...

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada November 2022. Dalam nama Tionghoa ini, nama keluarganya adalah Lee. Chin Yang LeeLee pada c. 1957Nama asal黎錦揚PelafalanLí JǐnyángLahir(1915-12-23)23 Desember 1915Xiangtan, Hunan, Republik TiongkokMeninggal8 November 2018(2018-11-08) (umur 10...

 

 

Kaisar KangxiKaisar Dinasti Qing ke-4Berkuasa18 Februari 1661 – 20 Desember 1722(61 tahun, 305 hari)Penobatan1667PendahuluKaisar ShunzhiPenerusKaisar YongzhengWaliSonin (1661-1667)EbilunSuksaha (1661-1669)Oboi (1661-1670)Informasi pribadiKelahiranAisin Gioro XuanyePemakamanZunhuaWangsaHouse of Aisin GioroNama lengkapChinese: Àixīn-Juéluó Xuányè (愛新覺羅玄燁)Manchu: Aisin-Gioro Hiowan YeiNama periodeNama anumertaKaisar Hétiān Hóngyùn Wénwǔ Ruìzhé Gōngjiǎn Ku�...

 

 

Hilton McRaeBiographieNaissance 28 décembre 1949 (74 ans)DundeeNationalité britanniqueDomicile North LondonFormation Université d'ÉdimbourgActivités ActeurConjoint Lindsay Duncanmodifier - modifier le code - modifier Wikidata Hilton McRae, né le 28 décembre 1949 à Dundee, est un acteur de théâtre, de télévision et de cinéma écossais. Biographie Après des études de droit à l'université d'Édimbourg, il commence sa carrière théâtrale avec Steven Berkoff au Roundhouse d...

Disambiguazione – Se stai cercando altri significati, vedi Palaia (disambigua). Palaiacomune Palaia – Veduta LocalizzazioneStato Italia Regione Toscana Provincia Pisa AmministrazioneSindacoMarco Gherardini (centro-sinistra) dal 26-5-2014 TerritorioCoordinate43°36′21″N 10°46′22″E43°36′21″N, 10°46′22″E (Palaia) Altitudine240 m s.l.m. Superficie73,71 km² Abitanti4 511[3] (31-8-2022) Densità61,2 ab./km² FrazioniAli...

 

 

New Hampshire gubernatorial election 1853 New Hampshire gubernatorial election ← 1852 8 March 1853 1854 →   Nominee Noah Martin James Bell John H. White Party Democratic Whig Free Soil Popular vote 30,934 17,580 7,997 Percentage 54.69% 31.08% 14.14% County results Martin:      40–50%      50–60%      60–70%      70–80% Governor before election Noah Martin...

 

 

Guangzhou Xiaopeng Motors Technology Co LtdJenisPublikKode emitenNYSE: XPEVIndustriOtomotifDidirikan2014; 10 tahun lalu (2014)PendiriHe XiaopengXia HengHe TaoYang Chunlei[1]KantorpusatGuangzhou, TiongkokTokohkunciHe Xiaopeng (ketua)Brian Gu Hongdi (wakil ketua)Karyawan3.676 (Juni 2020)[2] XPeng Hanzi sederhana: 广州小鹏汽车科技有限公司 Hanzi tradisional: 廣州小鵬汽車科技有限公司 Alih aksara Mandarin - Hanyu Pinyin: Guǎngzhōu Xiǎopéng Qìchē K�...

Akademi Gondishapur (bahasa Persia: فرهنگستان گندی‌شاپور, Farhangestân-e Gondišâpur), juga dikenal sebagai Universitas Gondishapur (دانشگاه گندی‌شاپور Dânešgâh-e Gondišapur), adalah salah satu dari tiga pusat pendidikan pada masa Kekaisaran Sasaniyah (Ktesifon, Resaina, Gundeshapur)[1] dan lembaga perguruan tinggi di kota kuno Gundeshapur selama Abad Kuno Akhir. Lembaga ini menawarkan pendidikan dan pelatihan di bidang kedokteran, filsa...

 

 

鳴尾記念Naruo Kinen[1] 第74回鳴尾記念(2021年6月5日)優勝馬:ユニコーンライオン開催国 日本主催者 日本中央競馬会競馬場 阪神競馬場創設 1951年6月10日[2]2024年の情報距離 芝2000m(京都競馬場)格付け GIII賞金 1着賞金4300万円出走条件 サラ系3歳以上(国際)(特指)負担重量 別定(本文に記載)出典 [3][4]テンプレートを表示 鳴尾記念(なるおきね...

 

 

1847 – MDCCCXLVII177 år sedan År1844 | 1845 | 184618471848 | 1849 | 1850 Årtionde1820-talet  | 1830-talet 1840-talet1850-talet | 1860-talet Århundrade1700-talet 1800-talet1900-talet Årtusende1000-talet Året Födda | AvlidnaBildanden | Upplösningar Humaniora och kulturKonst, litteratur, musik och teater Samhällsvetenskapoch samhälleKrig | Sport Teknik och vetenskap Vetenskap Andra tideräkningar Gre...

Indonesian ancient dance tradition Three Genres of Traditional Dance in BaliUNESCO Intangible Cultural HeritageLegong Keraton Dance performance with Gamelan ensemble in Puri Saren Ubud, Bali, IndonesiaCountryIndonesiaCriteriaOral traditions and expressions, including language as a vehicle of the intangible cultural heritage, performing arts, social practices, rituals and festive events, knowledge and practices concerning nature and the universe, and traditional craftsmanshipReference617Region...

 

 

Будинок національних творчих колективів УкраїниКилимово-орнаментальні композиції Ольги Рапай на фасаді будинкуКраїна УкраїнаРозташуванняБульвар Тараса Шевченка, 50-5250°26′46″ пн. ш. 30°29′54″ сх. д. / 50.44625000002777426° пн. ш. 30.49852777780577995° сх. д....