1

アセンブラでプログラミング中に問題が発生しました。私はアセンブラーでゲームを「4列に並べて」作成していて、すでに7x6の競技場を描くためのコードを書くことができました。配列を使用して競技場を追跡し、さまざまなコラーコードの配列を使用しています。

  PlayingField DB 42 DUP(0)   ;0 for empty, 1 for yellow, 2 for res
  CollorList DB 1111b, 1110b, 0100b (white, yellow, res)
  CurrentBlock DB 0

プレイフィールドを描画するには、次のコードを使用します。

  mov al, CollorList[2]    ;collor register
  mov ch, 000000
  mov dh, 000000
  mov cl, Position[0]
  mov dl, Position[1]
  mov ah, 0ch
  int 10h                   ;set pixel

問題は、変数CurrentBlockをこのPlayingField[CurrentBlock]のようなインデックスとして使用することです。この値は、コードの描画セクションでCollorListのインデックスとして使用できるように保存する必要があります。このCollorList[index]のように。このようにして、値をalレジスタに入れる必要があるので、現在のブロックの値0に白のピクセル、値1に黄色、値2に赤のピクセルを取得します。

また、PlayingField配列の特定のインデックスの値を変更する方法についても説明します。「movPlayingField[currentblock]のため、2は機能していないようです。

アセンブラーは私にとって初めてで、オンラインで検索しましたが、まだ私の答えは見つかりませんでした。私が大いに感謝したどんな助けでも。

よろしく、ティム

編集:DOS + MASM/LINKを使用しています。このように機能する場合は、試してみます。私はこのようなことを試みましたが、うまくいかないようです。

mov si,2    
mov bx, [PlayingField+si] 
mov al, CollorList[dx]

[PlayingField + si]は8ビット、bx 16ビットであるため、これによりエラーが発生します。レジスターを「bl」に変更すると、「bl」は8ビットのレジスターであるため、コードの最後の行で文句を言います。

4

1 に答える 1

0

NASMを使用している場合は、次のように変更できますmov PlayingField[currentblock], 2

mov si, [currentblock]
mov byte [playingfield+si], 2
于 2012-01-06T14:45:46.577 に答える