Доступ к массиву в Ассемблере - PullRequest
1 голос
/ 06 января 2012

У меня проблема при программировании на ассемблере.Я делаю игру «4 в ряд» на ассемблере и уже успел написать код для рисования игрового поля 7х6.Я использую массив для слежения за игровым полем и использую массив с разными колор-кодами.

  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 [индекс].Таким образом, значение мне нужно поместить в регистр al, чтобы я получил белый пиксель для значения 0 текущего блока, желтый для значения 1 и красный для значения 2.

Также мне хотелось бы узнать, как яизменить значение определенного индекса в моем массиве PlayingField.Потому что "mov PlayingField [currentblock], 2, похоже, не работает.

Ассемблер является новым для меня и искал в Интернете, но пока не нашел своего ответа. Любая помощь, которую я очень ценю.

С уважением, Тим

Редактировать: Я использую DOS + MASM / LINK. Попробую, если это будет работать так. Я пробовал что-то подобное, но, похоже, не работает.

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

Это дает мне ошибку, потому что [PlayingField + si] 8-битный и bx 16-битный. Если я изменяю свой регистр на 'bl', он жалуется на последнюю строку кода, потому что 'bl' является 8-битным регистром

1 Ответ

0 голосов
/ 06 января 2012

Если вы используете NASM, вы можете изменить mov PlayingField[currentblock], 2 на:

mov si, [currentblock]
mov byte [playingfield+si], 2
...