• 締切済み

64bitアセンブラ

NASKなどのコンパイラで64bitのマシン語を扱うことは可能でしょうか? 64bitの命令も知らないので書籍も探しています。 もし64ビット命令?を使ったHellow Worldが書ける方、サンプル見てみたいです。 64bitならではの簡単な計算の仕方も知りたいです。

  • roox2
  • お礼率1% (1/79)

みんなの回答

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

(アセンブラならともかく)NASKという「コンパイラ」は知りませんが... > 64bitのマシン語を扱うことは可能でしょうか? 「64bit」とは何のことでしょうか? そもそも環境は? > Hellow Worldが書ける方 CPUだけでなく、周辺デバイス等、ハードウェア構成に強く依存します。 やはり、まずは環境ですね。

関連するQ&A

  • 32bit、64bitコンパイラーでコンパイルした場合の数値計算の実行

    32bit、64bitコンパイラーでコンパイルした場合の数値計算の実行速度について質問です。 CPUは、Core i7(64bitCPU)、 コンパイラーは、インテルC++コンパイラーVer.10 double(64bit長)型の大規模な数値計算を想定します。 このとき、 IA-32用としてコンパイルして、Windows7 Pro.32bit 上で計算させた場合と Intel64用としてコンパイルして、Windows7 Pro.64bit 上で計算させた場合とでは、 計算速度に差がでますでしょうか? 実行ファイルは、OSを通さずにCPU上でネイティブ実行されると理解しているので、 両方とも、64bitCPU上では、double(64bit長)型の計算なので差は出ないのかな?と思っています。 #Windows7を 32bitにするか64bitにするか(どちらをDSP版で購入するか)で迷っています。 #ご意見をお願いします。

  • PDP-11のアセンブラ課題

    学校の課題で出されたものです。 まだ勉強をはじめたばかりでどこから手をつけていいのかわかりません>< ○PDP-11のアセンブラは、MOV#1,R2を次のような2語の機械語に翻訳する。PDP-11は、これをど  のように解釈し、どのように実行するのか説明せよ 0001010111000010 0000000000000001 ○PDP-11のMOV命令を使用し、以下の命令のアセンブリ言語表現、機械語表現を示せ。 ・R5が示すアドレスにジャンプする命令 ・サブルーチンから戻る命令 ・R0をスタック上にプッシュする命令 ○次のプログラムをPDP-11のアセンブリ言語で作成せよ。 ・R0が示す番号以降のR2が示すバイト数をR1が示す番号以降に転送 ・R1(上位16ビット)R0(下位16ビット)が示す符号付32ビット値を符号反転 宜しくお願い致します。

  • アセンブラwordという単位

    アセンブラでwordという単位がよく使われるそうですが、wordという単位は他でも聞いたことがあるようなきがしますがよく覚えていません。そこでは1バイト1ワードだったような気もします…。 アセンブラでは一般的に、2バイト1ワードらしいのですが、その根拠がよく分かりませんでした。 もしかしたらマシン語が1命令2バイトで表せるからかなーなどと推測したのですが、どうでしょう。 あと、4バイトの場合dwordと表現するようですが、64ビットCPUが出てきた現在、それ以上の表現もあるのかなーなどと思っています。 質問は以下です。 ・dwordより大きい単位はあるか(あればその内容) ・2バイト1ワードの根拠は何か よろしくお願いします。

  • コンパイラオプション? VC2005設定?

    Visual Studio 2005で MFCを使って、πの計算や、大きな桁の計算を高速で行う為に、64bitのコードを生成したいのですが、普通にコンパイルするとRelease Win32でコンパイルされると思います。 設定方法について詳しく書かれているサイトや書籍をご存じの方教えて下さい。 make出力は可能なのでしょうか? VC6にあったような・・・ コンパイラオプション? 環境 マシン Xeon 64bit Windows Vista Ultimate VS2005 C++ MFCアプリ

  • 32bitでコンパイルするには

    お世話になっております。 CentOSの64ビットマシンを使っています。 C言語の簡単なサンプルとして、ポインタ変数の長さを表示するプログラム(sizeof(ポンタ変数)をprintf)を作りました。 これをコンパイルして実行すると8と表示されますので、64bitとアプリケーションとしてコンパイルされたのだろうと思います。 次に32Bitアプリケーションとしてコンパイルするために-m32オプションを付けてコンパイルしたところ、以下のとおりエラーが出てしまい困っております。 gcc -m32 -o sample sample.c /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.4.7/libgcc_s.so when searching for -lgcc_s /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.4.7/libgcc_s.so when searching for -lgcc_s /usr/bin/ld: cannot find -lgcc_s collect2: ld returned 1 exit status 解決方法について教えていただければ幸いです。 コンパイラは、gcc-4.4.7-3.el6.x86_64をインストールしています。 よろしくお願いします。

  • アセンブラ言語で

    「乱数」を示す命令語をご存じの方おりませんか。 知っている方がおりましたら教えてください。

  • アセンブラの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ビットとする。

  • なんで64bit化は進まないの?

    Vistaが出てから1年半です。XP64bitエディションが出てからだともっと経つ事になります。 すでに4GBメモリを搭載したマシンも出始めているのに、一向に64bitが普及しないのはなぜなのでしょうか?32bitOSだとメモリは実質3GBちょっとしか使えませんもんね。 そりゃ対応ソフトが少ないから、店頭販売パソコンで64bitは無いからと言うのは分かりますが、逆に言えばメーカーの方が売る気が無い、やる気が無いからだとも言えます。 そもそもメーカー側にしてもユーザーにしてもなんで64bit化に誰も積極的では無いのでしょうか? すでに私は64bitマシンを買ってしまいました。最先端の良いものを買ったのに、何か後悔した気になってしまい悲しいです。

  • Linuxでforkやalarm,wait,waitpid,syscallなどを使ったサンプル

    今までWindowsのPerlを使っていました。 forkやalarm,wait,waitpid,syscallなど使ったことがなく、 LinuxのPerl5.8でそれらの関数を習得したいのですが、 何か良いサンプルはありますか? これに特化した書籍も探しています。 今作りたいものは、 forkで10個プロセスを作成して、ループし、 以下それぞれhello worldを表示させ終わったら、 1個目は終了しました。 2個目は終了しました。 ・・・ 10個目は終了しました。 終わり。 と表示させるプログラムが作りたいです。 fork,alarm,wait,waitpid,syscallなどプロセス操作、システムコール関数を全て使った良いサンプルも探しています。 ------------------------------------ それぞれのhellow word 1個目は 5秒後に hello worldを表示させる 2個目は10秒後に hello worldを表示させる ... 10個目は50秒後にhello worldを表示させる を使いますが、今まで

    • ベストアンサー
    • Perl
  • MIPSアセンブラの問題です。

    現在参考書で勉強しているのですが。 「2の補数表現の整数の絶対値を求める最短のMIPS命令ステップを示せ、下記の命令をMIPSで変換してみよ abs $t2,$t3」 この問題にてこずっています; シフト命令がまだ出てきていないので、私が考えたマイナスだったら1ビットずつシフトを使い変数にコピーし条件分岐で1であれば0を、0であれば1を違う変数にどんどんつめていけばいいんじゃないかっていう方法が取れません(私の考えた方法はすごく効率が悪いと思っています;) どなたかお分かりになる方、教えてください。

専門家に質問してみよう