访问内存偏移时Masm中的访问冲突

时间:2015-03-16 20:33:39

标签: sorting x86 access-violation masm

我正在尝试在x86程序集中进行选择排序,当我尝试使用变量访问数组的偏移量时,我遇到访问错误违规。

.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中进行这样的操作吗?有解决方法吗?

1 个答案:

答案 0 :(得分: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