• ベストアンサー

アセンブリ言語について

アセンブリ言語でプログラムを構築するに当たって「xの最初のmビット、yのnビット、xの次のmビットの順で左詰で結合した 2m+nビットで、その右側は0」というプログラムを作りたいのですがどうすればいいですか?

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

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

> どうすればいいですか? そういうプログラムをC言語か何かで書いて、コンパイラに出力させたら? まともに答えて欲しいのであれば、 ・CPUの種類 ・「最初のmビット」「次のmビット」はLSB側から見てか、MSB側から見てなのか ・「yのnビット」はyのどの位置から取るのか などの情報が必要でしょう。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

「困り度」が最大で、ここまでお礼無しってことは、学校から出された課題ということね。 質問のレベルといい、何をやって良いか解らないことといい、レベルの低い人間だということだけがわかるわ。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

CPUなんてどうでもいいが(仮想CPUで表現出来るため)、 > 「xの最初のmビット、yのnビット、xの次のmビットの順で左詰で結合した 2m+nビットで、その右側は0」 の意味がサッパリわからない。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • アセンブリ言語にて、

    アセンブリ言語にて、 「乗算Z←X×Yを、 ビットシフト(ROT命令ほか)で用いた計算手順と、 加算(ADD命令)の各長所、短所を比較しなさい」 という問題の答えがわかりません・・・ 教えていただけませんか?

  • SPARCアセンブリ言語

    以下のC++でかかれたコードをSPARCアセンブリ言語に変換したいのですが、なかなかうまくいきません。 C++ main () { int x, y=0; for(x=2;x<=10;x=x+3) { y=y+(x/3 + 4); } x = x * 3; よろしければSPARCでの書き方を教えて下さい。

  • 64ビットWindows上でアセンブリ言語

    こんにちは。 現在、OSは現在、64ビット版のWindows7を使っています。 このWindows7上で、アセンブリ言語によるプログラミングを行いたいと思っています。 どうして今頃アセンブリ言語なのかといいますと、会社の研修で、C言語による組込みソフトウェア開発を学ぶ際に、アセンブリ言語も学習するらしいので、少し予習してみようと思いました。 そこで、64ビット環境でも動作するアセンブラを探してみたのですが、 なかなか見つからず、困っています。 ネット上の情報を頼りに色々と試したのですが、作成した実行ファイルをいざ実行しようとすると、「64ビット環境では動作しない」といった内容のメッセージが出たりして、 どうしても動作してくれませんでした。 64ビット版のWindows上で、アセンブリ言語によるプログラミングができている方がいらっしゃれば、どうやってできたのかを、是非教えて頂きたいです。 必要であれば、インストールすべきソフトウェアの一覧と、環境設定方法なども、簡単に説明して頂ければ、大変助かります。 あと、動作確認を行う簡単なサンプルプログラムも、提示して頂ければ大変助かります。 (なにせ、アセンブリ言語に関する知識がゼロなものですので。) では、よろしくお願い致します。

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

    >2進数の羅列では人間にはあまりに読み書きしにくいからです。 >それを命令単位に区切って、英単語を元にした名前を与えたのが、 >アセンブリ言語です。 ニーモニックとは、その命令の名前の事です。 簡潔に要点がまとまっている、すばらしい説明ですね。その通りです。 これで理解できないなら、追加の説明のしようがありません。 (なお、このように、他人の発言は引用符を付けて引用すると、わかりやすくなります。是非そうしてください。) まあ具体例を挙げるならこんな感じ。 (機械語データ) (アセンブリ言語) b8 57 61 6b 61 mov $0x616b6157,%eax 53 push %ebx 50 push %eax ba 04 00 00 00 mov $0x4,%edx bb 01 00 00 00 mov $0x1,%ebx b8 04 00 00 00 mov $0x4,%eax 89 e1 mov %esp,%ecx cd 80 int $0x80 58 pop %eax 31 c0 xor %eax,%eax 5b pop %ebx c3 ret 人間がCPUを直接動かすプログラムを書こうとするとき、アセンブリ言語を使って書きます(右側の部分)。 mov $0x616b6157,%eax push %ebx push %eax mov $0x4,%edx mov $0x1,%ebx mov $0x4,%eax mov %esp,%ecx int $0x80 pop %eax xor %eax,%eax pop %ebx ret そしてこれをアセンブルすると、1対1対応した機械語のデータ列が出来ます。 それが b8 57 61 6b 61 53 50 ba 04 00 00 00 bb 01 00 00 00 b8 04 00 00 00 89 e1 cd 80 58 31 c0 5b c3 この部分。 機械語には改行なんてありませんから、実際は一連の b8 57 61 6b 61 53 50 ba 04 00 00 00 bb 01 00 00 00 b8 04 00 00 00 89 e1 cd 80 58 31 c0 5b c3 と言うデータ列になります。 これをCPUが実行していきます。 相当熟練した人で無ければ、このデータ列を見るだけでプログラム構造を理解する、というわけに行きません。 なので、人間が機械語レベルでプログラミングする際には、アセンブリ言語を使います。 ※この回答のプログラムはこちらから引用しました。 >31バイトでつくるアセンブラプログラミング アセンブラ短歌の世界 >https://book.mynavi.jp/support/pc/4946/c01_assembra.pdf で、機械語データは、なぜ、0と 1だけではないのでしょうか?教えていただけないでしょうか?すみません。

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

    今の時代にアセンブリ言語について質問することをを許しください。 今大学生ですが、どうしてもアセンブリを理解して基礎を固めたいのです。 質問は下に示すページです。 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を設定し、正確に動作するのかを教えていただけると幸いです。よろしくお願いいたします。

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

    今の時代にアセンブリ言語について質問することをを許しください。 今大学生ですが、どうしてもアセンブリを理解して基礎を固めたいのです。 質問は下に示すページです。 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を設定し、正確に動作するのかを教えていただけると幸いです。よろしくお願いいたします。

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

    (機械語データ) (アセンブリ言語) b8 57 61 6b 61 mov $0x616b6157,%eax 53 push %ebx 50 push %eax ba 04 00 00 00 mov $0x4,%edx bb 01 00 00 00 mov $0x1,%ebx b8 04 00 00 00 mov $0x4,%eax 89 e1 mov %esp,%ecx cd 80 int $0x80 58 pop %eax 31 c0 xor %eax,%eax 5b pop %ebx c3 ret で、右側のアセンブリ言語のニーモニックとオペランドについて解説していただけないでしょうか?すみません。

  • アセンブリ言語の初歩的な質問です

    xを入れたらx!を返すような階乗のプログラムをアセンブリ言語で作りたいので、頑張っているのですが ADD EAX EBXとすればEAX=EBX+EAXという足し算になりますよね。 そこで掛け算を行うようなものを入力したいのですが EAX*EBXは(掛け算は) MUL EAX EBX とすればいいのでしょうか?

  • ポケコン(Z-1GR)でのアセンブリ言語の記述方法について。

    ポケコン(Z-1GR)でのアセンブリ言語の記述方法について。 いつもお世話になっております。 小生、只今Z-1GRというポケコンを使用し、x86のアセンブリ言語を習得しようとしています。 そこで、先輩方に質問なのですが、私のもっている3種類のポケコンでアセンブリ言語を入力する際、必ず先に使用するメモリの量を指定しなければいけません。 かといって、私の今のスキルでは、どのくらいのプログラムの量になるかはわかりませんので、最初に指定するメモリの量もわかりません。 先輩方はこのような時、まず、紙などにプログラムを書き、それでメモリの量などを計算していらしたのでしょうか? それとも、最初から各ニーモニックを機械語に変換した際のバイト数を把握した上でメモリ量を指定されていたのでしょうか? 私はまだまだ、ニーモニックから機械語に変換するスキルを持っていないので、先に紙に書き、書いたニーモニックを機械語に自分で翻訳し、プログラムのバイト量を計算しようと思っています。 この方法以外にも、ポケコンでアセンブリ言語をプログラムする際の便利な考え方があればご教示願います。 お忙しい中申し訳ございませんが、先輩方ご教示宜しくお願い致します。

  • アセンブリ言語の質問のコト

    アセンブリ言語で、最大公約数を求めるプログラムを つくらなければならないんですが、 まぁ...だいたいできたんですが...ちょっとわからないトコが ありまして... acc(アキュムレータ)にはいってるデータが、負のバアイに、 それを正にかえたいんですが、どうしたらいいんでしょう? ビット反転さして、1足したらいいんじゃないか、ってのを思いついたんですが、 (これもあってるのかどうか自信ないんですけど...) ナンカ、反転さす命令がないみたいで...がっくシ... ということで、だれかお力ゾエをおねがい致しまス。 必要かどうかワカリマセンが、とりあえず、 ちょっとだけ命令を以下に挙げておきます。 (たしか、アセンブリ言語って、それぞれ違うっていっても、どれも結構  似てるんですよね...ぼくの頼りない知識がタシカなら...) ADD,SUB,INC,DEC,OR,EOR,AND,NOT, LSL,ASL,LSR,ASR,ROL,ROR,SWP JP,JPc,JPz,JPs,JPv,JP,JP,Call,Ret,