重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

#8100番地から2ブロック分のメモリに、それぞれのアドレスの、下位バイトの値(#00~#FF)を書き込み,書き込まれた2ブロック分のメモリ内容を、#8500番地から2ブロック分のメモリに転送するプログラムを作成する。

上記の問題がよくわからなくって。。
わかる方、回答お願いします

おそらく
#8100番地(#0000)~#82FF番地(#00FF)
と入力し、それを
#8500番地~#86FF番地に移動させるんだと思います。

A 回答 (3件)

「2ブロック分のメモリ=512バイト」と解釈してZ80で書いてみます。



LDHL,8100h;HL=転送元番地
LDBC,512;BC=256*2=2ブロック
PUSHHL;スタックに保存
PUSHBC
Loop:
LD(HL),L;番地の下位の値を代入
INCHL;次の番地
DECBC;512回繰り返し
LDA,B
ORC
JRNZ,Loop

POPBC;BC=512
POPHL;HL=8100h
LDDE,8500h;DE=転送先番地
LDIR;(8100h~82FFh)を(8500h~86FFh)に転送
RET

お粗末でした。
    • good
    • 0

「2ブロック」の意味も分からんが, それ以上に「ターゲットとする CPU」がわからん.


アセンブリ言語が CPU やアセンブラごとに違うことはご存知ですか?
    • good
    • 0

これはいったん格納した値を次のルーチンで転送したのではお粗末です


インデックスに使ったレジスターのあるビットをset,resetすることで8100+Xと8500+Xに切り替えながらアキュムレーターの値をインデックスの指定するアドレスに格納すればいいのです
START

set、N ビット;インデックスの第Nビットを立ててを8100+Xから8500+Xに変更する
res、N ビット;インデックスを元に戻す
上記の二つがこつです

条件を満たすまでSTARTとの間でループする


これでだいたいおわかりかと思います
操作するビットは自分で見つけてください

これはザイログ形式のニーモニックなのでインテル形式に変更するには対応表を見てください
    • good
    • 0

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