Нет, в конечном коде нет разницы, но это очень удобно. Это макрос, который автоматически проверяет, совпадают ли типы аргументов, что помогает вам обнаруживать ошибки. Конечно, invoke readString, eax
или push eax; call readString
почти одинаковы, но предположим, что вам нужно вызвать Win32'a API с тысячами параметров:
push NULL
push hInst
push NULL
push NULL
push 200
push 300
push CW_USEDEFAULT
push CW_USEDEFAULT
push WS_OVERLAPPEDWINDOW
push addr Appame
push addr Classame
push WS_EX_CLIENTEDGE
call CreateWindowEx
INVOKE CreateWindowEx,WS_EX_CLIENTEDGE,ADDR ClassName,ADDR AppName,\
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
CW_USEDEFAULT,300,200,NULL,NULL,\
hInst,NULL
В этом случае uning invoke
гораздо полезнее и удобочитаемее.