goo blog サービス終了のお知らせ 

真・女神転生imagine-JZ13(バックアップ)

Broachで投稿していた記事のバックアップです。

苦しんだ課題8完成(たぶん)

2010-07-09 19:46:51 | C言語教室での出来事
先日、わかんないよと苦しんでいた課題8。
;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

これが出来たからって終わりじゃないんだよフフフフフ

最新の画像もっと見る

コメントを投稿

サービス終了に伴い、10月1日にコメント投稿機能を終了させていただく予定です。
ブログ作成者から承認されるまでコメントは反映されません。