• ベストアンサー

アセンブリ言語について教えて下さい。

PED02744の回答

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.4

初めての言語が8086アセンブラで、入出力までこなす。。。 それは、相当困難が伴います。頭がパンクします。 あ、まだ「パンクしそう」でとまってますね。 そもそも、アセンブラだったら、配列なんてありませんから、 アドレスポインタの移動を指定回数繰り返すって事になるんですが、 データ件数無制限みたいだし、OSにメモリ要求IOしたり、それはもう 頭がパンクするほど厄介なことに。。。 とりあえず、アセンブラの参考になるページは http://www5c.biglobe.ne.jp/~ecb/assembler/assembler00.html ここかな? ここを一通り読んだあと、アセンブラMS-DOSの世界というのが下の方に あるので、そこをチェックされるのがよろしいでしょう。 一応、XMSメモリの確保まで書かれているようなので、無制限のデータ件数でも大丈夫でしょう。 それにしても、初めてでこの課題はかなり無茶です。 私だったら、辞めさせたい新入社員にこの課題を出して、できなかったら 「できないのか。おまえ、この会社向いてないんじゃない?」って いって辞めさせるのに使う・・・っていうくらい無茶です(笑)

noname#30991
質問者

お礼

ご回答ありがとうございます。 そんなに無茶な課題なんですか…そりゃ頭はパンクしますね(笑) 教えていただいたページを見てみましたが、非常に丁寧な解説で非常に参考になりそうです。まず、基本をしっかり身に付けてみます。

関連するQ&A

  • プログラミングの問題です。c言語でお願いします。

    プログラミングの質問です。 c言語でお願いします。 以下の結果が得られるようなプログラムを書いてください。 期末試験では必ずフローチャートを書いてください。また、フローチャートが 書けない場合は、どういう順番でプログラムを書けば よいかを書いてください。 100個のデータを入力させ、プログラム実行者が定めるある値以上のものの個数 を表示する。 プログラミングわからないのでお願いします。

  • プログラミングの問題です。c言語でお願いします。

    プログラミングの質問です。 c言語でお願いします。 以下の結果が得られるようなプログラムを書いてください。 期末試験では必ずフローチャートを書いてください。また、フローチャートが 書けない場合は、どういう順番でプログラムを書けば よいかを書いてください。 10秒間、1秒間当たり5個得られる実験データを入力させ、それを 1秒ごとに平均した値として出力する。 プログラミングわからないのでお願いします。

  • メモリアドレスレジスタについて。

    メモリアドレスレジスタの説明について、テキストには、「命令が処理対象とするアドレス(実効アドレス)は、メモリアドレスレジスタで計算される。」とありますが、全く分かりません。 噛み砕いて教えて頂けないでしょうか?

  • CPUの回路について教えてほしいです!

    ・5ビットCPU:CPUが5ビットずつ読み出し専用メモリからデータを取り込む。 ・レジスタ:2ビットを記憶できるレジスタを1つ持っている。 ・アドレス空間:CPUは2ビットの異なるアドレスを参照できる。 ・メモリ:読み出し専用メモリと書き込み専用メモリを持っている。読み出し専用は5ビット、4ワード。書き込み専用は2ビット、1ワード ・機械語:5ビット中、上位3ビットがOPコード、下位2ビットがオペランドとなる。 ・命令:CPUの命令は以下の5種類。 ・加算命令:レジスタの値とオペランドの値を加算し、その値をレジスタにセット。 ・減算命令:レジスタの値からオペランドの値を減算し、その値をレジスタにセット。 ・ロード命令:オペランドの値をレジスタにセット。 ・ストア命令:書き込み専用メモリにレジスタの数値を書き込む。下位2ビットは無視される。 ・ジャンプ命令:オペランドの値が示す読み出し専用メモリのアドレスに書かれた命令を次に実行する命令とする。 このような仕様にに基づくUPUの回路図を教えてください。 また減算命令、ジャンプ命令、メモリへの書き込みをするような回路について文章でよいので説明していただけるとありがたいです。

  • CPUについて教えて下さい。

    CPUについてこれまで調べて分かったことは、  ・処理能力の目安となる数値として、クロック周波数を用いる  ・レジスタに記憶されているデータに対して演算を行う  ・レジスタからメモリーやその他の部品にデータを転送する  ・メモリやその他の部品から、レジスタにデータを転送する があります。 それ以外に・・・  (1)補助記憶装置からのみ命令を読み取り、命令を実行する  (2)内部に主記憶装置(メモリ)を持つ  (3)CPUは演算を行い、制御機能は持たない  (4)主記憶が多ければ多いほどCPUの動作は遅くなる  (5)クロック信号が発生する間隔が短いほど、CPUの動作は高速になる この中から最も適切なものを1つ選ばなくてはなりません。 (1)は“補助記憶装置からのみ”というのが違うと思います。 それ以外はちょっと分からないので、どなたかお知恵をかして下さい。 解説も添えてもらえると助かります。 回答よろしくお願いします!

  • プログラミングの質問です。

    c言語でお願いします。 以下の結果が得られるようなプログラムを書いてください。 期末試験では必ずフローチャートを書いてください。また、フローチャートが 書けない場合は、どういう順番でプログラムを書けば よいかを書いてください。 1.数字を5個続けて入力させ、大きい順に並び替え、出力する。(配列を使う事) プログラミングわからないのでお願いします。

  • 情報学についての質問です。

    考えても理解できなかったので教えてもらえるとうれしいです。 問 配列A,Bに正負の符号と絶対値の十進数をアスキーコードで表された値が入力されている。正負は0の時'#'、負の時は'-'で表され、続いて絶対値が一桁10進数の文字表現として代入されている。 (a)符号と絶対値がそれぞれCL,ALレジスタに与えられているとき、その値を8ビット符号付き整数としてBLレジスタに入力するsubroutinABSのフローチャートと命令コードを書く。 (b)配列A、Bの値をそれぞれ8ビット符号付き整数に変えた後、それらの和をDLレジスタに求める命令を書く。(a)のsubroutinを使う。 (c)(b)でDLレジスタに求められた8ビット符号付き整数を正負の符号と絶対値をアスキーコードで表し下の配列Cに入れる。この処理のフローチャートと命令コード書く。 DL:1111 1111B   のとき、  C: '-'、'1'  とする。 詳しい解説とともに解答していただけるとありがたく思います。お願いします。

  • アドレス指定方式での、命令語が参照する番地

    16進数で”C13B0206”という32ビットの命令語があります。 <命令語の仕様> 0~7ビット:命令指示部 8~10ビット:レジスタ 11~15ビット:アドレス修飾部 16~31ビット:番地 <アドレス修飾と参照番地の関係> 00 0固定 直接アドレス (11,12の値が00、13~15の値が0固定のとき、直接アドレス。) 01 0固定 間接アドレス 10 インデックスレジスタ インデックスレジスタ+番地の値 11 インデックスレジスタ インデックスレジスタ+番地が示す内容の値 <主記憶、レジスタの状態> ●主記憶に格納されている値(16進数) 番地(16進数)が  202,203,204,205,206,208,209,20A...の順に、それぞれの格納値は、 203,204,205,206,208,209,20A,20B...。 ●インデックスレジスタに格納されている値(16進数) インデックスレジスタ番号(16進数)が1,2,3,4,5… の順に、それぞれの格納値は、 0,1,2,3,4…。 (1) アドレス修飾部のインデックスレジスタ番号。 命令語の”C13B0206”で、アドレス修飾部にあたるのが”3B”。00111011(2進数)。8~10ビットの001がレジスタになるから、3。 (2)命令の番地部の番地の値(16進数) 命令の番地部の番地の値。命令部では、”0206”。ちょうど16進数なので、206。 (3) 命令が最終的に参照する番地。 上の、<主記憶、レジスタの状態>より、11~15ビットが”1011”。 インデックス番号が11(2進数)なので、3(16進数)。インデックスレジスタ番号が3のとき、格納されているのは2。番地の値である206と3を合わせ、209。 最終的に参照される番地は209。 (1)(2)(3)、自分の解き方が正しいのかどうか自信がありません。どなたか補足、訂正などありましたら、よろしくお願いいたします。

  • 機械語の命令について

    例えばアセンブラでいうところの LD xxxx という命令は、 「xxxx番地のデータをレジスタに記憶する。」 らしいのですが、LDという命令もアドレスxxxxも2進数 で表現されていますか? そうだとして、どんな論理回路で、最終的にレジスタの電圧が1になるのでしょうか^-^? よろしくお願いします。

  • どこを変えればいいですか?

    上位 m 人の出力 [問題]学籍番号と試験の点数のペアーを入力するものとする(「 0 0 」を入力すると終了し,データ数は 100 以下である).なお,データは,学籍番号順に入力されるわけではない.このとき,試験の点数の上位 7 人の学籍番号と試験の点数を,点数が高い順に出力するプログラムを書け.ただし,同じ点数の学生がいた場合は,最初に入力されたデータを優先するものとする.結果は,学籍番号と点数を1つ以上のスペースで区切り,1行に一人ずつ出力せよ. #include <iostream> int main() { int i1, k, n = 0, m = 0, no[100], ten[100], sw[100] = {0}, k1, k2; // データの入力 std::cin >> k1 >> k2; while (k1 > 0 || k2 > 0) { no[n] = k1; ten[n] = k2; n++; std::cin >> k1 >> k2; } // 上位 5 人の出力 while (m < 5) { k = -1; for (i1 = 0; i1 < n; i1++) { if (sw[i1] == 0 && (k < 0 || ten[i1] > ten[k])) k = i1; } std::cout << no[k] << " " << ten[k] << std::endl; sw[k] = 1; m++; } return 0; }