アセンブラでプログラミング中に問題が発生しました。私はアセンブラーでゲームを「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ビットのレジスターであるため、コードの最後の行で文句を言います。