Created
January 30, 2026 12:29
-
-
Save rsbohn/e4308ad2bbb977c855a2a63157d6467a to your computer and use it in GitHub Desktop.
tawny factor.asm
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| **** | |
| ** factor.asm -- factor 32 bit numbers | |
| **** | |
| AORG >0000 | |
| DATA WPA ; WP | |
| DATA START ; PC | |
| AORG >1000 ; workspaces | |
| WPA BSS >20 | |
| WPB BSS >20 | |
| AORG >1800 | |
| START | |
| LI 0, >1700 ; output pointer | |
| MOV @>17FC, 3 ; N high | |
| MOV @>17FE, 4 ; N low | |
| CI 3, >0000 | |
| JNE FACTOR_INIT | |
| CI 4, >0000 | |
| JNE FACTOR_INIT | |
| LI 1, >0000 | |
| MOV 1, *0+ | |
| MOV 1, *0+ | |
| IDLE | |
| FACTOR_INIT | |
| LI 5, >0002 ; divisor | |
| FACTOR_LOOP | |
| CI 3, >0000 | |
| JNE CHECK_DIV | |
| CI 4, >0001 | |
| JEQ DONE | |
| CHECK_DIV | |
| MOV 5, 9 | |
| MPY 5, 9 | |
| C 3, 9 | |
| JEQ CMP_LOW | |
| JH REMAINING_32 | |
| JMP TRY_DIV | |
| CMP_LOW | |
| C 4, R10 | |
| JH REMAINING_32 | |
| JMP TRY_DIV | |
| TRY_DIV | |
| MOV 3, R11 | |
| MOV 4, R12 | |
| LI 6, >0000 ; remainder | |
| LI 7, >0000 ; quotient high | |
| LI 8, >0000 ; quotient low | |
| LI 2, >0020 ; 32 bits | |
| DIV32_LOOP | |
| LI 9, >0000 | |
| SLA 4, 1 | |
| JOC DIV32_LOW_CARRY | |
| JMP DIV32_LOW_DONE | |
| DIV32_LOW_CARRY | |
| LI 9, >0001 | |
| DIV32_LOW_DONE | |
| LI R10, >0000 | |
| SLA 3, 1 | |
| JOC DIV32_HIGH_CARRY | |
| JMP DIV32_HIGH_DONE | |
| DIV32_HIGH_CARRY | |
| LI R10, >0001 | |
| DIV32_HIGH_DONE | |
| CI 9, >0000 | |
| JEQ DIV32_SKIP_HIGH_LSB | |
| ORI 3, >0001 | |
| DIV32_SKIP_HIGH_LSB | |
| SLA 6, 1 | |
| CI R10, >0000 | |
| JEQ DIV32_SKIP_REM_LSB | |
| ORI 6, >0001 | |
| DIV32_SKIP_REM_LSB | |
| LI 9, >0000 | |
| SLA 8, 1 | |
| JOC DIV32_QLOW_CARRY | |
| JMP DIV32_QLOW_DONE | |
| DIV32_QLOW_CARRY | |
| LI 9, >0001 | |
| DIV32_QLOW_DONE | |
| SLA 7, 1 | |
| CI 9, >0000 | |
| JEQ DIV32_QSKIP_HIGH_LSB | |
| ORI 7, >0001 | |
| DIV32_QSKIP_HIGH_LSB | |
| C 5, 6 | |
| JHE DIV32_REM_GE | |
| JMP DIV32_REM_LT | |
| DIV32_REM_GE | |
| S 5, 6 | |
| ORI 8, >0001 | |
| DIV32_REM_LT | |
| DEC 2 | |
| JNE DIV32_LOOP | |
| CI 6, >0000 | |
| JEQ FOUND_FACTOR | |
| MOV R11, 3 | |
| MOV R12, 4 | |
| CI 5, >0002 | |
| JEQ SET_DIV3 | |
| AI 5, >0002 | |
| JMP FACTOR_LOOP | |
| SET_DIV3 | |
| LI 5, >0003 | |
| JMP FACTOR_LOOP | |
| FOUND_FACTOR | |
| MOV 7, 3 | |
| MOV 8, 4 | |
| LI 1, >0000 | |
| MOV 1, *0+ | |
| MOV 5, *0+ | |
| JMP FACTOR_LOOP | |
| REMAINING_32 | |
| MOV 3, *0+ | |
| MOV 4, *0+ | |
| JMP DONE | |
| DONE | |
| LI 1, >0000 | |
| MOV 1, *0+ | |
| MOV 1, *0+ | |
| IDLE |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment