• ベストアンサー

素数を求めるプログラム(アセンブリ言語)

アセンブリ言語で素数を求めるプログラムを作っているのですが、どうしても内容が理解できなくて困っています。 難しいのは、多分理解できないので、できるだけ簡単なプログラムソースを書いて頂けないでしょうか? または、それがあるページを教えてください。

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

  • ベストアンサー
  • Sam_A
  • ベストアンサー率33% (6/18)
回答No.5

C言語でとりあえず素数のアルゴリズムを起こし(Webに豊富なサンプルがあると思います)ASM形式に移植する方法はどうでしょうか? ○まずは簡単なASMサンプルをアセンブル(Cで言うところのコンパイル)して実行できる一連の手順を憶える。 ○ASMの作法を学ぶ。2,16進数の理解、CPUのレジスター構成、ニーモニック(命令)、スタックの仕組み(PUSH&POP)、PC(プログラムカウンター)の仕組みなど。 *:プログラムはどれでも(どの言語も?)似たような構造をもっています。プログラムの最小に分けると「代入」「比較」「繰り返し」の構造が見えてくると思います。

参考URL:
http://www.arch.cs.kumamoto-u.ac.jp/project/kite/kiteasm/
youhimu
質問者

お礼

レスどうもです。 とにかく頑張ってやって見ますw WEBの方も参考にさせていただきますね。

その他の回答 (4)

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.4

No.2のarukamunです KITEASMを使ってという事ですね。 検索サイトでKITEASMで検索すると、結構ヒットしますので、サンプルや仕様を確認しましょう。 >とりあえず、アセンブラ自体があまり分かってません(汗) フローチャートを書いて、見る事をお勧めします。 高級プログラミング言語で解る言語はありますか? 例えばBASIC、C言語、Javaなど。

youhimu
質問者

補足

レスありがとうございます。 一応C言語は分かります(Cだったら多分解けます) 分からないのは、アセンブリ言語としてのプログラムの起こしかたです。 とりあえず、資料が少なくて理解ができません(汗)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

(1)素数は無限にあることが証明されていたと思います。しかし計算時間も限りあるコンピュター世界のことですから、いくら以下の素数と言う風に限定せねばなりません。 http://www.hokuriku.ne.jp/fukiyo/math-obe/eratosu.htm (2)整式等数式で全ての素数を計算する式はまだ発見されていなかったと記憶しています。 (3)それで古くから知られている「エラトステネスの 篩(ふるい)」というアルゴリズムでやらざるを得ないでしょう。(エラトステネスは古代ギリシャの数学者の名前に因む) (4)「エラトステネスの篩(ふるい)」はこの語句でWEB検索すれば沢山出てきます。私がやると915件とか。 VBでの例が載っています。 http://www.arch.kumamoto-u.ac.jp/hagane/yamanari/joho2/kougi3.html (5)アセンブリ言語って、CPUの系統でそれぞれ異なり、種類が沢山あります。それのどれを記さないでソースを教えろと言うのは、不充分です。 色んなコンピュタ機種の経験者がこのOKWEBの質問を見ているはずですから、ご質問者がひょっとして当然と思っているインテル86系以外で答えが出たら無駄になります。

youhimu
質問者

お礼

返信ありがとうございます。 内容については了解しました。 とりあえずは、CPUの系統を調べてみて質問しなおさせていただきます。

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.2

素数を求めるアルゴリズムが解らないのでしょうか。 それともアセンブラが解らないのでしょうか。 アセンブラも沢山あるので、6502アセンブラとか8086アセンブラとか、名前は解りますか。 解らないのであれば、プログラムを書くことが出来ません。それぞれ固有の命令を持っていますので。 因みに素数を求めるアルゴリズムで有名なのは「エラトステネスのふるい」です。 「エラトステネスのふるい」をキーワードに検索してみるのも手だと思います。

youhimu
質問者

お礼

返信ありがとうございます。 とりあえず、アセンブラ自体があまり分かってません(汗) エラトステネスのふるいのことは私自身調べて理解していたのですが、それをプログラムとして立ち上げることができないのです・・・。 とりあえず、使う環境としてはKITEマイクロプロセッサ上で動かすことができるということなのですが・・・。

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

アセンブリ言語と言ってもいろいろあるので、 (1)どういう環境(PCの種類、CPUの種類、OS)で、 (2)どういう処理系か(MASMか、CASLか、Gnuアセンブラ等) を書いてくれないと。 そうしたらアセンブラの偉い人が答えてくれるかもしれません。

youhimu
質問者

補足

了解しました。 現在、「マイクロプロセッサの行動原理」というものを習っていてKITEマイクロプロセッサ使っています。 OSはLINUXでKITESIM、KITEASMを使って作成せよとのことでした。 ・・・すいません、後は良く分かりません(汗) 極めて初心者ですといって逃げたくはないのですが、処理系とかどれのことをいっているのでしょうか? ってなぐらいに分からないことだらけです。

関連するQ&A

  • アセンブリ言語は原始プログラムですか?

    質問(1) アセンブリ言語というのは、 add $S1, $S2 みたいなやつですよね? wikipediaで「ソースコード(ソースプログラム、原始プログラム)」の注釈1,2を読むと、 注1:【機械語の命令に記述するアセンブリ言語(アセンブラ)が存在するが、このアセンブラ用の文字列で記述されたプログラムはソースコードとは呼ばれないのが普通である。】 注2:【アセンブリ言語で書かれたプログラムはソースコードと呼ばれない】 と書かれてあります。 でも、 他の教材では アセンブリ言語で書かれたプログラム(原始プログラム) と書かれています。 どっちが正しいのでしょうか? 質問(2) 目的プログラム(オブジェクトプログラム)とは、 IT用語辞典によると 【オブジェクトプログラムとは、ソースプログラム(人間が認識できるプログラム言語で高水準言語など?)をコンパイラで機械語に翻訳したプログラムのことである】 とありますが、 ソースプログラムをコンパイラで翻訳するとアセンブリ言語になるんではないのですか? そのアセンブリ言語をアセンブラで翻訳して機械語になるのではないのでしょうか? どなたかご教授ください。 お願いします。

  • アセンブリ言語についてと言語の違いについて。

    高水準と低水準言語の違いは、まず、マシン語の2進数の羅列では分からないからアセンブリ言語が生まれ、 アセンブリ言語よりさらに人間が理解できる言語が、C言語やBASICなどでしょうか?教えていただけないでしょうか?合っていますでしょうか?

  • アセンブリ言語について。

    アセンブリ言語がアセンブラ&実行出来るサイトを知らないでしょうか?また、アセンブリ言語のプログラムが載っているサイトを知らないでしょうか?教えて頂けると幸いです。

  • アセンブリ言語について。

    2進数の羅列では人間にはあまりに読み書きしにくいからです。 それを命令単位に区切って、英単語を元にした名前を与えたのが、アセンブリ言語です。 ニーモニックとは、その命令の名前の事です。とはどういう事でしょうか?教えていただけないでしょうか?すみません。 push %ebp mov %esp,%ebp and $0xfffffff0,%esp sub $0x10,%esp mov 0xc(%ebp),%esp : というプログラムで、オペランドが、%ebpなどがそうなのでしょうか?で、このプログラム言語自体をアセンブリ言語というのでしょうか?また、なぜ、低水準言語というのが存在しているのでしょうか?教えていただけないでしょうか?すみません。

  • アセンブリ言語を学ぶことは意味がありますでしょうか。

    アセンブリ言語を学ぶことは意味がありますでしょうか。 プログラミングの上達や理解を深めるためにアセンブリ言語を学ぶ意味はありますでしょうか。 C++を学ぶとプログラミングの上達や理解は確かに深まりましたが、アセンブリ言語はどうでしょうか。 アセンブリ言語でポインタの意味が分かったと言う人もいますし・・・。 また、アセンブリ言語で役立つことがあれば何でも教えてください。

  • アセンブリ言語の書き方が分かりません。

    アセンブリ言語の書き方が分かりません。 R0が示す番地以降のR2が示すバイト数をR1が示す番地以降に転送 これをアセンブリ言語で書くにはどうしたらいいでしょうか? 教えてください。

  • アセンブリ言語の参考になる本

    こんにちは。 初心者でもアセンブリ言語に関しての本で参考になる書籍はないでしょうか? 動機は、アセンブリが全ての言語に通じるものがあり知識を深めるとプログラムの理解を深めるのに助かると聞いたからです。 私のような初心者でも理解ができより深く学べるお薦めの書籍はないでしょうか? よろしくお願いします。

  • アセンブリ言語プログラムの課題

    先日アセンブリ言語プログラムについての課題が出て、プログラムコードを書くことはできたのですが、「考察」の欄で詰まっています。 ここの過去の質問(http://oshiete1.goo.ne.jp/qa3089577.html)も見てみたのですがよく分かりません。 どのようなことを書けばいいのでしょうか? 「高級言語と違う点」とかでしょうか・・・。

  • アセンブリ言語とC言語

    アセンブリ言語とC言語について調べているのですが、この二つ言語のプログラムについて実質的に同じと言えることはなんでしょうか? また異なっていることはなんでしょうか?(たとえばアセンブリは低級言語であり、C言語は高級言語であるなどなんでもいいです。) 是非解答お願いします。

  • アセンブリ言語について

    今の時代にアセンブリ言語について質問することをを許しください。 今大学生ですが、どうしてもアセンブリを理解して基礎を固めたいのです。 質問は下に示すページです。 http://wisdom.sakura.ne.jp/programming/asm/assembly22.html ここの最初のdos画面について。 レジスタを使わずに、メモリ間転送を連続したストリング操作で行っていますが、この例だと最初に "Kitty on your lap" という文字をオフセット200から設定しています。 そして、この文字列をオフセット300にコピーするようプログラムを組んでいますが、レジスタCX(カウントレジスタ)に11を設定しています。 CXに設定された回数コピーを行うため、このプログラムでは11回のストリング操作によるコピーを行っていると理解していますが、ここで疑問なのは"Kitty on your lap"がどう考えても11文字ではありません。 そして、疑問が消えないまま実行してみると正確に動作しました。(コピーされました。) なぜ11を設定し、正確に動作するのかを教えていただけると幸いです。よろしくお願いいたします。

専門家に質問してみよう