
こんにちわ.
CISCとRISCの基本的な違いについては調べればいくつものサイトが出てくるのですが,移植性について根本的に分からないことがあったので質問させていただきます.
CISCは複雑な機能をハードウェア(命令セットアーキテクチャ)で実現し,RISCは単純な命令セットで複雑な機能はソフトウェアで任せるためCISCのほうが移植性が高いと言われています.
移植性が高いとは,既存のソフトウェアを変更する必要がなく新しい機種に移行できるという意味ですが,そもそもRISCもCISCも最終的には用意された命令セットアーキテクチャを使用していることには代わりがないので,単純にその命令セットが変更しなければどちらも移植が可能な気がします.
そうなると,単純な命令セットしか使用しないRISCのほうがその分変更が少ないので移植性がむしろ高いと思うんですが,実際はそうではありません.
ソフトウェアで実現とは,コンパイラとOSのことを指すと思うのですが基本的にこれらが提供する機能に変更がなければ既存のソフトウェアは動くと思うんです.なのでこれらのコンパイラとOSがそれらの機能を実現するために使用する命令セットさせ変更がなければ良いと思うのですが…全く分かりません.
どなたか教えて頂けないでしょうか?
宜しくお願いします.
ちなみに教科書以外に以下のサイトを参考に調べていました.
http://www.atmarkit.co.jp/fsys/zunouhoudan/027zu …

No.2ベストアンサー
- 回答日時:
システムとしての移植ではなく、バイナリレベルの移植で限定して書きますが、
>なのでこれらのコンパイラとOSがそれらの機能を実現するために使用する命令セットさせ変更がなければ良いと思うのですが…全く分かりません.
命令セットが変更されているから移植するんですよ。(卵が先か鶏が先か見たいですが。。。)
なぜ命令セットを変更するのと問われれば、互換性が下がっても高速で命令を処理したいと考える人がいるからです。
互換性と高速化のせめぎ合いの中で多くの命令セットが生まれています。
あと一般的に言われる移植性とは高級言語(C言語等)での話です。
バイナリがいくら似ていても、アーキテクチャの違うCPUでは動きません。
再度、高級言語からコンパイルするしかないのです。
命令の単純なRISCではコンパイラの作成・チューニングが難しくなります。
結局、CISCとRISCの差は、
複雑さをCPU設計者が実装するか、コンパイラ設計者が実装するかの問題であり移植性とは直接関係がありません。

No.1
- 回答日時:
RISCの命令の単純さは、プログラムが長くなると言うことの裏返しでもあります。
CISCだったら1命令で済む処理を、どうかすると何100ステップも費やして書かないといけない、なんてこともあり得るわけです。長いプログラムは移植しにくくなりますよね。それに移植性の話になると、CPU命令セットだけではなく、システム全体の互換性まで考えなければなりません。CPUは同じだけど、システム構成が違う機械では互換性がなく、そのままでは使えませんので、移植作業が発生します。ましてや、CPUもシステム構成も違うなんて機械だと、大々的な移植作業、あるいは参考にして新規に作り直すことになります。
違いがコンパイラで吸収できる範囲なら、どっちでも移植はしなくて済むでしょうけど。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
リリースモードとデバッグモー...
-
ソフトの開発言語を調べる方法
-
double型とは
-
C++DLLの明示的リンクに関して
-
C言語 main関数とsum関数の記...
-
変数の内容がコロコロ変わる、...
-
ALGOL・PL/Iのフリーのコンパイ...
-
C言語はC言語でできている?
-
unsigned long long 型のフォー...
-
DLLファイルの逆コンパイラにつ...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
<unistd.h>をVisualStudioでつ...
-
Arduinoに関する質問
-
アプリケーションのDLLファイル...
-
visual studio 2019 についての...
-
コンパイル言語とインタープリ...
-
実行後にコンパイルに失敗しま...
-
コンパイルエラー:ユーザ定義...
-
sys/time.hのインクルードがで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DLLファイルの逆コンパイラにつ...
-
unsigned long long 型のフォー...
-
ソフトの開発言語を調べる方法
-
C++でデスクトップGUIアプリ開...
-
printfなど、標準関数のソース...
-
リリースモードとデバッグモー...
-
C++Builder → Visual C++ 移植...
-
<conio.h>?
-
パーサとコンパイラの違いって?
-
PICでのI2C通信でのマスタ、ス...
-
C言語はC言語でできている?
-
PIC18Fで変数の受け渡し...
-
COBOLの論理演算子について質問...
-
cc と gcc の違い
-
組み込みソフト。ROM領域にデータ
-
templateクラスの宣言と定義を...
-
変数の内容がコロコロ変わる、...
-
Out Of Near Heap Space?
-
最初に使う変数のゼロクリアに...
-
MPI プログラム
おすすめ情報