• ベストアンサー

アセンブラ言語の数字を数値に変換するプログラム

LD GR3,GR1 ;GR3にGR1の数字を入れる。 AND GR3,=#000F ;数字を数値に変換 というアセンブラのプログラムがあったのですが、なぜGR3と16進数#000Fの論理積をとることで数字を数値に変換できるのでしょうか。 それと、ここでいう数字、数値の違いとは、数字の1はコンピュータ上では 49という数値に変換される(アスキー文字)という認識でよろしいでしょうか。

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

  • ベストアンサー
回答No.1

2進数で表したときの下4桁だけが残ることになるからです。 アスキーコードでは、数字の「1」は、10進で49、16進で31です。 16進の31を2進数に直すと、0011 0001です。 これと16進のOF、つまり2進の0000 1111と論理積をとると、0000 0001となり、数値の1になります。

rinnshan
質問者

お礼

ご解答ありがとうございました。

関連するQ&A

  • 10進数を2進数に変換するプログラム

    このアセンブラのプログラムはIN命令によって3桁のレコードに入力された10進数の値を2進数に変換するプログラムです。 INPUT START                      (1) RPUSH                      (2) IN IBUF,ILEN ;レコードを入力       (3)     LD GR0,ILEN                (4) JMI FIN2 ;ファイルの終わり      (5) LD GR1,=0   ;けた数のカウンタ      (6) LD GR4,=0   ;数値の初期化        (7) LOOP2 LD GR3,IBUF,GR1               (8) AND GR3,=#000F ;数字を数値に変換      (9) LD GR5,GR4;ここから↓4つの命令はGR4を10倍する (10) SLL GR5,3;                   (11) SLL GR4,1;                   (12) ADDA GR4,GR5;                  (13) ADDA GR4,GR3                   (14) ADDA GR1,=1                   (15) CPA GR1,GR0                   (16) JMI LOOP2                    (17) LD GR0,GR4                   (18) FIN2 RPOP                         (19) RET ILEN DS 1 IBUF DS 256 END (8)のLOOP2 LD GR3,IBUF,GR1の命令なのですが、「これはIBUFとGR1のアドレスをたしてGR3にその内容を格納する。」という意味であり、その後(14)で10倍されたGR4にたしています。 質問としては、この2進数に変換するプログラムでGR3とGR4の役割を教えていただきたいです。 GR1はレコードの桁数に使われている領域だとわかります。 個人的な解釈としては、GR4はレコードに入力する10進数の数値なのですが、GR4をなぜ10倍すると2進数に変換されるのかなどやGR3の意味がわからないために全く理解できません。 よろしくお願いします。

  • CASL2の数値から数字への変換

    現在課題の方で文字列2と3を数値での加算結果を出力する。という問題をやっています。 文字列を数値に変換し加算出来たのですが、加算した数値を文字列に戻せませんどうすれば良いですか?問題は↓に書きます。 IN SAI,LEN1 IN NASU,LEN2 LD GR1,SAI ??? ???←空白 自分の答えOR GR1,MASK2 LD GR2,NASU AND GR2,MASK1 ADDA GR1,GR2 ??? ??? ←ここが分からない ST GR1,KAJI OUT KAJI,LEN RET SAI DS 5 LEN1 DS 1 NASU DS 5 LEN2 DS1 KAJI DS 5 LEN DC 1 MASK1 DC #000F MASK2 DC #0030 END 解説お願いします

  • アセンブラ言語で質問です。

    アセンブラ初心者です。質問があります。 メッセージで「アセンブラエラーはありません」 「リンク中 ラベル;GR1←#1000は未解決です」 とでます。どこが間違っているのかよくわかりません。どうぞ教えてください。 プログラムを下記します。 ;STARTとRET,ENDの動作 SAMPOO START LAD GR1,#1000 ;GR1←#1000 LD GR2,NUM ;GR2←NUM ADDA GR1,GR2 ;GR1←GR1+GR2 RET NUM DC 2 END

  • CASLII4桁の16進文字列を数値に変換するプログラム

    問 4桁の16進文字列を入力し、それを数値に変換してメモリ上に格納するプログラムを作成せよ。 PROGRAM START IN IBUF,LEN LAD GR1,0 LAD GR2,0 LOOP SLL GR1,4 LD GR3,IBUF,GR2 CPL GR3,='A' JMI NEXT ADDL GR3,=9←←← NEXT AND GR3,C000F ADDL GR1,GR3 LAD GR2,1,GR2 CPL GR2,=4 JMI LOOP ST GR1,ANS RET IBUF DS 4 LEN DS 1 C000F DC #000F ANS DS 1 END 上記の←←←の行は入力文字がA~Fの場合の数値の調整の為にあるらしいのですが、なぜ9を加算しているのか分かりません。ご理解のある方はお手数ですが教えて頂けないでしょうか。よろしくお願い致します。

  • PIC 文字 を 数値に 変換

    アセンブラ言語(PIC)で、シリアルで受信した文字列数値を数値に変換したいのですが、どなたかプログラムを教えてくださいませんか?

  • アスキーコードから数字に変換

    アスキーコードで送られてきた4つのデータを数字に変換する方法を教えてください。 4つのデータはいっぺんに送られてくるのでアスキーコード文字数は16です。(ひとつのデータは4文字です) よろしくお願いします。

  • 数値を2進数文字列に変換するものなんですが・・・

    数値を2進数の文字列に変換するプログラムを関数として作成しているんですが、わからないことがあるのでお願いします。 char *itob(int value, int size, char binary[]) { int count = 0; /* binaryの添え字 */ int bit = size * 8; /* ビットになおす */ int mask = 1 << bit - 1; /* 先頭ビットに1を立てる */ /* 数値を2進数の文字列に変換する処理 */ do { if(value & mask) { /* valueとmaskのAND(論理積) */ binary[count] = '1';/* '1'を代入 */ }else { binary[count] = '0';/* '0'を代入 */ } value <<= 1; /* valueを左へ1ビットシフト */ count++; /* countを1たす */ }while(count < bit); /* 繰り返しを行う条件 */ binary[count] = '\0'; /* 最後に'\0'を入れる */ return binary; /* 変換した値を戻り値として返す */ } この前にもプログラムがありますが、コンパイルして実行する際に 10001 1110 と入力したら、 11111 という答えを出したいのですが、 これを実行すると、 00000000000000000000000000011111 となってしまいます。 これを11111とするためにはプログラムにどのような処理をすればよいのかわかりませんのでどなたかおわかりのかた解説をお願いします。

  • アセンブラの参考書(初心者)

    学校でアセンブラの授業を取る予定なのですが、どなたかアセンブラの参考書(日本語)でお勧めの本を教えてもらえないでしょうか?また、アセンブラについてのお勧めのウェブサイトがありましたら教えてください! プログラムはJavaを約1年学校で勉強した程度で、C言語の知識は全くありません。アセンブラも初めてなので、出来れば図などがあり初心者にも分かりやすく、ページ数も多いものを探しています。 ちなみに学校で使う予定の本は「Computer Organization and Design(Morgan K 3rd Edition)」で、内容は 1 Computer Abstractions and Technology 2 Instructions: Language of the Computer 3 Arithmetic for Computers 4 Assessing and Understanding Performance 5 The Processor: Datapath and Control 6 Enhancing Performance with Pipelining 7 Large and Fast: Exploiting Memory Hierarchy 8 Storage, Networks, and Other Peripherals On the CD: 9 Multiprocessorsです。 留学中ですので、この本と同時に日本語の参考書を使おうと思っています。内容はこの本の内容とかぶっているほどいいのですが(^^;)。 長くなってしまいましたが宜しくお願いします!

  • 情報数学の宿題助けてください。

    問6 8ビットのデータの下位4ビットを0にし、他のビットは変化させない論理演算はどれか。 ア 16進数F0と論理和をとる。 イ 16進数0Fと論理和をとる ウ 16進数F0と論理積をとる  エ 16進数0Fと論理積をとる 問7 8ビットのデータの左から4ビット目を1、他のビットは変化させない論理演算はどれか ア 16進数01と論理和をとる。 イ 16進数10と論理和をとる ウ 16進数01と論理積をとる  エ 16進数10と論理積をとる 問11 丸め誤差に関する記述として、適切なものはどれか。 ア 演算結果がコンピュータの扱える最大値を超えることによって生じる誤差である。 イ 絶対値のほぼ等しい数値の加減算において、上位の有効数字が失われることによって生じる誤差である。 ウ 浮動小数点数の下位部分が失われることにおいて、指数部が小さい方の数値の仮数部の下位部分が失われることによって生じる誤差である。 エ 数表現のけた数に限度があることによって、最小けたより小さい部分について四捨五入や切り上げ、切捨てを行うために生じる誤差である。 過程もお願い致します。

  • PICで温度計をつくりたいのですが。アセンブラを教えてください。

    初歩的な質問でもうしわけないのですが、 PIC16F819のPICを買いまして、CMOS温度センサーにオペアンプをかけ PA1につなぎ、A/D変換 PB0~7まで7セグを並列に3つつなぎ。 PA4,6,7から各ポートにトランジスタのBにいれ、Cに+5、Eに7セグのCOMをいれ 3桁の数字を表示させたいのです。 たしか、ダイナミックスキャンというものだと思います。 とりあえず、センサーから入ってきた数値をそのまま表示させたいのですが。 ダイナミックスキャンのアセンブラのプログラムがうまくいきません。 簡単に教えていただきたいのですが。 わかる方お願いします。 ハードは問題はないと思います。

専門家に質問してみよう