операнд должен быть перемещаемым проблема сборки x86 - PullRequest
0 голосов
/ 24 декабря 2018

В этом коде я пытаюсь получить доступ к массиву [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

1 Ответ

0 голосов
/ 24 декабря 2018

Две проблемы с вашей попыткой: вы не можете вычитать в режиме адресации и не можете использовать содержимое ячейки памяти.

Однако вы можете добавить константу и умножить на 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
...