NASM не поддерживает 64-битную версию (или подождите, это поддержка, которую он недавно добавил?). Я рекомендую YASM, он очень похож на NASM, но он более активен и, я думаю, поддерживает больше платформ.
64-битное программирование на ассемблере весьма отличается от 32-битного (если вы говорите на x86). Все обращения к памяти теперь относятся к RIP, а не являются абсолютными (без специальных переопределений). Я бы рекомендовал сначала изучить 32-битное программирование, потому что для этого есть больше документации. Я не рекомендую изучать оба одновременно!
Кроме того, я думаю, что использовать Linux было бы проще, так как легче взаимодействовать со стандартной библиотекой C (если вы не хотите быть человеком и делать системные вызовы).
Кроме того, в 64-битных системах соглашение о вызовах отличается для windows и linux на 64-битных машинах. Это то, что вы должны наблюдать при взаимодействии с существующими библиотеками.
EDIT:
О, да, 64-битная Vista будет нормально запускать 32-битные программы (iirc вы можете обнаружить, что вы находитесь в 32-битном режиме из 64-битной ОС). Я настоятельно рекомендую просто разрабатывать 32-разрядные версии для Linux и Vista, поскольку они имеют одинаковые соглашения о вызовах (iirc), поэтому любой код, который вы используете для взаимодействия с библиотеками C, может быть большей частью независимым от платформы