Как написано в документации к фасму, Однако как оказывается работают не только пробелы, но и другие символы, так что push eax+1 ассемблируется как 00000000: push eax + 1; 50 6A 01 (#03) думаете баг? нед! это push eax push +1
push нескольких переменных или констант за одну запись удобно, но использовать запись типа push eax+1 в реальных программах явно не стоит ибо создаст лишнюю путаницу )
GoldFinch на nasm это вот так Код (Text): %macro push 1-* %rep %0 push %1 %rotate 1 %endrep %endm и тогда возможна инструкция push eax,ebx,ecx,eax
push eax + 1 - это push eax +1, поэтому все работает в соответствии с документацией, т.к. фасм поддерживает не только унарный минус, но и унарный плюс, а вот это push eax * 1 по идее работать не должно.
Phantom_84 в соответствии с документацией push eax + 1, но не push eax+1 ) полюбому через запятую логичнее, чем такие извраты.
Phantom_84 тогда почему push eax+1 работает push eax-1 работает push eax ebx работает, а push eax+ebx не работает?
EDIT: адресовано Y_Mur'у Для fasm'а обе строки идентичны В нем знаки арифметических операций являются разделительными символами. Так я тоже не сторонник подобных извратов, но раз в fasm'е реализовали это без использования запятых, наверное этому была своя причина. Просто не нужно извращаться, а то действительно легко запутаться, например, после непродолжительных экспериментов выяснилось, что в записи push eax 1 -1 строка 1 -1 расценивается как одно выражение, что впрочем вполне логично, но вот запись push eax 1 (-1) уже приводит к генерации трех команд push, что не слишком логично, особенно с учетом предыдущего варианта.
Mikl___, сам догадаться не можешь? - нельзя к имени регистра приставлять знак операции - такое возможно только в адресных выражениях.
О, все-таки и push eax 1 (-1) тоже вполне логично, т.к. в выражении 1 (-1) явно отсутствует знак бинарной операции между операндами (между единицей и скобкой)!
Phantom_84 да догадался давно, там смайл стоит -- хотя отличить унарный ± от суммы/разности если отсутствуют явные разделители сложно! push/pop с аргументами через пробелы еще tasm поддерживал, а вот для masm нужно писать макрос
ну вы и нафлудили %) речь шла о том что препроцессор вообще убирает пробелы и формирует список отдельных элементов "push","eax","+","1", а ассемблер вычисляет выражения в операндах и получается "push","eax","1"