org 144 db ' ' db '1' db '2' db '3' db '4' org 149 db ' ' db '9' db '1' db '1' db '5'に対して、結果は
アドレス | 内容 |
154 | ' ' |
155 | '1' |
156 | '0' |
157 | '3' |
158 | '4' |
159 | '9' |
数字'0'の文字コードは48、数字'1'の文字コードは49となっており、以降'9'まで順に1ずつ増える。したがって、数字の文字コードから48を引くと、その数字が表す数値を得ることができる。
6 * 15 + 3を逆ポーランド記法によって記すと
6 15 * 3 +となる。この計算の手順は以下の通りである。
また、演算子内置記法によって記した式
6 * 15 + 3 * 7の四則演算の優先順を考慮して逆ポーランド記法によって記すと
6 15 * 3 7 * +となる。この式の実行過程とスタックの様子を以下に示す。
式の評価 | 1 | 2 | 3 | 4 | 5 | 6 |
6 15 * 3 7 * + | ||||||
15 * 3 7 * + | 6 | |||||
* 3 7 * + | 6 | 15 | ||||
3 7 * + | 90 | |||||
7 * + | 90 | 3 | ||||
* + | 90 | 3 | 7 | |||
+ | 90 | 21 | ||||
|
111 |
逆ポーランド記法による計算式を評価して計算結果を求めるプログラムを作成せよ。
計算式は、文字データによって記されるものとする。すなわち、被演算データの5は'5'の1文字、10は'1'と'0'の2文字によって表され、演算子は、加算、減算、乗算、除算をそれぞれ文字'+', '-', '*', '/'によって表す。被演算データや演算子の間には空白' 'を置いて、被演算同士の区切りを表す。式の最後には、数値0を置く。
例えば、式
6 15 * 3 +は、アセンブリ言語プログラム中では以下の11バイトによって表される。
db '6' db ' ' db '1' db '5' db ' ' db '*' db ' ' db '3' db ' ' db '+' db 0逆ポーランド記法による計算式がアドレスA0(10進数の160)以降に格納されているとし、計算式にしたがって計算をした結果の上位8ビットをアドレスBE(10進数の190)、下位8ビットをアドレスBF(10進数の191)に格納せよ。 (計算結果を文字列に直す必要はない)