чем кросс-ассемблер отличается от макроассемблера?
Макроассемблер -- это ассемблер поддерживающий макросы.
Кросс-ассемблер -- это ассемблер, генерирующий код для процессора, архитектура которого отлична от той, на которой он сам выполняется.
Макроассемблер может быть кросс-ассемблером.