2015-03-16 4 views
0

Я пытаюсь сортировать выбор в сборке x86, и я получаю нарушение прав доступа, когда пытаюсь использовать переменную для доступа к смещению массива.Нарушение прав доступа в Masm при доступе к смещению памяти

.data 
array BYTE "fairy tale" 
count = ($ - array) 
minIndex BYTE ? 

.code 
_main PROC 

mov eax, 0       
mov ebx, 0       

mov ecx, count      ; move array count to counter register 
dec ecx        ; decrease counter 
lea esi, array 


mov bl, 0       ; i = 0 
L1: 
push ecx   


mov minIndex, bl     ; minIndex = i 
mov al, minIndex[esi]    ; THIS GIVES THE ERROR 

; rest of code... 

ret 

_main ENDP 

END _main 

Ошибки сборки отсутствуют, только нарушение доступа во время выполнения. Вам не разрешено выполнять такую ​​операцию в MASM? Есть ли обходной путь?

ответ

2
mov al, minIndex[esi] 

Если вы думаете, что будет принимать значение minIndex и использовать, чтобы компенсировать esi в операции чтения, то вы неправильно. Что он будет делать, это использовать адресminIndex.

Вы можете изменить свой код:

movzx eax,byte ptr minIndex ; zero-extend the byte at minIndex into eax.. 
mov al,[esi+eax]    ; ..and use that as an offset into the array 
+0

Хорошо то, что я думал, что происходит, но я не был уверен, как заставить его действовать так, как я хотел. Благодаря ! –