Nie wiem, czy rozwiązanie Szczawika będzie szybsze... być może nieznacznie; raczej chodziło o rozumowanie - zakładam, że znasz podstawowe operacje na bitach. Najlepiej jest wziąć pierwszy czynnik (zapisany bitowo w kilku lub kilkudziesięciu bajtach) i podzielić go na składniki, w których najważniejszy bit jest ustawiony, a reszta bitów to zera i przemnożyć przez te kolejne składniki drugi czynnik, czyli przeglądać pierwszy czynnik i gdy natrafi się na jedynkę to przesunąć drugi czynnik o tyle miejsc w lewo, na którym miejscu trafiliśmy jedynkę, itd. Prawdopodobnie będzie trzeba skorzystać z Carry Flag, by sprawdzić, czy nastąpiło przeniesienie, ale dokładnie się na tym nie znam... Może niech deus się wypowie - on jest MasterMind'em z asemblera :P
Dokładnie nie wiem na czym polega (tzn. w jaki sposób mnoży) instrukcja mul, ale takie operacje jak shl i shr są elementarnymi dla liczb 4-bajtowych, więc raczej taka wiedza nic nie pomoże...
Poza tym i tak problemem będzie wyświetlenie tak dużych liczb - i tak będziesz musiał skorzystać z łańcuchów znaków.
Ogólnie ciekawy problem ;)
EDIT: Znalazłem ciekawy sposób: http://en.wikipedia.org/wiki/Karatsuba_algorithm, który na pewno pomoże (prawdę mówiąc pierwszy raz to spotykam - może na studiach będzie o tym więcej ;)). Dzięki temu algorytmowi możesz zamienić mnożenie 2 liczb n-cyfrowych na 3 mnożenia 2 liczb m-cyfrowych (gdzie n = 2m), przez co ułatwić sobie znacznie zadanie. Np. masz do pomnożenia dwie cyfry: x 9-bajtową i y 7-bajtową. Zamieniasz je na 10-bajtowe (poprzez dopisanie do pierwszej jednego i do drugiej trzech pustych bajtów, przez co uzyskujesz x shl 8 i y shl 24), no i rozbijasz je na podaną na wiki sumę: x1y1 shl 10 +(x1y2 + x2y1) shl 5 +x2y2, gdzie x1 to 5 bardziej znaczących bajtów liczby (x shl 8), a x2 to 5 mniej znaczących bajtów liczby (x shl 8); to samo z y1 i y2.
Nie próbowałem tego zaimplementować, ale teraz jest już trochę późno...
Pozdrawiam.