アセンブリについて教えてください(初歩的な質問)
自分は将来アセンブリも読めるようになりたいので色々勉強をしているのですがよく要領がつかめません。というのは、コンパイラが吐き出したアセンブリコードはCPUを中心とした機械側(コンピュータアーキテクチャ)にとっては飽くまで仕様みたいなものであって、実際は全然違う(ディテール部分はマシンに因る)ということなんでしょうか?
このサイトで色々いじってはみるのですが、どうも挙動が読めません。(特にIPがどこから出てきたのかわかりません…)
http://schweigi.github.io/assembler-simulator/
もしアセンブリコードが人間側の仕様みたいなものだとするのなら、レジスタやらメモリやらは人間側がそういう風にいじったことにしただけ、というような気がします。
自分が知りたいのは、だとするとCPUの特性を知り尽くさないとあまりパフォーマンスが出せないことになるのでは?ということや、アセンブリを書くことに意味があるのか?といったことについてです。さらにアセンブルした機械語も、実際のRAM上では正しく値がセットされていない、ということになりませんか?だとするとデバッガやシミュレータとはなんだったのか?という気がしてしまいます。本当にレジスタの値は読めているんでしょうか?
どうも透過性という概念と何か関係がありそうなのですが…
あまりにも分からないことだらけです。よろしくお願いいたします。
追記
たくさん回答してくださって皆さんありがとうございました。
とても参考になりました。言われてみれば確かにCPUごとにアセンブリが対応していることを失念しておりました。自分の中では結局のところ現代のCPUではとても理解が及ばないかもしれない、ということを思いました。 レイヤーの話もありましたが、自分は精々アセンブリレベルのことが知りたいだけだったので、なんとなく腑に落ちました。