32-разрядные 2d массивы MASM, доступ к которым осуществляется с помощью директив потока условного управления ошибка A2029:несколько базовых регистров не разрешены

# #assembly #x86 #masm #irvine32

#собрание #x86 #масм #ирвин32

Вопрос:

 updateBoard PROC array:PTR DWORD , row1: DWORD, col1:DWORD, row2:DWORD , col2:DWORD  LOCAL isSame:DWORD, exitLoop: DWORD, value1:DWORD   mov isSame, 0 ;isSame = false  mov exitLoop, 0    ;computing smaller column, we'll start from the column which has smaller position for rowwise forward computation  mov eax, col2  .if( col1 lt; eax )  mov ecx, col1  .elseif   mov ecx, col2  .endif    ;rowWise forward combos   mov eax, ecx; starting column index   mov edi,row1 ; row index  mov esi, eax  mov edx, 10  sub edx, ecx; computing loop counter -gt; (10 - col index with greater value )  .while ( edx lt; 9d AND exitLoop == 0)   mov ecx, array[edi   eax*TYPE array]    add eax, 1d  mov ebx, array[edi   eax*TYPE array]   .if ( ecx == ebx )  mov isSame, 1 ; isSame = true  .endif    .if ( ecx != ebx )  mov exitLoop, 1  .endif   inc esi  mov eax, esi  inc edx  .endw     dec eax  displayString offset prompt7  call writeDec   ret updateBoard ENDP  

также получил эту ошибку после включения ..AND exitLoop ==0 синтаксической ошибки A2154 в директиву потока управления, я создаю 2d-настольную игру с номером. сначала я проверял совпадения по строкам вперед и получал эту ошибку, что бы я ни пытался. я использовал как edi, так и esi для доступа к массиву, но изменил его esi на eax. Пожалуйста, помогите. Я поискал в Интернете, где говорится, что это фатальная ошибка.

Комментарии:

1. Является AND ли допустимым ключевое слово? Попробуй amp;amp; вместо этого.

2. спасибо, Шут. Как мне удалить тот, в котором написано «многократное использование базового регистра». Я знаю, что базовыми регистрами являются edi, esi, ebx и ebp. Я попытался изменить инструкции, но это все равно не проходит. Я новичок, поэтому мне жаль, если я совершаю здесь некоторые ошибки новичка.

3. Если я изменю array с board1 , то есть название доски , на которой я объявил .data , я не получу ошибки. Может ли кто-нибудь объяснить мне, почему это произошло? Вот как я назвал эту процедуру INVOKE updateBoard ,ADDR board1, row1, col1, row2, col2 .

4. Вам нужно показать минимальный, полный пример, который воспроизводит описываемую вами проблему.