操作数必须是可重定位的程序集 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
在此代码中,我试图访问数组[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