アプリ版:「スタンプのみでお礼する」機能のリリースについて

「Aレジスタに一文字のアスキーコードがあり、これを以下のように二進数に変換してBレジスタに代入する」
Aレジスタ='0’のとき、Bレジスタ=00000000B
Aレジスタ='A’のとき、Bレジスタ=00001010B

この例題に苦戦してます。。
16進数を2進数に変換するアセンブリ言語を教えてください!!

A 回答 (3件)

アスキーコードの値と、Bレジに欲しい結果を、一覧表にしてみよう。



'0'=30H→00000000B
'1'=31H→00000001B
'2'=32H→00000010B
  |
'8'=38H→00001000B
'9'=39H→00001001B
'A'=41H→00001010B
'B'=42H→00001011B
  |
'F'=46H→00001111B

さて、Aレジから単純に30Hを引き算したらどうなるだろう?

'0'=30H→00H→00000000B
'1'=31H→01H→00000001B
'2'=32H→02H→00000010B
  |
'8'=38H→08H→00001000B
'9'=39H→09H→00001001B
'A'=41H→11H→00010001B
'B'=42H→12H→00010010B
  |
'F'=46H→16H→00010110B

'0'~'9'までは、目的の値になった。しかし'A'~'F'は、値がズレている。

なので、30Hを引いて、引いた結果が10を超えてたら、もう少し余計に引いてやれば良い。

'A'=41H→11H→0AH→00001010B
'B'=42H→12H→0BH→00001011B
  |
'F'=46H→16H→0FH→00001111B

11Hを0AHにするには、いくつ引けば良いだろうか?

結果、プログラムは以下のようになる。

  Aレジから30Hを引く
  Aレジと0AHをコンペアする
  キャリーが出たら2行下の「ラベル:」に条件ジャンプ
  Aレジから07Hを引く
ラベル:
  AレジをBレジに代入する

あとは、上記の「日本語で書かれたプログラム」を「アセンブリ言語の命令ニモニック」に置き換えるだけ。

因みに、以下のようにすると1命令減りますが、こう解答すると、たぶん×を貰います。

  Aレジから3AHを引く
  キャリーが出たら2行下の「ラベル:」に条件ジャンプ
  Aレジから07Hを引く
ラベル:
  アドレス計算命令で[Aレジ+0AH]をBレジにロードする

蛇足だけど、カテ違いなので、こういう質問は
[技術者向] コンピューター > プログラミング > その他(プログラミング)
のカテに。
    • good
    • 0
この回答へのお礼

わかりやすい解説ありがとうございました!

お礼日時:2009/01/09 22:26

#1 でいわれるように, 「アセンブリ言語」は CPU の種類ごとにあるといっても過言ではないので書きようがありません.


6800 とか言われたらいやだなぁ.
    • good
    • 0
この回答へのお礼

質問が悪くてすみませんでした。。
ここでは計算機のCPUですた。。

お礼日時:2009/01/09 22:31

アスキーコードは16進で


“0” 30h
   ↓
“9” 39h
“A” 41h
   ↓
“F” 46h
ですから、先ずAレジスタが30h~39hか41h~46hかを判別し、前者なら30hを引き後者なら37hを引いてBレジスタに入れれば良いかと。
そうか、全部で16種類しかないので、Aレジスタが30hかどうかを見てそうならBレジスタに00hを代入、31hかどうかを見てそうならBレジスタに01hを代入…以下16回繰り返す。
または、変換表を作って引っ張ってくる方法もあります。

※CPUが不明なのでアセンブリ言語では書けません。
    • good
    • 0
この回答へのお礼

質問が悪くてすみませんでした。。
あらゆる考え方があるようですね。。

もうちょっと苦戦してみます!
回答ありがとうございました!!

お礼日時:2009/01/09 22:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!