Поскольку вы загружаете 32-битные значения из памяти, вы должны объявлять array
и wordvar
, используя dd
, а не db
/ dw
, чтобы каждая запись имела четыре байта:
array dd 89, 10, 67, 1, 4, 27, 12, 34, 86, 3
wordvar dd 123
Кроме того, неверное индексирование неверно:
mov ebx, [array+1]
Вероятно, вы имели в виду:
mov ebx, [array+1*4]
Я все еще пытаюсь придумать более быстрый / лучший метод, но думаю, что должно сработать следующее:
Конечно, есть разные варианты - например, вы могли бы реализовать «минимальное расстояние от другого пересечения» сверху. Или «черная линия истончается первой» . Или расширение каждого шарика, чтобы размыть черные линии и сделать три цвета ближе друг к другу. Вы можете уменьшить свое изображение (стараясь использовать NEAREST_NEIGHBOUR вместо интерполяции) после маркировки, чтобы сократить время обработки - если это важно.