Цитата(PRidon @ Dec 26 2013, 09:31)

как разберешься с делением - выложи результат. Полезная вещь.
Разобрался. А попутно подправил функцию умножения. Привожу код.
CODE
//БЕЗЗНАКОВОЕ УМНОЖЕНИЕ 32-Х РАЗРЯДНОГО ЧИСЛА НА 32-Х РАЗРЯДНОЕ С ПОЛУЧЕНИЕМ 64-Х РАЗРЯДНОГО РЕЗУЛЬТАТА
; R12, R13 - первый множитель. R12 - младшее слово
; R14, R15 - второй множитель. R14 - младшее слово
Mul32u32uTo64u:
DINT
NOP
MOV R12, &MPY
MOV R14, &OP2
MOV R12, &MAC
MOV &RESLO, R12
MOV &RESHI, &RESLO
CLR &RESHI
MOV R15, &OP2
MOV R13, &MAC
MOV R14, &OP2
MOV &RESLO, R13
MOV &RESHI, &RESLO
MOV &SUMEXT, &RESHI
MOV R15, &OP2
MOV &RESLO, R14
MOV &RESHI, R15
EINT
RET
; R12, R13, R14, R15 - произведение. R12 - младшее слово
CODE
//БЕЗЗНАКОВОЕ ДЕЛЕНИЕ 64-Х РАЗРЯДНОГО ЧИСЛА НА 32-Х РАЗРЯДНОЕ С ПОЛУЧЕНИЕМ 64-Х РАЗРЯДНОГО ЧАСТНОГО И 32-Х РАЗРЯДНОГО ОСТАТКА
; R12, R13, R14, R15 - делимое. R12 - младшее слово
; R10, R11 - делитель. R10 - младшее слово
Div64u32uTo64u:
PUSH R6
PUSH R7
PUSH R8
PUSH R9
CLR R7
CLR R8
CLR R9
MOV #64, R6
Div64u32uTo64u_MainLoop:
RLA R12
RLC R13
RLC R14
RLC R15
RLC R7
RLC R8
RLC R9
SUB R10, R7
SUBC R11, R8
SUBC #0, R9
JNC Div64u32uTo64u_AddBalance
BIS #1, R12
Div64u32uTo64u_DecCounter:
DEC R6
JNZ Div64u32uTo64u_MainLoop
JMP Div64u32uTo64u_Exit
Div64u32uTo64u_AddBalance:
ADD R10, R7
ADDC R11, R8
ADDC #0, R9
JMP Div64u32uTo64u_DecCounter
Div64u32uTo64u_Exit:
MOV R7, R10
MOV R8, R11
POP R9
POP R8
POP R7
POP R6
RET
; R12, R13, R14, R15 - частное. R12 - младшее слово
; R10, R11 - остаток. R10 - младшее слово
Цитата(demiurg_spb @ Dec 26 2013, 10:19)

Я бы, прежде чем изобретать велосипед, ознакомился с исходниками компилятора.
Либо просто написал на Си умножение-деление, собрал проект и посмотрел листинг дизассемблера.
http://sourceforge.net/projects/mspgcc/Безусловно, я так и делал. Однако пришлось немного пересобрать велосипед под свои нужды, так как компилятор собирает слишком большой велосипед. Для наглядности привожу код функций деления и умножения. Сразу видно, что он гораздо больше моего кода. Но, конечно, он более универсален.
CODE
_Mul64iHw:
push.w SR
dint
nop
push.w R6
push.w R7
sub.w #0x4,SP
mov.w R12,&MPY
mov.w R11,&OP2
mov.w R13,&MAC
mov.w R10,&OP2
mov.w R14,&MAC
mov.w R9,&OP2
mov.w R15,&MAC
mov.w R8,&OP2
mov.w &RESLO,0x2(SP)
mov.w R12,&MPY
mov.w R10,&OP2
mov.w R13,&MAC
mov.w R9,&OP2
mov.w R14,&MAC
mov.w R8,&OP2
mov.w &RESLO,0x0(SP)
mov.w &RESHI,R7
mov.w R12,&MPY
mov.w R9,&OP2
mov.w R13,&MAC
mov.w R8,&OP2
mov.w &RESLO,R10
mov.w &RESHI,R9
mov.w &SUMEXT,R11
mov.w R12,&MPY
mov.w R8,&OP2
mov.w &RESLO,R8
mov.w &RESHI,R15
push.w R11
push.w R9
push.w R10
push.w #0x0
mov.w R15,R9
pop.w R12
pop.w R13
pop.w R14
pop.w R15
add.w R8,R12
addc.w R9,R13
adc.w R14
adc.w R15
mov.w @SP,R6
mov.w 0x2(SP),R11
add.w R11,R7
add.w R6,R14
addc.w R7,R15
add.w #0x4,SP
pop.w R7
pop.w R6
reti
_Div64u:
push.w R6
push.w R11
push.w R10
push.w R9
push.w R8
sub.w #0x10,SP
mov.w R12,0x8(SP)
mov.w R13,0xA(SP)
mov.w R14,0xC(SP)
mov.w R15,0xE(SP)
clr.w 0x0(SP)
clr.w 0x2(SP)
clr.w 0x4(SP)
clr.w 0x6(SP)
clr.w R8
clr.w R9
clr.w R10
clr.w R11
mov.b #0x40,R6
call #Mul2
bit.w #0x8000,0xE(SP)
subc.w R12,R12
inc.w R12
rla.w R8
rlc.w R9
rlc.w R10
rlc.w R11
bis.w R12,R8
rla.w 0x8(SP)
rlc.w 0xA(SP)
rlc.w 0xC(SP)
rlc.w 0xE(SP)
cmp.w 0x16(SP),R11
jnc 0x11A8
jne 0x1194
cmp.w 0x14(SP),R10
jnc 0x11A8
jne 0x1194
cmp.w 0x12(SP),R9
jnc 0x11A8
jne 0x1194
cmp.w 0x10(SP),R8
jnc 0x11A8
sub.w 0x10(SP),R8
subc.w 0x12(SP),R9
subc.w 0x14(SP),R10
subc.w 0x16(SP),R11
bis.w #0x1,0x0(SP)
add.b #0xFF,R6
jne 0x1146
mov.w @SP,R12
mov.w 0x2(SP),R13
mov.w 0x4(SP),R14
mov.w 0x6(SP),R15
add.w #0x18,SP
pop.w R6
ret
Mul2:
rla.w 0x2(SP)
rlc.w 0x4(SP)
rlc.w 0x6(SP)
rlc.w 0x8(SP)
ret