;by James Newton ;Listing from SX Key IDE ;Parallax menomics (sorry!) ;76 instructions and about 25x5x4=500 worst case instructions executed. About (11*4+4)*5+4=100 best case. watch ptr,8,udec ;set watch for regis watch Hi,8,uhex ;set watch for regis watch Lo,8,uhex ;set watch for regis watch Lo,16,udec ;set watch for regis watch Hic,8,uhex ;set watch for regis watch Loc,8,uhex ;set watch for regis watch Loc,16,udec ;set watch for regis watch Digit,8,udec ;set watch for regis watch d1,8,udec ;set watch for regis watch d2,8,udec ;set watch for regis watch d3,8,udec ;set watch for regis watch d4,8,udec ;set watch for regis watch d5,8,udec ;set watch for regis device PINS28,PAGES4,BANKS8,TURBO, stackx, optionx Addr Opcode ;source 7FF- A13 reset start 008- org 8 ;temp register to point to table 008- ptr ds 1 ;input value 009- Lo ds 1 00A- Hi ds 1 ;output value 00B- Digit ds 1 ;variables used for testing 00C- Loc ds 1 00D- Hic ds 1 00E- d1 ds 1 00F- d2 ds 1 010- d3 ds 1 011- d4 ds 1 012- d5 ds 1 ;This code just exists to test the routine at entry 013- start 013- 06E clr d1 014- 06F clr d2 015- 070 clr d3 016- 071 clr d4 017- 072 clr d5 018- 06C clr Loc 019- 06D clr Hic 01A- 068 clr ptr 01B- 06B clr digit 01C- mainloop 01C- C0E 024 mov fsr,#d1 01E- 20D 02A mov Hi, Hic 020- 20C 029 mov Lo,Loc 022- 967 call entry 023- C12 024 mov fsr,#d5 025- :inc10 025- 2A0 inc ind 026- C0A 080 cjb ind, #10, :next 028- 703 A30 02A- 060 clr ind 02B- 0E4 dec fsr 02C- CF2 1C4 cja fsr, #d1-1, :inc10 02E- 603 A25 030- :next 030- 2AC inc Loc 031- 643 snz 032- 2AD inc Hic 033- A1C jmp mainloop ;This is the subroutine called to get rid of a result digit ;For testing, it just compairs the value to the decimal count ;pointed to by fsr 034- SendOutByte 034- 200 08B cje Digit, ind, :exit 036- 643 A3A 038- :error 038- break 038- 010 page :error 039- A38 jmp :error 03A- :exit 03A- 2A4 inc fsr 03B- 00C ret ;this is the beginning of the routines code. 03C- nextHi 03C- 208 mov w, ptr 03D- 1E2 jmp pc+w 03E- 8C3 retw $C3 ; 0 50,000 03F- 875 retw $75 ; 1 30,000 040- 827 retw $27 ; 2 10,000 041- 827 retw $27 ; 3 10,000 042- 813 retw $13 ; 4 5,000 043- 80B retw $0B ; 5 3,000 044- 803 retw $03 ; 6 1,000 045- 803 retw $03 ; 7 1,000 046- 801 retw $01 ; 8 500 047- 801 retw $01 ; 9 300 048- 800 retw $00 ;10 100 049- 800 retw $00 ;11 100 04A- 800 retw $00 ;12 50 04B- 800 retw $00 ;13 30 04C- 800 retw $00 ;14 10 04D- 800 retw $00 ;15 10 04E- nextLo 04E- 208 mov w, ptr 04F- 1E2 jmp pc+w 050- 850 retw $50 ; 0 50,000 051- 830 retw $30 ; 1 30,000 052- 810 retw $10 ; 2 10,000 053- 810 retw $10 ; 3 10,000 054- 888 retw $88 ; 4 5,000 055- 8B8 retw $B8 ; 5 3,000 056- 8E8 retw $E8 ; 6 1,000 057- 8E8 retw $E8 ; 7 1,000 058- 8F4 retw $F4 ; 8 500 059- 82C retw $2C ; 9 300 05A- 864 retw $64 ;10 100 05B- 864 retw $64 ;11 100 05C- 832 retw $32 ;12 50 05D- 81E retw $1E ;13 30 05E- 80A retw $0A ;14 10 05F- 80A retw $0A ;15 10 060- ror 060- nextDg 060- 208 mov w, ptr 061- E03 and w, #%00000011 062- 1E2 jmp pc+w 063- 805 retw $5 064- 803 retw $3 065- 801 retw $1 066- 801 retw $1 ;this is the entry point for the conversion routine 067- entry 067- 068 clr ptr 068- 06B clr digit 069- Loop 069- 93C call nextHi ;get the next value 06A- 08A mov w, Hi-w 06B- 703 sc 06C- A7D jmp smaller ;if the high byte is less than our value, the whole thing must be sm ;Carry not set so parent will skip nextLo and continue with nextHi 06D- 743 sz 06E- A76 jmp largerHi ;if the high byte was exactly equal to our value, then is the low by 06F- 94E call nextLo ;get the next value 070- 089 mov w, Lo-w 071- 703 sc ;the low byte was smaller so the whole thing was smaller after all. 072- A7D jmp smaller 073- 06A clr Hi ;the low byte was larger so we are subtracting and the high byte was 074- 029 mov Lo, w ;and save the subtraction from Lo 075- A7B jmp larger ;The low byte was larger but it's now smaller and since carry is set ;this digit value to output and continue with nextHi 076- largerHi 076- 02A mov Hi, w ;if its not zero and its not smaller, save t 077- 94E call nextLo ;in either case, get the next value 078- 0A9 sub Lo, w 079- 703 sc 07A- 0EA dec Hi 07B- larger ;The value was larger but is now smaller ;add this digit value to output and continue 07B- 960 call nextDg ; break 07C- 1EB add Digit, w 07D- smaller 07D- 2A8 inc ptr 07E- 708 sb ptr.0 07F- 628 snb ptr.1 080- A69 jmp Loop 081- 934 call SendOutByte 082- 06B clr Digit 083- 788 sb ptr.4 084- A69 jmp Loop 085- 209 02B mov Digit, Lo 087- 934 call SendOutByte 088- 00C ret END
Decimal | Hex | Binary |
---|---|---|
50,000 | C350 | 1100 0011 0101 0000 |
30,000 | 7530 | 0111 0101 0011 0000 |
20,000 | 4E20 | 0100 1110 0010 0000 |
10,000 | 2710 | 0010 0111 0001 0000 |
5000 | 1388 | 0001 0011 1000 1000 |
3000 | 0BB8 | 0000 1011 1011 1000 |
2000 | 07D0 | 0000 0111 1101 0000 |
1000 | 03E8 | 0000 0011 1110 1000 |
500 | 01F4 | 0000 0001 1111 0100 |
300 | 012C | 0000 0001 0010 1100 |
200 | C8 | 1100 1000 |
100 | 64 | 0110 0100 |
50 | 32 | 0011 0010 |
30 | 1E | 0001 1110 |
20 | 14 | 0001 0100 |
10 | A | 0000 1010 |
file: /Techref/microchip/math/radix/b2a-16b5alzs.htm, 9KB, , updated: 2000/3/10 09:41, local time: 2024/11/19 05:58,
18.188.55.184:LOG IN
|
©2024 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions? <A HREF="http://linistepper.com/techref/microchip/math/radix/b2a-16b5alzs.htm"> PIC Microcontoller Radix Math Method </A> |
Did you find what you needed? |