Writing assembly language is something best left for the experts. To write code that runs directly on your microprocessor you need to know how memory segmentation works, what the intended use of each register is, how codes executes in real and protected modes and much, much more. And, of course, modern compilers will usually produce faster, more optimized code than you ever could, without making a
はじめに 「あれ?インテルコンパイラの吐くコードがまたgccより遅いんじゃね?」と書こうとしたら、いろいろあって最終的にインテルコンパイラが圧倒的に速いコードを吐いた話。 コンパイラのバージョンとか 使うコンパイラのバージョンは、g++が4.8.5、icpcが16.0.3。 実行環境はIntel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz。 128ビット整数からboolへのキャスト (一個だけ) 訳あって128ビット整数をboolにキャストしたくなった。単純にキャストして正しい結果が得られるか確認するのと、どう実装されるか調べるため、こんなコードを書いた。 #include <stdio.h> #include <cstdint> void func32(__uint32_t m, bool &b){ b = m; } void func64(__uint64_
Just so you know, x86 machine-code is now a "high-level" language. What instructions say, and what they do, are very different things. I mention this because of those commenting on this post on OpenSSL's "constant-time" calculations, designed to avoid revealing secrets due to variations in compute time. The major comment is that it's hard to do this perfectly in C. My response is that it's hard to
This article has been translated into Japanese. This article has been translated into Chinese. This article has a followup. Linux has an elegant and beautiful design when it comes to threads: threads are nothing more than processes that share a virtual address space and file descriptor table. Threads spawned by a process are additional child processes of the main “thread’s” parent process. They’re
Sequential consistency is an intuitive model and, as the previous example shows, some of the concepts of sequential programs can be applied to it. It is also the model that gets implemented naturally on single-processor machines so, frankly, it is the only memory model most programmers have practical experience with. Unfortunately, for a true multiprocessor machine, this model is too restrictive t
こんにちは、西山です。 今日は前回書いた記事 俺の言語がこんなに遅いわけがない!? 〜C, Java, PHP, Python, Rubyによるプログラミング言語 速度比較〜 の続編を書いてみたいと思います。未読の方はこちらを斜め読みしてからのほうがよいかもしれないです。 この記事ですが、「長すぎだよ。3行で頼む。」という方のために3行で書くと、 C プログラムより Java プログラムのほうが実行速度が速いことがありました。 それは、Java の JIT コンパイラが働いて最適化されたネイティブコードが生成・実行されていたからです。 C のほうもコンパイル時にきちんと最適化すれば Java ごときに速さで負けることはありません! という内容です。長い記事にお付き合いくださる方は以下よろしくお願いいたします。 前回のあらすじ・・・ 前回の記事ではいろいろなプログラミング言語で書いたプログラ
vim-ref-jvmis 使い方 " Vundle の場合 " vimrc に追記&再読込して :BundleInstall Bundle 'ebc-2in2crc/vim-ref-jvmis' " NeoBundle の場合 " vimrc に追記&再読込して :NeoBundleInstall NeoBundle 'ebc-2in2crc/vim-ref-jvmis' Jvmis というコマンドが勝手に定義されるので、調べたいオペコードの上にカーソルを置いて :Jvmis を実行すると ref.vim インタフェースでリファレンスを閲覧出来ます。 リファレンスは The Java Virtual Machine Instruction Set から引いて来るので環境によっては一瞬もたつきますが、デフォルトでキャッシュを有効にしているので2回目以降は素早く引くことが出来ます *1 これ
by Nick Morgan, licensed under CC BY 4.0 Fork me on GitHub Introduction Our first program Registers and flags Instructions Branching Addressing modes The stack Jumping Creating a game Introduction In this tiny ebook I’m going to show you how to get started writing 6502 assembly language. The 6502 processor was massive in the seventies and eighties, powering famous computers like the BBC Micro, Ata
ということで、「ARMで学ぶアセンブリ言語入門」が6月22日に発売になります。 一言で内容を表すと「C言語で組み込み開発している人向けのARMアセンブリ言語入門」。言い方を変えると「バリバリとアセンブリコードが書ければ言うことないけど、C言語でコードを書いてたとしても、アセンブリ言語がどんなモノで、どんな風に成り立っているのか知っておこうよ。後できっと役に立つよ」。 内容としては、ARMアーキテクチャの話から、アセンブリ言語特有の考え方(レジスタ、命令など)、命令解説、C言語との連携、例外・割り込みの解説など、アセンブリ言語を扱うのに必要なところを一通り、といった感じで。 サンプルコードは特定ハードウェア(評価ボード)に依存せず、QEMU(ARMプロセッサをエミュレートするソフトウェア)上で動作することが前提となっている。よくあるパターンで、ARMプロセッサの解説本だと何かしらのARMプロ
FPGAをさわってたら、なんかパイプラインとかキャッシュとか複合命令を考えなければCPUつくるのはそんなに難しくないなーと思い始めて、いろいろぽわわ〜んとなって仕事が手につかないので、とりあえず命令表をまとめてみた。 DE0のFPGA内蔵RAMを前提にするので、メモリ空間が32KBくらいしか取れないので、Z80/8080をベースにした。 PUSH/POPやCALL/RETなど、スタックを使う命令も、実質2命令になるので実装がめんどくさそうなのではずした。あと、「ADD A,(HL)」みたいな、読み込みつつ計算するものは、メモり読み込みのタイミングがずれて作りにくいので、はずした。 代わりに、VWレジスタという、メモリ値やスタックの値を退避するためのレジスタを用意して、それぞれの処理を分解した。ついでに、掛け算・割り算の命令を追加した。 ようするに、CISCだったのをRISCに分解した。 こ
● [MCU] Abstract of MSP430 and Texas Instruments MSP430 彷徨の果て、現在市販されている16bit MCUの中から、私のハートを射止めたのは、既に何度も紹介した Texas Instruments 社のMSP430である。 MSP430は、消費電流が1MIPSあたり250μA・待機時1μA未満という、超低消費電力が最大の謳い文句となっており、市中の電気・ガスメーター、血圧計やパルスオキシメーターなどの医療器具、テスター、果てはシューズなどに、幅広く採用されているMCUである。 アーキテクチャ野郎にとって気になるのは、まずレジスタ構成と、命令コードであるが、内部には16ビット汎用レジスターがR0からR15まで計16本、そして7つのアドレッシングモードが用意されており、C言語への最適化効率を強く意識した設計になっている。逆に、命令数は極限ま
KOZOSのブログ 自作のOS(っぽいもの)の開発の履歴とか、ほかにもものづくりとかいろいろ。詳しいことは本家のほうをごらんください。 「フィーリングで読むアセンブラ入門」(http://kozos.jp/books/asm/)ですが,本日無事に原稿を送付し脱稿しました.本来は年末に脱稿の予定でしたがなにせページ数が多く最終チェックに長引き,正月休みで何とかまとまりました.いろいろ情報提供していただいたかた,応援していただいたかた,どうもありがとうございました.あとは(赤入れがありますが)出版されるのを待つばかりです. 内容としては,まずは簡単なサンプルプログラム(1関数が数行程度)をコンパイル・逆アセンブルして生成されたアセンブラを読んでみて,必要に応じてバイナリエディタで機械語コードを直接書き換えたりして逆アセンブラがどのように変化するのかを見て,試して,推測して,という感じです.C言
MikeOS ist ein Betriebssystem für x86-PCs, das in Assembler geschrieben ist. Es ist ein Lernwerkzeug, um zu zeigen, wie einfache 16-Bit-Real-Modus-Betriebssysteme funktionieren, mit gut kommentiertem Code und umfangreicher Dokumentation. Features Ein Textmodus-Dialog und eine menügesteuerte Oberfläche Booten von einer Diskette, CD-ROM oder USB-Stick Über 60 Systemaufrufe zur Verwendung durch Progr
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く