|
Тема |
процедурка. [re: svetlin] |
|
Автор |
Kpoмид (непознат
) |
|
Публикувано | 16.12.00 16:29 |
|
|
това отдолу е една процедурка за целочислено делене на 16-битово число на друго 16-битово число. доколкото разбрах от това, което си написал, би трябвало И целочислено делене да ти свърши работа - въпроса е колко битови операции ти трябват - 16 и 24. тази отдолу съвсем лесно се преработва да работи с 24-битови числа, ше ползва 3 регистъра повече. процедурката за умножение е още-по лесна. дал съм отговора тук, щото лично аз ползвам за "develop" на асемблер notepad-a ;) и нямам начин даже да го компилирам, камо ли да го тествам. така че ако някой забележи някаква простотия, да каже - не съм писал на асемблер от близо 10 годинки, а тоя го разглеждах към полвин час. демек, не ми се смейте...
r1,r2 - the number to be divided r3,r4 - divisor r5,r6 - the result the odd registers contain Hi part of the numbers r7 is destroyed after the procedure ends (=0) no checks for such things as division by zero ;), so careful
sub r7,r7 mov r5,r7 mov r6,r7 tst r1 brmi dividedShifted shiftDivided: dec r7 lsl r2 rol r1 brpl shiftDivided dividedShifted: tst r3 brmi divisorShifted shiftDivisor: inc r7 lsl r4 rol r3 brpl shiftDivisor divisorShifted: cp r1,r3 brmi shiftResult brne subtract cp r2,r4 brpl subtract shiftResult: lsl r6 rol r5 lsl r2 rol r1 brcs subtract brpl shiftDivided2 subtract: sub r2,r4 sbc r1,r3 inc r6 tst r1 brne divisorShifted tst r2 brne divisorShifted tst r7 breq endProc brmi ShiftResultRight ShiftResultLeft: lsl r6 rol r5 dec r7 brne ShiftResultLeft rjmp endProc ShiftResultRight: lsr r5 ror r6 inc r7 brne ShiftResultRight endProc: ret
|
| |
|
|
|