我正在尝试在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中进行这样的操作吗?有解决方法吗?
答案 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