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

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

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

そして教室内の様子

2010-07-09 20:31:23 | C言語教室での出来事
とにかく講師がイヤミっぽいせいで、全員がなかなか質問しにくい雰囲気の様子。
みんな勝手に課題をやってまして、そしてなかなか提出しないw
さすがにこの雰囲気に気付いたのか、今日は講師のほうから「○○さん、進捗は?」と聞いてきたのです。
そりゃもう…けっちょんけちょんです…。^^

私は一応、課題の順番通りにやっています。(しかし判らなくても質問はしない)
しかしAさんは「判らないから飛ばして次の課題をやってみた」らしく、講師ブチ切れ。
「こっちが判らないのにこっちができるわけないでしょう?!」→8が9の踏み台だなんて生徒には判んないだろ?w
「順番にやって行けば判るように課題を作ってるんです!」→順番にやってても判りませんが何か?

Bさんの場合。
「なんでこんなめっちゃくちゃなんですか?!」→どう違うか説明してやれよ…^^
「もうね!16進の計算なんてここで教えることじゃないんですよ!自分で本とか買って勉強してください!」→ええええ!それ判ってるの前提だったのぉぉぉぉ?!しかも完全放棄ぃぃぃぃ?!てゆーか、計算機使わせてやれよ…。

ひどくね…?^^

課題8の上にまたがる課題9

2010-07-09 20:09:55 | C言語教室での出来事
8が出来たと思ったら、9は「8を踏まえて…」という問題でした。(´;ω;`)ブワッ

;ASM課題9:指定バイトを指定番地への転送
;
;入力としてDEレジスタにソースアドレスが設定され、
;HLレジスタにディスティネーションアドレスが定さている。
;又データ転送数をCレジスタに設定されているものとして、
;ソースアドレスからディスティネーションアドレスに
;指定バイト数分転送するプログラムの作成。
;・サブルーチン名:TRANS
;・input: DEレジスタ
;・input: Cレジスタ
;・input: HLレジスタ
;・使用レジスタは全て保障されること。


キタキタ来ました踏み台昇降。
8が出来ないと9は出来ません。
「これ、コピーするだけでいいんじゃ?」と思ったものの
8を番地降順(バックからヤる)で作ってしまった為、全部書き直すハメにw
素直に正常位…もとい、普通に組んでれば良かったね。

------------------------------
BUF1 EQU 200H
  ;BUF1というラベルの部分は全て200Hに置き換える(あとから番地変更する場合はココだけ書きかえればOK)
BUF2 EQU 220H

ORG 100H
  ;100H番地からスタート
LD DE,BUF1
  ;DEにソースアドレス格納
LD HL,BUF2
  ;HLにディスティネーションアドレス格納
LD C,10
  ;Cに指定バイト数回格納
CALL TRANS
  ;TRANSへジャンプ

HALT
  ;停止
NOP
  ;待機


TRANS:
LD A,(DE)
  ;AにDEの内容を格納
LD (HL),A
  ;HLのアドレスにAの内容を格納

INC DE
  ;DEのアドレスを1増やす
INC HL
  ;HLのアドレスを1増やす
DEC C
  ;Bの回数を1減らす

JR NZ,TRANS
  ;0でなければ繰り返し
RET

ORG 200H
  ;200Hから始める
;BUF1 DS 10
  ;10バイト確保
BUF1: DB 1,100,255,26,64,124,8,95,98,224
  ;サンプル値で埋める

ORG 220H
  ;220Hから始める
BUF2 DS 10
  ;10バイト確保

END
-------------------------------
まだデバグしてないよ♪らららん。
てか、今ここに書いてて気づいたが、恐らく講師が添削入力したままで書き直してなかった部分が…w
私はクセでラベルのあとに「:(コロン)」を入れるのですが、スペース入れときゃいいらしいです。
恐らくCSSでのクセですね。^^

とゆーかですよ。
このデバッグという作業。
なんでか知らんがフロッピーベースの作業なんです。

デバッガー(エミュレータ?)がフロッピーに入ってて、説明書もなぜかフロッピーベースの処理方法のみ。
しかもUSBフロッピードライブが2台しかなく、とてもじゃないけど気軽にデバッグができないんです。
(なのでドライブが空くまで~と思ってたら1日終わることもw)
このプログラム、勝手にフラッシュメモリに入れたらアカンの?
動かないのかなぁ…。ドライブ指定をFとかにすりゃいいだけだと思うんだけど…。
まあ、フロッピーに入ってるプログラムがカチャカチャいいながら動くのって懐かしくて好きですけどね。^^

苦しんだ課題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

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