このアセンブラのプログラムは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の意味がわからないために全く理解できません。

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

2, 5, 3 という 3個の数字をこの順に読んだときに, あなたはどのようにしてこの数字の列が「253 という数値を表す」と理解

しますか?
    • good
    • 0
この回答へのお礼

2を100倍して残す、5を10倍して残す、そして、最後に、
3を含む三つを足します。

お礼日時:2009/05/27 23:58

そういうことだと思います.


123 と 10進文字列で書いてあると「人間には読みやすいけど計算には不向き」なので, 「内部表現としての 2進数」(つまり 123 という数値) に変換する, ということでしょう.
    • good
    • 0
この回答へのお礼

何度も何度も相談いただきありがとうございました。
今後の勉強も頑張っていきたいと思います。

お礼日時:2009/05/29 13:34

ここでやっているのは要するに


「123 という表現を, それが表す数値に変換する」
ということですね. 「10進数」とか「2進数」とかいう表現をしているために, かえって混乱されているのかもしれません.
    • good
    • 0
この回答へのお礼

つまり、123という表現が「10進数」であり
数値に変換すると「2進数」になるという見方でよろしい
のでしょうか。

お礼日時:2009/05/28 23:54

入力はおそらく"123"のような文字列なのでしょう。


「2進数」と言っているのはコンピュータの内部形式を指していると
推測されます。人間が分かる"123"は内部形式では(1111011)bです。
処理内容は左から1桁ずつ数値化し、10倍しながら加算するという
ことです。
A. "1"を数値の1にする(GR3←1)
B. 0(GR4の初期値)を10倍してGR3を足す。(GR4←1)
C. "2"を数値の2にする(GR3←2)
D. 1を10倍してGR3を足す。(GR4←12)
E. "3"を数値の3にする(GR3←3)
F. 12を10倍してGR3を足す。(GR4←123)
ループでなく記述すると以上のようになります。

この回答への補足

そのように処理が行われるということはわかりました。
しかし、このプログラムは10進数を2進数に変換する
プログラムです。(参考書にはそう書いてあります。)
nda23さんの言っていることを解釈すると、これは123
となった時点で2進数に変換されているということで
よろしかったのでしょうか?

補足日時:2009/05/28 22:13
    • good
    • 0

すみません, 意味が分かりません.


・「(10)~(14) でレコードに入力している」というのはどういう意味でしょうか?
・「命令(4)のLD GR0,ILENというもので、GR0に二進数を変換して入力している」とはどういうことでしょうか? 「二進数を変換する」と書かれていますhが, この「二進数」とはなんですか? そして, それを何に変換するんですか?
    • good
    • 0
この回答へのお礼

すみません。
理解不足でした。
私もプログラミング初心者な物で、文字列を入力することで二進数に
変換されるとは知りませんでした。

レコードは文字を入力する領域であり、10倍してGR3を足すことで
レコードに文字列が一つ一つ入力されているのだと思っていました。

そして、レコードに入力された10進数の数値を二進数に変換する
プログラムなので、命令(4)で変換されているのだと思っていました。

おそらく、下記の方が解答されていらっしゃる解釈で問題ないと
思います。3度もかまっていただき、誠にありがとうございました。

お礼日時:2009/05/28 20:29

そう, そしてその計算は


(2×10+5)×10+3
とすることができます.
(10)~(14) では結局
GR4 = GR4×10+GR3
という計算をしていることになります.
この 2つを見比べればわかるのではないでしょうか.
    • good
    • 0
この回答へのお礼

なるほど、(10)~(14) でレコードに入力しているのですね。

では、2進数に変換しているのは、LOOP2内での入力が完了したら
上記の命令(4)のLD GR0,ILENというもので、GR0に二進数を
変換して入力しているという解釈でよろしかったでしょうか。

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

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q10進数と2進数の少数の違いについて

10進数の0.1は 1/10 から計算できますが

2進数の0.1の10進法表記は1/2^1で計算して 0.5 ですよね。

整数の場合、10進数も2進数も例えば 1 の大きさはかわらないのに

なぜ少数になると大きさが2進数と10進数で変わってしまうのでしょうか?

 

Aベストアンサー

> 整数の場合、10進数も2進数も例えば 1 の大きさはかわらないのに
> なぜ少数になると大きさが2進数と10進数で変わってしまうのでしょうか?

例えに1を持ってくるから変なのでは?


2進数の10
10進数の10
の大きさが違う理由は説明できますか?

それと同じ理由になると思います。

Qコマンドgcc(あるいはcc),cpp,as,ldの機能を教えてください。

上記の通りなんですが、よろしくお願いします。

Aベストアンサー

cc は、C 言語のコンパイラです。C 言語でかかれたソースを実行形式のファイルに変換します。

cpp は、C 言語のプリプロセッサです。C では、コンパイルの中にプリプロセスという処理があり、
#include や #define 等の行を処理します。

as は、アセンブラです。プリプロセスされた C のソースを機械語(CPU が実行しやすい形)にします。

ld は、リンカです。C では、よく使われる機能をライブラリという形で、別に持っておくことが
できますが、それをくっつける処理を行います。

# マニュアルを読む方が早いと思うんですが、読んでも分かりませんか?

Q2進数→10進数

(1)2進数の0.101を10進数に
(2)2進数の1001.01を10進数に

解き方が全くわかりません。
どなたかよろしくお願いします。

Aベストアンサー

こんばんは。

たとえば、
1011 という2進数があるとき、
8の位が1
4の位が0
2の位が1
1の位が1
と考えます。
ですから、1011(2進数)= 8+2+1(10進数) です。
そして、位が1つ下に行くにしたがって、半分になるのですから、
小数点以下は、0.5の位、0.25の位、0.125の位・・・となっていくわけです。
私はこのことを説明するとき、よく
8円玉、4円玉、2円玉、1円玉、0.5円玉、0.25円玉、0.125円玉・・・
というふうに例えます。


(1)は、0.5円玉1枚、0.125円玉1枚なので、
0.5+0.125
です。

こう言われてみると、簡単でしょ?


以上、ご参考になりましたら幸いです。

QUnityのエラー「Rigidbody.AddForce(0,0,speed);」

UnityでJavaを書いています。
実行すると

Rigidbody.AddForce(0,0,speed);

上記の箇所にエラーがあると言われたのですが、
どこが問題なのかわかりません。

お分かりの方がいたら、ご教授ください。
その前後のコードも記載します。


//上矢印キーが押された場合
if(Input.GetKeyDown(KeyCode.UpArrow)){
//玉のZ軸に対して正の力を加える
Rigidbody.AddForce(0,0,speed);
}

//下矢印キーが押された場合
if(Input.GetKeyDown(KeyCode.DownArrow)){
//玉のZ軸に対して負の力を加える
Rigidbody.AddForce(0,0,-speed);
}

Aベストアンサー

Javaは凄くうっすらやった事がある程度なのですが、
こちらのサイトを参考にすると「Rigidbody.AddForce(」の後は
数字ではなく英語にて指示を記述しているので、そこを変えてみたら直るかも…?

http://openbook4.me/projects/161/sections/1045

Q10進数から8けたの2進数に変換

10進数から2進数への変換はわかるのですが
10進数から8桁の2進数への変換がわかりません。
仮に10進数の38を8桁の2進数に直す場合、どんな過程を経て、8桁の2進数になるのでしょうか。
どなたか教えていただけますと有難いです。
宜しくおねがいします。

Aベストアンサー

Windowsに付いてる電卓を、関数電卓にして
10進数から2進数への変換
8桁に統一したい場合は、
38=#100110=#00100110=%26(16進数)
これで良いと思いますよ。

PIC・AVRマイコンでは、こうやって使います。

      

QASP,net,cgi,javascript,php等の技術

ASP,net,cgi,javascript,php等の技術で、Webアプリケーションを開発するに当って
どれで作成したほうがいいですか?

機能としては、顧客管理、掲示板、グラフ表示、データベースアクセス等の機能を使います。

それぞれの言語で作成するあたって、長所と短所を頂けると幸いです。

Aベストアンサー

・ASP
確かに古いですが、まだASPで動いているサイトはけっこうあると思います。性能面はCGIよりはいいのではないでしょうか。
IISでしか動作しないのが欠点です。

・.net
よく知りません。確かに古いASPよりはASP.netの方がいいかもしれ
ません。最近少しみかけるようになりました。
拡張子 aspx のサイトはこの作りですね。

・cgi
効率が悪いのでやめた方がいいと思います。ただ、いまだに一番
よく使われていると思います。自身でサーバが管理できないプロ
バイダのサーバにおくような場合はこれ以外の選択肢はないかも
しれません。

・javascript
通常はクライアント側で使う言語ですが、サーバ側で使うことも
あり得ます。たとえば、ASPでは、VBScriptの代わりにJavaScript
を使うこともできます。使って何のメリットがあるかは、よくわかり
ません。たとえば、ASPではVBScriptを使った方が動作は早いと
思います。

・PHP
よく知りません。

・あとはサーブレット・JSPも候補にあげた方がいいですね。
特に欠点もなく、無難に何でもこなせると思います。

・ASP
確かに古いですが、まだASPで動いているサイトはけっこうあると思います。性能面はCGIよりはいいのではないでしょうか。
IISでしか動作しないのが欠点です。

・.net
よく知りません。確かに古いASPよりはASP.netの方がいいかもしれ
ません。最近少しみかけるようになりました。
拡張子 aspx のサイトはこの作りですね。

・cgi
効率が悪いのでやめた方がいいと思います。ただ、いまだに一番
よく使われていると思います。自身でサーバが管理できないプロ
バイダのサーバにおくよう...続きを読む

Q2進数の0.101101101101・・・は10進数ではいくら?

2進数の0.101101101101・・・は10進数ではいくら?
という問題です。2進数の循環小数の10進数のなおしかたがわかりません。よろしくお願いいたします。

Aベストアンサー

変換の仕方は10進数の循環小数のときと基本的に同じで、計算を全て2進数で行い最後に分子・分母をそれぞれ10進数に直します。

x = 0.101101101...     (1)
両辺を 1000 (=2^3) 倍して、(3桁の繰り返し)
1000 * x = 101.101101...  (2)
(2)式 - (1)式で、
(1000 - 1) * x = 101    (3)
111 * x = 101
x = 101 / 111
101 / 111 は、10進数で 5 / 7。

2進数の計算といっても注意するところは、
(2)式の循環小数の繰り返し桁数に応じて右辺の小数部を相殺するために2^k倍するところと、(3)式の左辺の減算くらいです。

Qいったい,,,,.NETって。。。

質問タイトルがあまりにプアでごめんなさい。素人なもんで。。。。。
MS .NETって、端的にいって何ができるの?何が違うの?アプリケーションの開発環境が向上しただけ?例えば、VB6で作ったアプリでは動作不可能だったことが、.NET環境では可能になるとかあるんですか?

あとWinXPの管理ツールをみると、MS.NET Framework1.1 xxxxxがありますけど、何に使うの?

Aベストアンサー

>アプリケーションの開発環境が向上しただけ?

その認識でいいと思います。
開発側からすると大きな違いです。
ユーザのメリットとしては、ソフトの品質が上がり、安くなる。
# 現状はそうでもないか

新しく出来ることは、ノータッチデプロイメントぐらいですかね。

Q10進数から2進数への変換の仕方について

10進数から2進数への変換の仕方について
以下のサイトに説明があったのですが、
http://www.pursue.ne.jp/jouhousyo/sysad/sysad010.htm

10進数の60を2進数に変換する場合、変換したい10進数を商が0になるまで2で割りつづけ商と余りを求めていますが、その時に、15/2などは7.5になり余りが、説明では商が7、余りが1になっています。
10進数から2進数へ変換する場合は、小数点以下の余りはすべて1として計算するのでしょうか?

Aベストアンサー

> 小数点以下の余りはすべて1として計算するのでしょうか?
元の10進数が整数なら、2進数で表記しても整数です。

2で割るのは2のn乗の桁について考えるからです。
順に下位の桁に移るので、小数にして考えては行き詰ります。

QRPGで0が非表示になる。0は0と表示したい。

DDSで

E1SJSU 12P 3 COLHDG('指示数')

と指定して、

RPGで

MOVE E1SJSU E2SJSU 桁数7桁 小数点桁数0
MOVELE2SJSU S1SJSU

画面設計で

S1SJSU 4Y 小数点0桁 O(オー) 6行目の71桁目 EDTCDE('Z')

とやると、

データ上で

10.000
3.000
0.000

となっているデータが、

画面上では

10
3


となってしまいます。

ちょっと分かりづらいかもしれませんが、
0.000のデータが非表示になってしまいます。
指示数0のデータは、0と表示したいのですがどのようにすれば宜しいでしょうか?

Aベストアンサー

EDTCDE('Z')は、0の場合表示しないという設定です。
ですから、URLを参考に適切なEDTCDEを選択する必要があります。

参考URL:http://ramat.ram.ne.jp/editcode.htm


人気Q&Aランキング

おすすめ情報