Еще спорный момент с флагом C при умножении.
"C: set if the result is less than -2^15 or greater than or equal to 2^15."
Как я понимаю из этого описания, нужно установить флаг если результат <-2^15 или >=2^15, т.е. текущий вариант процедуры неправильно установит флаг, если результат =-2^15. Или я неправильно понял описание (или описание не совсем корректное). Для проверки можно, например, умножить #1 на #100000