Можно ли написать программу Java ..., которая может скомпилировать .asm ... файлы?
Вы можете использовать (почти) любой язык программирования, который способен читать текстовые файлы и записывать двоичные файлы.
Поэтому вы можете использовать Java для этого - по крайней мере теоретически.
Если да, то как мне это сделать ...?
Я изучил сборку Java и сборки ...
К сожалению, сборщики и компиляторы обычно не написаны на Java.
С большой вероятностью вам придется разрабатывать все функции, которые вам нужны с нуля!
Должен ли я использовать уже сделанный ассемблер, например nasm?
Здесь возникает вопрос, почему вы хотите иметь ассемблер в Java.
Вы можете написать ассемблер на Java, но это будет много работы.
Если вы хотите включить ассемблер в Java-программу, которую вы продадите коммерчески, может потребоваться написать собственный ассемблер, потому что лицензирование не позволяет отправлять ваш продукт вместе с «nasm».
Если вы хотите написать ассемблер только для занятий (потому что вы хотите получить опыт разработки компилятора), было бы также полезно потратить на это 100 часов и более.
Во всех остальных случаях я могу представить себе, что не имеет смысла потратить один месяц на разработку программного обеспечения, которое можно бесплатно загрузить из Интернета.