先日、わかんないよと苦しんでいた課題8。
放置しててもしょうがないのでとりあえず、判らないなりに組んでみました。
機嫌良く一人で遊んでたのに、「全然提出して来ないけどどうなってますか?」と講師に言われ、
ビビりまくって見せたら「えええー?コレナニ?どうしたいんですかぁ?」と呆れられましたよ♪
指示は「BUF1」、「BUF2」という名前なのに勝手に「DATA」と使っている→NG。
エリアのラベル名「BUF1」、「BUF2」は「ORG」の前ではなく「DS」の前に付けなければならない。→記述エラー。
前回書いてないメインの部分
オペランドにラベルが使えないと思っていたので数値をそのまま入れてた→「なんのためにラベルつけてるんですか?」「はあ、そースねw」
で、講師に直されたあと、デバグしたら意図した動きになったので、恐らく正解例。
転送先がなぜか220Hになってるのは凡ミスで♪
---------------------------
ORG 100H
;100H番地からプログラムスタート
LD DE,BUF1+9
;DEにアドレスBUF1(200H)+9(=209H)格納
LD HL,BUF2+9
;HLにアドレスBUF1(220H)+9(=229H)格納
LD C,10
;Cに最大カウント数10回格納
LOOP LD A,(DE)
;AにDEの内容を格納
LD (HL),A
;HLのアドレスにAの内容を格納
DEC DE
;DEのアドレスを1減らす
DEC HL
;HLのアドレスを1減らす
DEC C
;Cの回数を1減らす
JR NZ,LOOP
;0でなければLOOPへジャンプ
HALT
;停止
NOP
;待機
ORG 200H
;200Hから始める
;BUF1: DS 10
;10バイト確保(コメント扱いになっているのは下行のサンプルデータと競合するから。テストが終わったら;を外してメモリ内データを初期化する。)
BUF1: DB 1,100,255,26,64,124,8,95,98,224
;サンプル値(テキトーな数字10バイト分)で埋める
ORG 220H
;220Hから始める
BUF2: DS 10
;10バイト確保
END
----------------------------
BUFをそれぞれ+9してるのは、バックからヤるのが大好きだから。(敢えてこの表現で)
10バイトって決まってるから出来る技ですが、普通の人は前からやりますw
これが出来たからって終わりじゃないんだよフフフフフ
;ASM課題8:固定バイト数の転送
;
;BUF1の10バイト領域のデータをBUF2の10バイト
;領域に転送するプログラムの作成
;BUF1の先頭アドレスを200H番地、BUF2の先頭アドレスを210H番地とする。
;当該プログラムの開始番地は100Hからスタートする。
;擬似命令(ORG、DB)を使用すること。
;・input: なし
;・output: なし
放置しててもしょうがないのでとりあえず、判らないなりに組んでみました。
機嫌良く一人で遊んでたのに、「全然提出して来ないけどどうなってますか?」と講師に言われ、
ビビりまくって見せたら「えええー?コレナニ?どうしたいんですかぁ?」と呆れられましたよ♪
指示は「BUF1」、「BUF2」という名前なのに勝手に「DATA」と使っている→NG。
エリアのラベル名「BUF1」、「BUF2」は「ORG」の前ではなく「DS」の前に付けなければならない。→記述エラー。
前回書いてないメインの部分
オペランドにラベルが使えないと思っていたので数値をそのまま入れてた→「なんのためにラベルつけてるんですか?」「はあ、そースねw」
で、講師に直されたあと、デバグしたら意図した動きになったので、恐らく正解例。
転送先がなぜか220Hになってるのは凡ミスで♪
---------------------------
ORG 100H
;100H番地からプログラムスタート
LD DE,BUF1+9
;DEにアドレスBUF1(200H)+9(=209H)格納
LD HL,BUF2+9
;HLにアドレスBUF1(220H)+9(=229H)格納
LD C,10
;Cに最大カウント数10回格納
LOOP LD A,(DE)
;AにDEの内容を格納
LD (HL),A
;HLのアドレスにAの内容を格納
DEC DE
;DEのアドレスを1減らす
DEC HL
;HLのアドレスを1減らす
DEC C
;Cの回数を1減らす
JR NZ,LOOP
;0でなければLOOPへジャンプ
HALT
;停止
NOP
;待機
ORG 200H
;200Hから始める
;BUF1: DS 10
;10バイト確保(コメント扱いになっているのは下行のサンプルデータと競合するから。テストが終わったら;を外してメモリ内データを初期化する。)
BUF1: DB 1,100,255,26,64,124,8,95,98,224
;サンプル値(テキトーな数字10バイト分)で埋める
ORG 220H
;220Hから始める
BUF2: DS 10
;10バイト確保
END
----------------------------
BUFをそれぞれ+9してるのは、バックからヤるのが大好きだから。(敢えてこの表現で)
10バイトって決まってるから出来る技ですが、普通の人は前からやりますw
これが出来たからって終わりじゃないんだよフフフフフ