错误A2032:我试图使用数组时无效使用寄存器

时间:2015-05-07 08:53:00

标签: assembly

我试图找到我收到此错误的原因(A2032),而我正试图通过数组来使用它。代码的作用非常简单,但我无法找到使其工作的方法,据我所知,我使用数组的方式是正确的(根据我们的老师的说法)

.386
.model flat, C
.code

isItValid PROC

push EBP
mov [EBP], ESP

push EAX  ; R1->R5
push EBX  ; TMP

ADD EBP, [EBP+8]

;1
MOV EBX, EBP+8
NOT EBX     ;NOT TMP
MOV EAX, EBX

;2
MOV EBX, EBP+4      ; EBX -> R2
OR EAX, EBX     ; OR TMP, R1

;3
MOV EBX, EBP +4     ; EBX -> R2
XOR EAX, EBX    ; XOR TMP, R2

;4
MOV EBX, EBP+4      ; EBX -> R3
NOT EBX     ; NOT R3
XOR EAX, EBX    ;XOR TMP, NOT(R3)
NOT EAX     ; NOT(TMP XOR NOT(R3))

;5
MOV EBX, EBP+4      ; EBX -> R4
OR EAX, EBX     ; TMP OR R4

;6
MOV EBX, EBP+4 ; EBX -> R5
CMP EAX, EBX

JZ CONS     
MOV EBX, 0  


CONS:
    MOV EBX, 1                      

POP EAX
POP EBX
POP EBP

ret
isItValid ENDP

END

1 个答案:

答案 0 :(得分:0)

这一行(和其他类似的)

MOV EBX, EBP+8

是对EBP寄存器的无效使用。您不能将寄存器值加常量移动到另一个寄存器。如果您尝试访问堆栈,则该行必须与正上方正确实现的行相似

MOV EBX, [EBP+8]

或者,如果您打算将EBP+8移至EBX,请将此作为

MOV EBX, EBP
ADD EBX, 8