访问内存偏移量时 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
我正在尝试在 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