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

Access violation in Masm when accessing memory offset

我正在尝试在 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 不允许你做这样的操作吗?有解决方法吗?

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