Это установить флаг Z, чтобы je equal
после макроса узнало, что два массива были равны. Флаг Z будет установлен или сброшен с помощью cmp eax, ebx
, и если он будет очищен в этот момент, управление перейдет на done
- к сожалению, сразу после этого он выполнит пару add
с, что (вероятно, ) сбросьте флаг Z еще раз, поэтому sub eax, eax
необходим для его повторной установки для условных переходов после макроса.
Реальный вопрос заключается в том, зачем вам нужен mov eax, 0
на equal:
- и ответ таков: вам это не нужно. Наряду с установкой флага Z, sub eax, eax
также устанавливает значение eax на 0, которое может / может быть возвращено напрямую. Даже если вы по какой-то причине решили повторно загрузить значение 0, вам, вероятно, захочется использовать для этого sub eax, eax
(или xor eax, eax
) (код немного меньше и, по крайней мере, на некоторых процессорах, быстрее, чем хорошо).
Редактировать: Я должен добавить, что, по крайней мере, на мой взгляд, это довольно плохое использование макроса. По крайней мере, должны быть некоторые комментарии, чтобы указать интерфейс макроса, который, вероятно, ответил бы на вопрос до того, как его спросили.