• 締切済み

アセンブラのCAP-X COMP-X

アセンブラのCAP-X COMP-X  いつも回答いただきありがとうございます。 アセンブラのCAP-X COMP-Xと言っても、知っている人は、少ないのでは無いでしょうか?  アセンブラのプログラムを組む機会自体が、減少していると思えるのです。  私が、最初に情報処理試験で触れたのは、このアセンブラと仮想のコンピュータでした。いつか、征服したいテーマでした。  でも、今でも、アセンブラと仮想機械では、もっとも、シンプルで、アセンブラの言語と原理を知るには、もっともふさわしいのでは、無いかと考えているのです。  その後も、アセンブラと仮想の機械は、進展しましたが、知らない者には、いよいよ理解しがたく、近づくことが、できないので、この CAP-X COMP-Xを  まず、理解したいと考えているのです。、  アセンブラを理解できる人には、なじみの無いアセンブラと仮想機械と思いますが、現在知っているアセンブラから、類推して回答していただけるとありがたいです。  今は、Windowsの時代になってCAP-X COMP-Xをシュミレーションできるソフトも無くなりました。頭の中で仮想するばかりです。  一語16ビットの計算機であって、0を含めて256の整数倍の番地から始まる連続した256語を1記録ブロックとして、最少1記憶ブロックから最大256記憶ブロックを実装することができる。N個の記憶ブロックを使用するとき、アクセスできるアドレスは、 0番地から(256*N-1)番地までである。  Nが、256の時、 256*256-1=65536 となって65Kのアドレス空間を持つことになる。 ●Q01. このメモリーの中で、コードとテータの両者を使っていると解釈してもよいのだろうか? ●Q02. もし、メモリーのアドレス空間をコードとデータの両者を混合して使用していると誤ってプログラムしてしまうとコードをデータとして読み込んだり、コードのアドレスに誤って、データを書いてしまい、これが、原因で、コンピューターが、暴走したりする危険性は、あるのでしょうか? ●Q03. この仮想の機械には、OSのような領域は、存在しないのでしょうか? ●Q04. 必要ないのでしょうか?  OSが、必要であるのなら、65Kの全ての領域は、使用できなくなると考えることができるのでしょうか? ●Q05. アセンブラの記号を作って、実行するようにしています。しかし、アセンブラを機械語にアセンブルして、メモリーにロードする必要があるように感じますが、この機械では、 アセンブラを機械語に翻訳するソフトは、どのようにして利用されるのでしょうか? ●Q06. 最初にアセンブラ言語を機械語に変換するアセンブリ言語をメモリーにロードしてから、アセンブラを機械語に変換して、メモリーにロードして、アセンブリ言語をクリアして使用するということになるのでしょうか? ●Q07. これなら、機械語とデータ領域の合計として65Kを使えるということになるのでしょうか?  16ビットの命令語のうちアドレスを指定できるのは、 ADフィールドの アドレスの下位8ビットを指定することになります。  これでは、256通りしか表現できません。  上位8ビットは、 BR(基底レジスターbase register)で定められる。  つまり、BRを変更しないと256通りのアドレスを超えてのアドレスを指定できなくなる。  このBRを変更するのに、 JSR命令(jump to subroutine)が使用される。subroutineに飛ぶのと、記憶ブロックを超えるのとどうして、同じ命令で行われるのか分かりません。 ●Q08. どうしてでしょうか?  昔、ユニバック、マシーンというのがありました。  36ビット、1ワードの機械でした。36ビットの中に命令部分とアドレス部分16ビットの両方を納めなければならないので、アドレス空間には、限度がありました。  16ビットだと限度のアドレス空間は、65Kワードということになります。  これ以上に大きな空間は、アクセスできない。  バイトマシーンのように最初の命令語によって、何バイトでも、アキュームレーターに収納できて大きなアドレス空間にアクセスできるようになっていなかったのです。  大きな容量のプログラムを作るとき、65Kワードでは、収納できない。それで、使用したのは、オーバーレイという手法でした。  プログラムをセグメントに切って、必要に応じて順にプログラムをメモリーに載せ替えるという方法です。しかし、セグメントが大きくなるとこれでは、収まることができないので限度がありました。 ●Q09. オーバレイのやり方は、記憶ブロックのやり方と同様と考えて良いのでしょうか?  初期的な質問で申訳ありません。  また、質問が続くようなことがありましてもよろしく教授方お願いします。 ーーーーーーーーーー CAP-X Computer Application X https://ja.wikipedia.org/wiki/CAP-X CAP-X とは、かつて情報処理技術者試験でのプログラミング能力試験のために使用されていたアセンブリ言語である。後継のCASLに置き換えられ、現在はCASL IIが使われている。 COMP-X の仕様[編集] COMP-X はデータワード長が16ビット、メモリアドレス長も16ビットのコンピュータである。アドレスはバイト単位ではなくワード単位に付与される。ワード中のビットの番号付けは、最上位ビットを 0 番、最下位ビットを 15 番とする。バイト単位の処理という概念がないため、エンディアンも規定されていない。また、COMP-X には入出力の概念が規定されておらず、何らかの手段でメモリ上にプログラムとデータを格納し、実行し、その結果はメモリを読み取ることでわかるようになっている。従って、入出力命令は存在しない。扱う数は整数のみで、2の補数表現を採用している。 レジスタは次の通り。 ーーーーーーーー COMP-X Compuer X https://ja.wikipedia.org/wiki/CAP-X CAP-X とは、かつて情報処理技術者試験でのプログラミング能力試験のために使用されていたアセンブリ言語である。後継のCASLに置き換えられ、現在はCASL IIが使われている。 命令語は全て 1 ワードであり、先頭から順に OP フィールド(4ビット)、GR フィールド(2ビット)、XR フィールド(2ビット)、AD フィールド(8ビット)で構成される。OP フィールドは命令の種類を表すコード(オペコード)であり、COMP-X には 12 種類の命令しかない。GR フィールドでは演算で使用する GR の番号が指定される。また、JC命令では分岐条件の指定に使われる。XR フィールドではアドレス修飾を行う GR の番号が指定され、内容が 0 の場合は GR0 を意味するのではなく、GR によるアドレス修飾をしない。AD フィールドはアドレスの下位8ビットを指定する。 実効アドレスとは命令で使用するメモリアドレスであり、上位8ビットは BR で、下位8ビットは AD フィールドで指定される。XR フィールドが 0 以外の場合、指定された GR の下位8ビットと AD フィールドの値を加算し、結果の下位8ビットを実効アドレスの下位8ビットとする。

みんなの回答

  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.4

Q01 その通りです。 Q02 その通り、危険はあります。 Q03 存在しないでしょうね。入出力命令が無いので。 COMP-Xは昔のミニコンがモデルになっていますが、昔のミニコンの場合、OS無しで使うことも普通です。もちろんOSを動かすのも普通です。 Q04 必要では無いです。 Q05 昔のミニコンであれば、 ケース1:クロスアセンブラを使う ケース2:まずアセンブラをメモリにロードして、ソースプログラムを読み込んでアセンブルして機械語を出力する。次に出力された機械語をロードして実行する ですが、COMP-Xの範囲内だと、入出力できないので、COMP-Xが実在するとすれば、 ケース3:クロスアセンブルないしハンドアセンブルで機械語を作り、それをおそらくはパネルのスイッチから1ワードずつ入力していくということになるでしょう。あるいはメモリを共有する別のプロセッサからメモリにロードするか。 Q06 上記の通りです。 Q07 全部使えます。 Q08 JNZやJCだとBRを使った実効アドレスの場所にジャンプします。ということは、SCの上位とBRの上位はつねに同一である必要があります。なので、BRへのロードとジャンプは同時である必要があります。JSRがそれに相当する命令(256ワード境界を越えるジャンプ)です。 Q09 入出力命令が無いのでオーバーレイは出来ません。

回答No.3

A01:そのとうりです。CPUによってはコードのメモリとデータのメモリが分離しているものがありました。(4004とか) A02:良くあることです。昔、Z80用のプログラムで条件に応じてこれから実行する部分の機械語を書き換えて動作するプログラムを作ったことが有ります。 A03:COMP-X には入出力の概念が規定されていない(人間も直接メモリを読み書きする)。入出力が無いのでOSも必要なし。 A05:昔のコンピュータにはパネルにアドレス用とデータ用のスィッチが有り、それを操作して直接メモリにプログラムやデータを入れてました。有名なIMSAI-8080もその方式でした。 COMP-X上で動作するCAP-Xアセンブラを作ろうとしているのでしょうか? それはすごいシャレンジャーですね。 A07:全てをCOMP-X上で行うのなら、アセンブラプログラム+CAP-Xのソースコード+アセンブル結果(実行用)が、64Kワード以内に収まるようにしないといけません。 A08:そもそもCAP-Xは教育用であり、それで実務を行うことは考えていない。また当時、一つの処理単位(サブルーチン)が256ワードを超える巨大なプログラムが必要になるとは考えてもいなかった。 だから処理単位を記憶ブロックごとに分けて配置できれば十分だった。 A09:メモリしかないのだから、サブルーチン=オーバーレイと考えても良いのでは?

  • cwdecoder
  • ベストアンサー率20% (200/997)
回答No.2

私は、CASL,COMETの世代ですが、これで情報処理技術者試験を受けましたのでわかるところだけ回答します。学校の課題で、CASLアセンブラとCOMETシミュレーターをC言語で自作しました。 現在では、組み込みマイコン(マイクロコントローラ)のプログラミングを楽しんでいます。組み込み系ではアセンブラも現役ですよ。 ●Q01. このメモリーの中で、コードとテータの両者を使っていると解釈してもよいのだろうか?  その通りですが、現在のマイコンのようにハーバードアーキテクチャで回路を設計するとその限りではありません。 ●Q02. もし、メモリーのアドレス空間をコードとデータの両者を混合して使用していると誤ってプログラムしてしまうとコードをデータとして読み込んだり、コードのアドレスに誤って、データを書いてしまい、これが、原因で、コンピューターが、暴走したりする危険性は、あるのでしょう そうなります。私も8ビットパソコン全盛時代や、PC-9801全盛時代に、よく経験しました。 ●Q03. この仮想の機械には、OSのような領域は、存在しないのでしょうか? 専用の領域というのはありませんが、OSを自作してメモリ空間上に配置することは可能です。 ●Q04. 必要ないのでしょうか?  OSが、必要であるのなら、65Kの全ての領域は、使用できなくなると考えることができるのでしょうか? バンク切り替えなどを使わない限り、全部は使えなくなります。 ●Q05. アセンブラの記号を作って、実行するようにしています。しかし、アセンブラを機械語にアセンブルして、メモリーにロードする必要があるように感じますが、この機械では、 アセンブラを機械語に翻訳するソフトは、どのようにして利用されるのでしょうか? 外部のパソコンなどでクロス開発するか、COMP-X上にアセンブラソフトを作成すれば可能となります。

回答No.1

先ず、間違いの指摘から >256*256-1=65536 >となって65Kのアドレス空間を持つことになる。 256*256-1=65535で、64k A01:仕様書にあるとおり。 A02:有りえます。今でもハッカーが使う手口です。また、大昔のゲームプログラムで、条件によって意図的に命令を書き換えているのが有りました。 A03,A04,A05:情報処理試験の問題を作るために考えられた実在しないコンピュータですから、アセンブラプログラムが作れれば良いだけなのでOSは不要、機械語コードを生成するアセンブラも不要なので存在しない。 A06:COMP-Xは実在解りません。シミュレータがどうしているかという質問でしょうか。 A07:繰り返しますが、アドレスは64kです。COMP-Xは、ワードマシンだった記憶がありますので、メモリーの最大値は128kByteです。 各ルーチンは256k以内のアドレス空間を使い、サブルーチンは、それぞれ異なるアドレス空間を使うという仕様でしょう。 A08:いやいや、バイトマシンでもアキュームレータ(レジスタ)のビット数は決まっていますよ。IBMのSystem370だと汎用レジスタが32Bit。機械語1命令の長さが可変とおっしゃりたいのかな。System370では2バイト、4バイト、6バイト、8バイトの命令が有ったと思います。 オーバーレイは、アドレス空間の問題だけでなく小さな主記憶装置で大きなプログラムを動かす為に考え出された手法ですね。 A09:すみません、不勉強で「記憶ブロック」が解りません。どの様な機能でしょう。

mhd02556
質問者

お礼

 レスありがとうございます。 A09:すみません、不勉強で「記憶ブロック」が解りません。どの様な機能でしょう。 >  一語16ビットの計算機であって、0を含めて256の整数倍の番地から始まる連続した256語を1記録ブロックとして、最少1記憶ブロックから最大256記憶ブロックを実装することができる。N個の記憶ブロックを使用するとき、アクセスできるアドレスは、 > 0番地から(256*N-1)番地までである。  一語16ビットです。  この中に、命令コードや、レジスター番号などが、入っていて、実際に、メモリーをアドレス指定できるビットは、8ビットのみです。  8ビットでは、256通りしか表現できません。一語で指定できるアドレス空間は、 256語  までの範囲になります。  このアドレス空間を 1記録ブロック と便宜上呼んでいるのです。  インターネットや、パソコンの用語集を見てもあまり、解説されていません。  256語以上のアドレス空間をアクセスしようとすると別のレジスター、基底レジスタ BRに入っている上位8ビットを変更しなければ、なりません。 基底レジスタ BR 実効アドレス16ビットの上位8ビットを格納してあるレジスタ。BR の下位8ビットは常に 0 である。  このために、 JSR (0x3) - jump to subroutine GR フィールドで指定した GR に現在の SC の内容に 1 を加算したものを格納し、実効アドレスが指すワードの内容を SC と BR に格納する。BR の内容を変更する唯一の命令である。従って、アドレスの上位8ビットの変化を伴うサブルーチン呼び出しとサブルーチンからの復帰は、必ず JSR 命令を使う。  JSR命令を使ってアドレスの上位8ビットを変化させるのです。 ●Q01. こんな説明で、分かってもらえたでしょうか?  敬具

関連するQ&A

専門家に質問してみよう