• 締切済み

アセンブリ言語の問題がわかりません

#8100番地から2ブロック分のメモリに、それぞれのアドレスの、下位バイトの値(#00~#FF)を書き込み,書き込まれた2ブロック分のメモリ内容を、#8500番地から2ブロック分のメモリに転送するプログラムを作成する。 上記の問題がよくわからなくって。。 わかる方、回答お願いします おそらく #8100番地(#0000)~#82FF番地(#00FF) と入力し、それを #8500番地~#86FF番地に移動させるんだと思います。

みんなの回答

回答No.3

「2ブロック分のメモリ=512バイト」と解釈してZ80で書いてみます。 LD HL,8100h;HL=転送元番地 LD BC,512 ;BC=256*2=2ブロック PUSH HL ;スタックに保存 PUSH BC Loop: LD (HL),L ;番地の下位の値を代入 INC HL ;次の番地 DEC BC ;512回繰り返し LD A,B OR C JR NZ,Loop POP BC ;BC=512 POP HL ;HL=8100h LD DE,8500h;DE=転送先番地 LDIR ;(8100h~82FFh)を(8500h~86FFh)に転送 RET お粗末でした。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「2ブロック」の意味も分からんが, それ以上に「ターゲットとする CPU」がわからん. アセンブリ言語が CPU やアセンブラごとに違うことはご存知ですか?

  • debukuro
  • ベストアンサー率19% (3634/18947)
回答No.1

これはいったん格納した値を次のルーチンで転送したのではお粗末です インデックスに使ったレジスターのあるビットをset,resetすることで8100+Xと8500+Xに切り替えながらアキュムレーターの値をインデックスの指定するアドレスに格納すればいいのです START set、N ビット;インデックスの第Nビットを立ててを8100+Xから8500+Xに変更する res、N ビット;インデックスを元に戻す 上記の二つがこつです 条件を満たすまでSTARTとの間でループする これでだいたいおわかりかと思います 操作するビットは自分で見つけてください これはザイログ形式のニーモニックなのでインテル形式に変更するには対応表を見てください

関連するQ&A