Hast Du den Code runtergeladen ?.
Bedarf evtl. einiger Erklärungen.
Es gibt 4 Vraiablen a 32 Bit
var_ARG_A,var_ARG_B,var_ARG_C,var_ARG_D
Hierbei liegt jeweils das niederwertigste Byte Bit0.7 in
....AL die Bits 8..15 in ...AH Bit 16..23 in ....AHL Bit 24.31 in ....AHH

Möchtest Du zwei 16 Bit Werte multiplizieren, muss Du die Variablen
entsprechend mit den Werten laden

z.B 1000*2000=2000000

mov LOW D'1000',W ; A Wert setzen
movwf var_ARG_AL
mov HIGH D'1000',W
movwf var_ARG_AH

mov LOW D'2000',W ; B Wert setzen
movwf var_ARG_BL
mov HIGH D'2000',W
movwf var_ARG_BH

call MUL16 ; Berechnung ausführen, Ergebnis nach Wert A

; nun steht das Ergebnis 32 Bit breit in der Variablen ARG_A

Bit 0..7 in in var_ARG_AL
Bit 8..15 in var_ARG_AH
Bit 16..23 in var_ARG_AHL
Bit 24..31 in var_ARG_AHH

!!!! es wird also der A Wert überschrieben mit dem Ergebnis

Beim dividieren läuft das in ähnlicher Weise ab.
mfg. Siro