• 締切済み

アセンブリ言語のプログラム方法がわかりません!!

アセンブリ言語の問題です。 スタックを使って、接尾辞(Postfix)で数式を計算するプログラムを作ってください。 足し算(add)、引き算(subtract)、掛け算(multiply)は二進化十進表現で計算します。 足し算は'+', 引き算は'-', 掛け算は'*',そして終了を'$'で表します。 計算は8-bitの2の補数をつかって行います。 例えば、 expression: .db 3,9,4,6,'+','-',2,'-','+','$' push 3,9,4,6 (stack: 6 4 9 3) pop 6 and 4, add, push 10 (stack: 10 9 3) pop 10 and 9, subtract, push -1 (stack: -1 3) push 2 (stack: 2 -1 3) pop 2 and -1, subtract, push -3 (stack: -3 3) pop -3 and 3, add, push 0 (stack: 0) pop the 0 into register r0 and stop. というような計算を実行するプログラムを作ってください。 よろしくお願いします。 できればAVR studioを使ってプログラミングしてほしいです。

みんなの回答

回答No.1

ソフトハウスなどに発注すればいかが?

air00air
質問者

お礼

回答ありがとうございます。 その方法も選択肢に入れて考えてみます。

関連するQ&A

  • java

    大学で、javaをやっているのですが、わからないので、教えてください。内容は以下のことです。 LinkedListを使用して、Stack Calculatorを作成する。以下のように出力させる。 Commands: push n, add, sub, mult, div, clear, or quit. ? push 4 4.0 ? push 3 3.0 4.0 ? push 2 4.0 3.0 2.0 ? mult 6.0 4.0 ? add 10.0 ? clear empty ? quit Thanks for using the Stack Calculator. ちなみにStackCalculatorクラスは、以下のメソッドを持つ void push(double x) double x pop() double add() double subtract() double multiply() double divide() void clear() double[] getValues() int size() getValuesメソッドは、LinkedListのtoArrayメソッドを使用する。

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

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

  • コンピュータはなぜ減算ができないのか?

    たとえば コンピュータでは2-1を補数を利用して計算します。 しかし、繰り下がりの概念があれば以下のように 直接計算できるはずです。    0010 -) 0001 -----   0001 元々コンピュータには、繰り下がりに対応する演算回路が ないので、引き算が足し算のように簡潔にできない と思ってよいのでしょうか? また、掛け算は足し算のループを利用して計算しているのでしょうか? 割り算は、2の補数(ビット反転+1)の引き算をループさせて実現しているのでしょうか? ということは、計算のうち割り算が一番時間がかかると思ってよいのでしょうか?

  • 十進ベーシックの組み込み関数の式の計算方法を知りたいです。

    十進ベーシックの組み込み関数の式の計算方法を知りたいです。 よろしくお願いします。 十進ベーシックを使用しています。 まだ初心者です。 その中にcosとか、sinとかsqrなどの組み込み関数がありますが、 ベーシックの裏で、cosは足し算、引き算、掛け算、割り算のみをもちいて、 どのようにcosの計算をしているのか知りたいと思います。 他の関数を自分でつくるときの参考にしたいと考えています。 どなたか、組み込み関数は実際にどのように計算されているのかご存知であれば、教えてください。 よろしくお願いします。

  • アセンブリ言語

    アセンブリ言語で『筆算的加減算』でプログラムを作成する演習問題が出ました。4月から習い出し全くわからないので参考にさせて頂きたいです。 実行例は⬇️ 1→123 2→456 計算→+  123 +456 --------  579 条件は 入力する2個の整数は正(+)のみとする。 入力する整数の桁数は3桁以内。 足し算は+、引き算はマイナス-を入力する。 負の値は入力しないが、結果の負('-')は表示する。 入力のエラー処理を行う。

  • 平方根の計算

    平方根の計算の入門編です。 平方根の掛け算はできるのになぜ足し算・引き算はできないのでしょうか。 √2×√3 = √6なのに √2+√3 = √5 になりません。 これまで、数字の計算は足し算引き算かけ算割り算で計算する、と習ってきました。 √がつくとかけ算割り算はできるのに足し算引き算ができません(やってはいけない)また、ルールということはわかりますが、どういうルールなのでしょうか。

  • このプログラムが実行できません。

    スタックの動きを再現するプログラムを作ったのですが、エラーがでます。プログラムは以下に示します。 メインクラス public class mainStack { public static void main(String[] args) { StackTest stack=new StackTest(); stack.push("AAAAA"); stack.push("BBBBB"); } } スタックのクラス import java.util.ArrayList; @SuppressWarnings("unchecked") public class StackTest implements Stack { ArrayList list=new ArrayList(); public int AA=0; public boolean empty() { if(list.isEmpty()==true){ return true; } else{ return false; } } public void pop() { list.remove(AA); AA--; } public void push(String element) { list.add(element); AA++; } public void top(){ System.out.println(list.get(AA)); } } 何故かlist.add()のところにエラーが出てしまいます。是非分かる方解答お願いします。

    • ベストアンサー
    • Java
  • 掛け算とは?

    2×3=6など 掛け算をどのような計算だと定義してますか? 上の例でなぜ6という答えがでるのか言ってみてください。 ついでに足し算・引き算と掛け算・割り算を切り離して 定義してますか?それとも足し算・引き算の延長として 掛け算・割り算を定義してますか? 掛け算を教えてほしいんじゃなくて みなさんの考え方をちょっと知ってみたいだけです。

  • C言語で変更していただきたい所があるのですが・・・

    下のソースを加減乗除だけでなく、余りを求める演算(%)やべき乗演算(^)も使えるようにしたいのですがうまくいきません。 どなたか変更例をお見せできますでしょうか? #include <stdio.h> #include <stdlib.h> #define STACK_MAX 10 /* 配列によるスタック構造 */ double stack[STACK_MAX]; /* スタック頂上の位置(最下部からのオフセット)*/ int stack_top = 0; /* スタックへのpush */ void stack_push(double val) { if(stack_top == STACK_MAX) { /* スタックが満杯になっている */ printf("エラー:スタックが満杯です(Stack overflow)\n"); exit(EXIT_FAILURE); } else { /* 渡された値をスタックに積む */ stack[stack_top] = val; stack_top++; } } /* スタックからpop */ double stack_pop(void) { if(stack_top == 0) { /* スタックには何もない */ printf("エラー:スタックが空なのにpopが呼ばれました" "(Stack underflow)\n"); exit(EXIT_FAILURE); return 0; } else { /* いちばん上の値を返す */ stack_top--; return stack[stack_top]; } } int main(void) { char buffer[256]; double cal1, cal2; int i; do { printf("現在のスタック(%d個):", stack_top); for(i = 0; i < stack_top; i++) { printf("%0.3f ", stack[i]); } printf("\n>"); fgets(buffer, 255, stdin); switch(buffer[0]) { case '+': cal1 = stack_pop(); cal2 = stack_pop(); stack_push(cal2 + cal1); break; case '-': cal1 = stack_pop(); cal2 = stack_pop(); stack_push(cal2 - cal1); break; case '*': cal1 = stack_pop(); cal2 = stack_pop(); stack_push(cal2 * cal1); break; case '/': cal1 = stack_pop(); cal2 = stack_pop(); stack_push(cal2 / cal1); break; case '=': /* =の場合はこのすぐあとでwhile文からも抜ける */ break; default: /* 入力された値は数字のはずなので,スタックに積む */ stack_push(atoi(buffer)); break; } } while(buffer[0] != '='); printf("計算結果は%f です。\n",stack_pop()); if(stack_top != 0) { printf("エラー:スタックにまだ数が残っています\n"); return EXIT_FAILURE; } return EXIT_SUCCESS; }

  • 計算の順序 a×b÷c

    小学生の算数で, たし算,ひき算は,かけ算,わり算より先 たし算と,ひき算が,又は,かけ算,わり算が, 複数ある時は,普通,左からと習います。 しかし, たし算だけ, かけ算だけなら,どこからでも計算できます。 a×b÷c は,b÷cを先に計算することは,できますか? いくつか,問題を作って解いてみましたが, a×bを先に計算した時と,答えが同じになりました。 よろしくお願いします。

専門家に質問してみよう