Эээ....
За использование .IF макроса вообще руки отрывать надо, ну да ладно.
Для сравнения есть cmp + флаговые переходы jz/jnz/jb/ja/jc/je - тысячи их, и на каждый еще по несколько псевдонимов.
cmp eax, ebx вычитает ebx из eax и выставляет флаги в соответствии с результатом, после чего на основании этих флагов можно сделать или не сделать переход.
je/jz - переход на метку если есть флаг нуля, т.е. если результат предыдущей арифм. операции нулевой (eax = ebx в описываемом случае),
jne/jnz - наоборот. При сравнении как минимум один аргумент должен быть регистром или константой, при этом первый аргумент константой быть не может. Можно сравнить регистр с числом, регистр с регистром, регистр с памятью, память с числом, память с регистрм. Любые локальные переменные находятся в памяти (и разработчикам MASM, да и не только, надо сказать отдельное "спасибо" за то, что в синтаксисе никак явно не указывается, что это обращение к памяти; только FASM в этом плане додумался логично сделать).
.IF-макрос транслируется в тот же cmp +j-что-нибудь.