操作数必须是可重定位的程序集 x86 问题

operand must be relocatable Assembly x86 problem

在此代码中,我试图访问数组[i-1][j+1],而在汇编中,我们只能处理一维数组,因此我试图通过从中减去当前索引来访问该索引我的宽度 "W" 并乘以 4 因为类型是 DWORD 但是当我尝试这一行时 "MOV EAX, [EDI - P]" 它会导致错误任何提示?

        MOV EAX, W
        ADD EAX, 1
        MOV EBX, 4
        MUL EBX
        MOV P, EAX
        MOV EAX, [EDI- p];; up Right
        ADD ESI, EAX

你的尝试有两个问题:你不能在寻址模式下减法,你不能使用内存位置的内容。

但是,您可以加上一个常数,然后乘以 2、4 或 8,这两种方法在这里都可以发挥优势。

        MOV EAX, W
        NEG EAX
        MOV EAX, 4[EDI+EAX*4];; up Right
        ADD ESI, EAX

常量可以为负数,所以当要访问数组[i-1][j-1]时,可以使用

        MOV EAX, -4[EDI+EAX*4];; up left