最近、FPGAなどを使ってCPUを自作する記事を目にするようになりました。CPUの命令コードは数字ですから、アセンブラソースを1行1行手で命令コードに変換していく(ハンドアセンブルする)ことになります。昔は、このためにコーディング用紙というものが売っていました。 最近のPICなどのマイコンには開発環境が用意されており、アセンブラなど必要な道具はすべて入っています。ですから、用意されているアセンブラを使うことがあっても、アセンブラを自分で作るという機会はなかなかないと思います。ここでは、アセンブラを作ってみることにしましょう。 PHPでアセンブラを作る アセンブラをどの言語で作るかですが、今回もPHPを使ってみました。フォーム上にソースを入力すると、バイナリが出力されます。対応しているのはPIC16Fの命令セットで、今回のアセンブラプログラムを使って開発環境で作ったものとまったく同じバイナリ
All Microsoft Global Microsoft 365 Teams Copilot Windows Surface Xbox Deals Small Business Support Software Windows Apps AI Outlook OneDrive Microsoft Teams OneNote Microsoft Edge Skype PCs & Devices Computers Shop Xbox Accessories VR & mixed reality Certified Refurbished Trade-in for cash Entertainment Xbox Game Pass Ultimate PC Game Pass Xbox games PC and Windows games Movies & TV Business Micro
はじめに PC Linux (i386 CPU) の Linuxでアセンブリプログラミングと同じように、 玄箱PRO やシャープのSLシリーズを使ったアセンブリプログラミングを解説します。 アセンブラは GNU binutils に入っている GNU as を使います。 binutilsのipkパッケージを用意しました。 Sharp Linux Zaurus には、ARM系のCPUであるインテル製の Intel(R) XScale(TM) を使用しています。 玄箱PRO にも Orion 88F5182 というARM系のCPUが使われています。Raspberry Piにも Broadcom BCM2835(ARM1176JZFS) というARM系のCPUが使われています。Linux Zaurus用にアセンブラで書いたプログラムは玄箱PROでも動作します。たとえば rvtl_arm はフレー
はじめてのWin64アセンブラ Visual Studio 2005(以下、VS2005)を使って簡単なアセンブラ・プログラミングをしてみましょう。 64ビットでも簡単にアセンブラが使えることをお確かめください。 なおVS2005はx64版Windowsだけでなく従来の32ビット版Windowsでも動作します。 x64用のコンパイル、アセンブル等も32ビット版Windows上で行えます。 ただし完成したEXEファイルを実行するには、x64版Windowsが稼動しているマシンが必要になります。 環境設定 VS2005を使って64ビット用のプログラミングを行うには、 Professional Edition以上のVS2005が必要であり、 さらにインストール時にはカスタムインストールを選び、 64ビット関連のコンパイラが インストールされるように設定する必要があります。 デフォルトではインスト
We got a few nice features from the new architecture of x64, like larger memory addressing, more registers (so fast call is the standard up to three registers and the rest get on the stack), and of course, a wider bandwidth of 64 bits, etc. AMD had a once in a life opportunity to change the ISA (instruction set architecture) a bit and to make it much better, but instead, they only added a very few
まずはこれを見て欲しい http://twitter.com/rofi/status/8421655500 おわかりいただけただろうか ということで、ネタプログラムでした! 解説 まぁただ出しただけではあれなので一応解説を。 以下はものすごく変態的システム依存をしてるのでネタ程度にお楽しみください。 決して重要なプログラムではこのような事はしないでください!*1 目的 以下、プログラムの流れを制作の時と同じ流れで解説していきます*2。 まず、このプログラムの目的とは「C言語でASCIIの文字の機械語だけで"Happy New year!"と表示するプログラムを書く」です。 元々年賀状用のネタなので(^^; 大まかな流れ ということで、C言語側のプログラムの流れは以下のようになります。 文字列表示プログラムを文字列で記述 制御をその文字列に移す C言語側は以上です。 簡単ですね。 次に文字列
SIMD命令およびアセンブラの基礎 SIMDとは 用語集 開発環境 アセンブラの基礎知識 x87 FPU命令を使用したプログラミング CPUの識別 メモリアドレスのアライメント ラップアラウンド算術と飽和算術 SIMD命令セットの分類と歴史 SIMD命令セットの記述方法 SIMD命令セットの概要 MMX命令セットの概要 SSE命令セットの概要 SSE2命令セットの概要 SSE3命令セットの概要 SSE4命令セットの概要 命令リファレンス データ転送命令 算術命令 比較命令 論理演算命令 シフト命令 シャッフル命令 パックおよびアンパック命令 変換命令 挿入および抽出命令 ブレンド命令 丸め命令 キャッシュ制御命令 その他の命令 プログラミング例 画像処理 音声信号処理 参考資料 参考資料 トップSIMDの扉
はじめに x86が持ち合わせる汎用レジスタ(eax、ecxなど…)を覚えているでしょうか。これらを用いれば、32ビットまでの整数型の演算を行うことが可能です。ほとんどのプログラムはこれらの汎用レジスタを活用することでネイティブコード化を行うことが可能ですが、実は一つ二つ、不可能な問題もあるのです。 それは浮動小数演算。ネイティブコードで浮動小数演算を行う場合、汎用レジスタを使うわけにはいきません。そもそもx86の汎用レジスタは32ビットまでしか表現できないため、倍精度浮動小数点(64ビット)を扱うことができません。かろうじて単精度浮動小数点であれば汎用レジスタで値を保有することができますが、肝心な浮動小数点用の命令がx86の汎用レジスタ用には用意されていないのです。 そこで登場するのがSSE2になります。これらは64ビット・128ビットなど、汎用レジスタでは表現不可能な整数演算を高速に行っ
strlen()とmemchr()のSIMD版を作ってみました. 今回は最速よりもお手軽さを重視したのでアセンブリ言語ではなくintrinsic関数を使っています.そのためVisual Studio 2008, gcc 4.xの両方でコンパイルでき32-bit, 64-bit OS上で動作します. WindowsとLinuxでのみ確認していますが恐らくIntel Mac OS X上でも動作するでしょう(sample source). ベンチマークはランダムな長さの文字列の平均長(average length)を変化させつつ取りました.数値は1byteあたりにかかった処理時間比で小さいほど速いことを表します. strlenが3種類(ANSI, BLOG, SSE2)とmemchrが2種類(ANSI, SSE2)あります.BLOGというのは今回試してみようというきっかけになったCounting
Abstract: Using new Intel Core i7 instructions to speed up string manipulation. Created 15 years ago by Peter Kankowski Last changed 14 years ago Contributors: Dap and Adam Messinger Filed under Low-level code optimization The new instructions SSE 4.2 introduces four instructions (PcmpEstrI, PcmpEstrM, PcmpIstrI, and PcmpIstrM) that can be used to speed up text processing code (including strcmp, m
6.1 はじめに 第5章で説明したデバッグウインドウもどきのプログラムの中で、stosbという命令を使いました。 このstosb命令は、ストリング操作命令と呼ばれる命令の一つです。 ストリング操作命令には、stosbの他にmovsb, cmpsb, scasb等の命令があります。 ストリング操作命令は、その名の通り主に文字列の操作に利用される命令ですが、実は画像処理においても有用な命令です。 そこで、第6章ではストリング操作命令を使った簡単な文字列操作の例を示し、次の第7章では画像処理の例を示したいと思います。 6.2 ストリング操作命令の種類 ストリング操作命令には、大きく分けるとmovs, stos, lods, cmps, scasの5種類があります。 これらは、さらに細かく分けると全部で15種類の命令があります。 命令の末尾にbが付いていて、1バイトずつ処理をするのが、movsb,
strlen()とmemchr()のSIMD版を作ってみました. 今回は最速よりもお手軽さを重視したのでアセンブリ言語ではなくintrinsic関数を使っています.そのためVisual Studio 2008, gcc 4.xの両方でコンパイルでき32-bit, 64-bit OS上で動作します. WindowsとLinuxでのみ確認していますが恐らくIntel Mac OS X上でも動作するでしょう(sample source). ベンチマークはランダムな長さの文字列の平均長(average length)を変化させつつ取りました.数値は1byteあたりにかかった処理時間比で小さいほど速いことを表します. strlenが3種類(ANSI, BLOG, SSE2)とmemchrが2種類(ANSI, SSE2)あります.BLOGというのは今回試してみようというきっかけになったCounting
今回は宿題となっていたmmx命令のmovntqについて試してきました。この命令は連載の中で紹介したsse命令のmovntdqと似た働きをしますが、一度に処理できるデータ量が8バイトと少ない代わりにアライメントの制約を受けないと言うメリットがあります。この辺のメリットとデメリットがどう作用するかを試してきました。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く