お世話になっております。
CASLでLDの考えた方が良く整理できておりません。
アドバイスをいただければと思います。
◎処理フローの概要に関して
処理フロー概要は以下の通りです。
(1)GR1に文字列"1","2","3"の先頭アドレスを格納する。
(2)GR1から"1"をGR2に格納する。
◎不明点に関して(文中に疑問点あり)
上記の(2)を実現するためには、下記ロジックが必要と
なるようです。
LD GR2,0,GR1
ここで不明なのは、上記ロジックに"0"がなぜ、
必要であるかです。
LD GR2,GR0 でも良いのではないかと考えました。
そこで、下記について教えていただけないでしょうか。
・なぜ、"0"が必要になるか。
・LD GR2,GR0では、GR2に"1"が格納されない理由について。
以上、よろしくお願い致します。
No.1ベストアンサー
- 回答日時:
LD の機能は次の2つに大別できる。
(1) 汎用レジスタ←汎用レジスタ,というデータのコピー
(2) 汎用レジスタ←番地の指す内容,というデータのコピー
(1) LD GR2,GR0
これは「汎用レジスタGR0の中身を,汎用レジスタGR2にコピーする」
質問文においてGR0に何が格納されているかはまったく指定されていないので,
>・LD GR2,GR0では、GR2に"1"が格納されない
のは当然。
(2a) LD GR2,A
(2b) LD GR2,0
前者は「ラベルAが指す番地の一語分の内容を,GR2にコピーする」
後者は「0番地の一語分の内容を,GR2にコピーする」
第3パラメタに汎用レジスタが現れる書式は,指標レジスタ(第2パラメタで示された番地からの変位)を表すので,
(2c) LD GR2,TBL,GR1
(2d) LD GR2,0,GR1
前者は「ラベルTBLからGR1(の中身)だけ離れた番地の一語分の内容を,GR2にコピーする」,いわゆる高級言語における配列名と添字の関係になる。
後者は「0番地からGR1だけ離れた番地,すなわち0+GR1で示される番地,すなわちGR1(の中身)が指す番地の一語分の内容を,GR2にコピーする」
よって,
>GR1に文字列"1","2","3"の先頭アドレスを格納する。
のであれば,上記の"1"をGR2に取り出す命令は「LD GR2,0,GR1」
+―+
|1|←GR1
+―+
|2|
+―+
|3|
+―+
この回答への補足
質問対象となったプログラムです。
MAIN1 START
LAD GR1,DATA ←《GR1に先頭アドレス格納》
CALL CONVRT
RET
DATA DC '1'
DC '2'
DC '3'
DC '4'
DC 0
END
;
CONVRT START
PUSH 0,GR1
PUSH 0,GR2
PUSH 0,GR3
PUSH 0,GR4
LD GR2,0,GR1 ←《不明点》
JZE ERROR
LAD GR3,4
LAD GR0,0
LOOP CPL GR2,='0'
JMI ERROR
CPL GR2,='9'
JPL ERROR
AND GR2,MASK
SLL GR0,1
LD GR4,GR0
SLL GR4,2
ADDA GR0,GR4
ADDA GR0,GR2
LAD GR1,1,GR1
LD GR2,0,GR1
JZE FIN
SUBA GR3,=1
ERROR LAD GR0,-1
FIN POP GR4
POP GR3
POP GR2
POP GR1
RET
MASK DC #000F
END
わかりやすいご回答、有難うございました。
質問文に記述ミスがあったことをお許し下さい。
誤:LD GR2,GR0
正:LD GR2,GR1
もう少々、確認させて下さい。
いただいたアドバイスは、LD GR2,0,GR1は0番地からGR1はなれた番地の値をGR2に格納するロジックだと思います。
そうすると、疑問が発生します。
GR1に格納されていた先頭アドレスは、「0番地からGR1離れた番地」と同じなのでしょうか。
また、上記の通りである場合、どのような手順で先頭アドレスが「0番地からGR1離れた番地」とイコールになるのでしょうか。
なお、今回の質問対象となったプログラムは以下の通りです。
------------------------------------------------------------
MAIN1 START
LAD GR1,DATA ←GR1に先頭アドレス格納
CALL CONVRT
RET
DATA DC '1'
DC '2'
DC '3'
DC '4'
DC 0
END
;
CONVRT START
PUSH 0,GR1
PUSH 0,GR2
PUSH 0,GR3
PUSH 0,GR4
LD GR2,0,GR1 ←不明点
JZE ERROR
LAD GR3,4
LAD GR0,0
LOOP CPL GR2,='0'
JMI ERROR
CPL GR2,='9'
JPL ERROR
AND GR2,MASK
SLL GR0,1
LD GR4,GR0
SLL GR4,2
ADDA GR0,GR4
ADDA GR0,GR2
LAD GR1,1,GR1
LD GR2,0,GR1
JZE FIN
SUBA GR3,=1
JNZ LOOP
ERROR LAD GR0,-1
FIN POP GR4
POP GR3
POP GR2
POP GR1
RET
MASK DC #000F
END
------------------------------------------------------------
最初からもっと具体的に質問すべきでした。すみません。
No.3
- 回答日時:
>これにより、LD GR2,GR1でもよいのでは無いかと思ってしまいます。
すでにNo.1で回答しました。質問者が誤記したGR0という表記をGR1に置き換えて,以下,そのまま繰り返します。
>(1) LD GR2,GR1
>これは「汎用レジスタGR1の中身を,汎用レジスタGR2にコピーする」
>
>(2d) LD GR2,0,GR1
>「0番地からGR1だけ離れた番地,すなわち0+GR1で示される番地,
>すなわちGR1(の中身)が指す番地の一語分の内容を,GR2にコピーする」
GR1に格納されているのが1000なら,
前者を実行してGR2に格納されるのは1000という値そのもの,
後者を実行してGR2に格納されるのは「1000番地の指す内容」です。
>今回のようにCASLを勉強する上でこの考えかたには注意すべき
>というものがあれば教えていただけないでしょうか。
CASLIIの研修講座があるとしたなら,今回のご質問はその講座が始まって3時間以内に登場するような基本的な内容だと思います。
情報処理技術者試験センターから公表されている「アセンブラ言語の仕様」をよく読んで,実効アドレスについて完璧に理解するか,
http://www.jitec.jp/1_00topic/topic_20081027_han …
上記の仕様書が抽象的で難しく感じるのなら,カネを出すことを惜しまず,CASLIIの解説本を購入して勉強なさることをお勧めします。Amazonなどの書籍購入サイトや情報処理技術者試験の話題のサイトで,読者のレビューをいくらでも見つけることができるでしょう。
回答が遅くなってしまい、申し訳ありません。
教えていただいたおかげで動きがわかってきました。
現状は実際の問題に入っているのですが、
なかなかうまくいきません。
なんとか頑張ります。
有難うございました。
No.2
- 回答日時:
>LD GR2,0,GR1 ←《不明点》
以降のコードはいっさい見ていません。このご質問にお答えするためには不要ですから。
分かりづらければ,具体的な番地の値を仮定すればどうでしょう。例えば,10進数で1000番地から1004番地までの連続した5語にデータが格納されている,と。
+―+
|1|1000 :ラベル名DATA
+―+
|2|1001
+―+
|3|1002
+―+
|4|1003
+―+
|0|1004
+―+
であるなら,
> LAD GR1,DATA ←《GR1に先頭アドレス格納》
というロードアドレス命令でGR1に格納される値は 1000 です。
>そうすると、疑問が発生します。
>GR1に格納されていた先頭アドレスは、
>「0番地からGR1離れた番地」と同じなのでしょうか。
GR1に格納されている先頭アドレス(=1000)と,
0番地からGR1離れた番地(=0+1000=1000)は同じ値です。
何度もご回答、有難うございます。
おかげ様で、少しずつですが、
いろいろ見えてきた気がします。
もう一点、確認させて下さい。
>GR1に格納されている先頭アドレス(=1000)と,
>0番地からGR1離れた番地(=0+1000=1000)は同じ値です。
これにより、LD GR2,GR1でもよいのでは無いかと思ってしまいます。
GR1に"1","2","3"の先頭アドレスを格納していたとき、
なぜ、LD GR2,GR1では"1"をGR2に格納できないのでしょうか。
"1"を格納するのであれば、LD GR2,0,GR1となんら変わりがないように思えます。
(シュミレータ等で実施しても自分が想定するような値はGR2に入ってきません)
また、今回のようにCASLを勉強する上でこの考えかたには注意すべきというものがあれば教えていただけないでしょうか。
申し訳ありませんが、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- 物理学 この問題における抵抗r1とxってどのように考えれば良いのでしょうか?トルクはT=P2/ωsなのでP2 1 2022/06/19 18:46
- C言語・C++・C# 【CASLプログラム】 定数(80と55)を確保し、その和をGR1に、その差をGR2に求めるCASL 1 2022/12/16 01:17
- 避妊 【低用量ピル】【避妊薬】 低用量ピルについて質問です。 22歳女性です。 高校生の頃から生理痛が酷く 2 2023/04/09 15:25
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- 避妊 【低用量ピル】【避妊薬】 低用量ピルについて質問です。 22歳女性です。 高校生の頃から生理痛が酷く 1 2023/05/02 17:38
- 工学 エミッタ設置増幅回路で下記の要件を満たす増幅器を設計せよ。 要件は必要要件であり、例えば、少なくとも 1 2022/12/16 10:15
- その他(パソコン・スマホ・電化製品) 人間の長期記憶に関するモデルについて。 下記の内容をもとに、一番下の質問の具体例が思いつく方いたら具 1 2023/06/30 18:21
- 英語 口頭での"the following..."の可否等について 6 2022/08/19 01:01
- Excel(エクセル) 【ExcelVBA】一覧表の記載に従ってPDFを振り分ける処理がしたい 5 2023/05/23 12:40
関連するカテゴリからQ&Aを探す
医師・看護師・助産師
薬剤師・登録販売者・MR
医療事務・調剤薬局事務
歯科衛生士・歯科助手
臨床検査技師・臨床工学技士
理学療法士・作業療法士・言語聴覚士
臨床心理士・心理カウンセラー・ソーシャルワーカー
介護福祉士・ケアマネージャー・社会福祉士
弁護士・行政書士・司法書士・社会保険労務士
フィナンシャルプランナー(FP)
中小企業診断士
公認会計士・税理士
簿記検定・漢字検定・秘書検定
情報処理技術者・Microsoft認定資格
TOEFL・TOEIC・英語検定
建築士
インテリアコーディネーター
宅地建物取引主任者(宅建)
不動産鑑定士・土地家屋調査士
マンション管理士
電気工事士
美容師・理容師
調理師・管理栄養士・パティシエ
シェフ
保育士・幼稚園教諭
教師・教員
国家公務員・地方公務員
警察官・消防士
その他(職業・資格)
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レジストってなんですか?
-
biosとは人の体でいえば脳のよ...
-
SRAMとレジスタの違いは何でし...
-
FILOとLIFO
-
CPUのビット数と、メモリ(主記...
-
Z80、6502、i8086、MC68000につ...
-
レジスタとメモリについて
-
パソコン内部の仕組みについて
-
エクセルVBAのIf,Then 構...
-
0xffffとは?
-
8ビットのデータの、先頭ビット...
-
ライン数とステップ数の違いは?
-
[VBS] 素早くローテート演算したい
-
PC-9801でマシン語を学習するに...
-
素数を求めるプログラム(アセン...
-
03分22秒36のような時間の単位...
-
実行ファイルからソースはみれる?
-
1の補数
-
一般のソフトで画像を扱う場合...
-
汎用レジスタのワーキングビッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レジストってなんですか?
-
CPUのビット数と、メモリ(主記...
-
レジスタの数
-
SRAMとレジスタの違いは何でし...
-
シーケンサのデータレジスタD...
-
レジスタとメモリについて
-
biosとは人の体でいえば脳のよ...
-
専用レジスタ 汎用レジスタ
-
PICでUSARTのフレーミングエラ...
-
キャッシュメモリとレジスタの...
-
なぜソフトウェアでハードウェ...
-
CPUのハード的な仕組みがわかり...
-
PC-G830
-
命令
-
CASL LDの考え方
-
MP-Z80(10進数の加算)
-
0xffffとは?
-
エクセルVBAのIf,Then 構...
-
8ビットのデータの、先頭ビット...
-
情報科学の飽和演算、ラップア...
おすすめ情報