• ベストアンサー

本気でマシン語を覚えたい

アセンブラで、LEAの逆は何でしょうか? LEA reg32, mem あと難しい話ですが、今時のパソコン(Althon64X2やCore2DuoやXeon)など複数コアなどの時代で、アセンブラで覚えるべき内容は386や486と比べてどう違うのでしょうか? 機械語のパイプラインやキャッシュなどの概念も知りたいので、詳しい書籍も探しています。 あと命令セット(+その命令のスピード?)など詳しく書かれている本も探しています。 簡単なこともわかっていないのですが、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

アセンブラ入門するならx86は大変な相手ですが大丈夫ですか?PICとかH8と簡単なマイコンから始めたほうが楽ですよ。それと他のプログラミング言語は経験済みでしょうか? >アセンブラで、LEAの逆は何でしょうか? >LEA reg32, mem LEAはアドレス計算してロードする命令ですが、逆ってどういう意味でしょう?アドレスをどうしたいのですか? >あと難しい話ですが、今時のパソコン(Althon64X2やCore2DuoやXeon)など複数コアなどの時代で、アセンブラで覚えるべき内容は386や486と比べてどう違うのでしょうか? 単純に高速なプログラムをアセンブラ書けるって(これだけでも相当優秀ですが)知識では太刀打ちできません。OSの豊富な知識が必要になります。WindowsやLinuxはマルチコアの制御を特権レベル(意味がわかります?)でOSが掌握しています。 CPUがOSと関係しているかイメージできないとマルチコアのプログラミングは出来ません。CPUの持つ仮想記憶、特権レベル、マルチコア用の機能を理解する必要があります。 ただし、それを使う側にとって簡単にするOPENMPなどの技術もあります。でも、あえてアセンブラでやりたいとの事ですので難しいことをしたいと言う前提で書かせてもらいました。 >機械語のパイプラインやキャッシュなどの概念も知りたいので、詳しい書籍も探しています。 どの本が良いかは、本屋で自分で読んでみてください。 とりあえず、まずアセンブラ入門の本。 http://www.cqpub.co.jp/hanbai/books/33/33421.htm 有名なのはこの本「独習アセンブラ」 http://www.amazon.co.jp/%E7%8B%AC%E7%BF%92%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9-%E6%97%A5%E5%90%91-%E4%BF%8A%E4%BA%8C/dp/479810955X/ref=pd_sbs_b_1/250-0399562-6461017 名著「はじめて読む8086―16ビット・コンピュータをやさしく語る」 http://www.amazon.co.jp/%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E8%AA%AD%E3%82%808086%E2%80%9516%E3%83%93%E3%83%83%E3%83%88%E3%83%BB%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%82%92%E3%82%84%E3%81%95%E3%81%97%E3%81%8F%E8%AA%9E%E3%82%8B-%E3%82%A2%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%96%E3%83%83%E3%82%AF%E3%82%B9-%E8%92%B2%E5%9C%B0-%E8%BC%9D%E5%B0%9A/dp/4871482456/ref=pd_sbs_b_3/250-0399562-6461017?ie=UTF8&qid=1192803772&sr=1-7 名著「はじめて読む486―32ビットコンピュータをやさしく語る」 http://www.amazon.co.jp/%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E8%AA%AD%E3%82%80486%E2%80%9532%E3%83%93%E3%83%83%E3%83%88%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%82%92%E3%82%84%E3%81%95%E3%81%97%E3%81%8F%E8%AA%9E%E3%82%8B-%E8%92%B2%E5%9C%B0-%E8%BC%9D%E5%B0%9A/dp/4756102131/ref=pd_sim_b_3/250-0399562-6461017?ie=UTF8&qid=1192803772&sr=1-9 CPUのアーキテクチャならこの本かな「マイクロプロセッサ・アーキテクチャ入門―RISCプロセッサの基礎から最新プロセッサのしくみまで」 http://www.amazon.co.jp/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%83%97%E3%83%AD%E3%82%BB%E3%83%83%E3%82%B5%E3%83%BB%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3%E5%85%A5%E9%96%80%E2%80%95RISC%E3%83%97%E3%83%AD%E3%82%BB%E3%83%83%E3%82%B5%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E6%9C%80%E6%96%B0%E3%83%97%E3%83%AD%E3%82%BB%E3%83%83%E3%82%B5%E3%81%AE%E3%81%97%E3%81%8F%E3%81%BF%E3%81%BE%E3%81%A7-TECHI-%E4%B8%AD%E6%A3%AE-%E7%AB%A0/dp/4789833313/ref=sr_1_8/250-0399562-6461017?ie=UTF8&s=books&qid=1192803772&sr=1-8 で、パイプラインとかの難しい本も紹介しておきます。 「コンピュータの構成と設計~ハードウエアとソフトウエアのインタフェース 第3版 (上) 」 http://www.amazon.co.jp/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%AE%E6%A7%8B%E6%88%90%E3%81%A8%E8%A8%AD%E8%A8%88~%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A8%E3%82%A2%E3%81%A8%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A8%E3%82%A2%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9-%E7%AC%AC3%E7%89%88-%E4%B8%8A-%E3%83%87%E3%82%A4%E3%83%93%E3%83%83%E3%83%89%E3%83%BB-%E3%83%91%E3%82%BF%E3%83%BC%E3%82%BD%E3%83%B3/dp/482228266X/ref=pd_sxp_grid_pt_2_1/250-0399562-6461017 「コンピュータの構成と設計~ハードウエアとソフトウエアのインタフェース 第3版 (下)」 http://www.amazon.co.jp/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%AE%E6%A7%8B%E6%88%90%E3%81%A8%E8%A8%AD%E8%A8%88~%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A8%E3%82%A2%E3%81%A8%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A8%E3%82%A2%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9-%E7%AC%AC3%E7%89%88-%E4%B8%8B-%E3%83%87%E3%82%A4%E3%83%93%E3%83%83%E3%83%89%E3%83%BB-%E3%83%91%E3%82%BF%E3%83%BC%E3%82%BD%E3%83%B3/dp/4822282678/ref=pd_sim_b_1/250-0399562-6461017 CPUの最新技術のナナメ読みがしたい場合は、この人の連載がお勧め http://pc.watch.impress.co.jp/docs/article/backno/kaigai.htm >あと命令セット(+その命令のスピード?)など詳しく書かれている本も探しています。 命令のサイクル(ステート)数は、CPUのコア毎に違いますのでCPU開発メーカーの資料を読みましょう! ただし、パイプラインで処理されるので必要サイクル数と実際の動作サイクルは食い違います。その上、パイプラインに入る命令の並び方次第でストール等が発生する場合もあり直感的には処理時間は見積もれません。RISCチップならもう少し簡単ですが。 インテルの日本語の情報が入手出来るサイトです。 http://www.intel.co.jp/jp/download/index.htm 「IA-32 アーキテクチャー」ってところからほしい資料を探しましょう。

その他の回答 (3)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.4

>LEAはレジスタに変数の値を入れるですが、レジスタの値をグローバル変数に入れたいです。 mov命令でメモリに値を書き込みます。 下記のサイトを見てみてください。 http://ray.sakura.ne.jp/asm/index.html >特権レベルも絡むのですか? アセンブラで直接マルチコアを制御しようとすれば絡みます。 OS任せにすれば絡みませんよ。 >最初はマシン語あきらめていましたが、私の下手糞なマシン語でもVCコンパイラより2倍早くなったので、これはいけると思ったからです。 夢でも見ているのでしょうか? >セレロン(メモリ1G)では効果が見れなかったのですが、アスロン64(メモリ2G)で効果ありました。 言語が使わないマシン語を駆使した場合は、そのぐらい速度差が出る可能性が無いことは無いですが、現在のコンパイラの最適化レベルはかなり優秀です。 VCのリリースコンパイルしたプログラムとの速度比較はされましたか?デバックのプログラムはむちゃくちゃ遅いですよ。 遅いマシンで差が無く、アスロンで高速化したのも不思議です。キャッシュに助けられた気がしますが。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.3

追加質問。 >マシン語を覚えたい の目的を聞かせてもらえますか? (1)コンピュータ(CPU)の本質を理解したい。 (2)C言語などの処理速度に不満で、マシン語なら高速なプログラムを書けると聞いたので挑戦したい。 (3)OSを自作したいので、まず基礎知識を勉強している。 (4)なんとなくカッコ良いから。 (5)その他。

saki4
質問者

補足

LEAはレジスタに変数の値を入れるですが、レジスタの値をグローバル変数に入れたいです。 特権レベルも絡むのですか? どれも当てはまりますが、特には(2)です。 最初はマシン語あきらめていましたが、私の下手糞なマシン語でもVCコンパイラより2倍早くなったので、これはいけると思ったからです。 夢でも見ているのでしょうか? セレロン(メモリ1G)では効果が見れなかったのですが、アスロン64(メモリ2G)で効果ありました。

noname#65902
noname#65902
回答No.1

> マシン語を覚えたい マシン語というと別名「マシンコード」または単に「コード」と呼ばれる 16進数のことを指しますが、本気でこれを覚えたいということでしょうか? もしくは > LEA reg32, mem という「アセンブリ言語」(通称「アセンブラ」...厳密には「アセンブラ」は 「アセンブリ言語」から「マシンコード」を生成するツールのこと) を覚えたいのでしょうか? 少し前の32bit CPU のマシンコードには少し触れたことはあるものの 現在の64bit CPU のそれは知りませんが、 前者でしたら、8bit CPU の時代ならまだしも、64bit 可変長命令のCPUのそれを 覚えるのはかなり大変だと思います、覚えたい理由、努力対メリットに よってはあまり意味ないかも。 書籍を探されてるならそのうち見つかるでしょうけれど、 ずばり本屋さんで片っ端から覗いてみるといいです。 文章がヘタクソな本もありますからね。

関連するQ&A