Prev: 13979 Up: Map Next: 13999
13984: THE 'MODULUS' SUBROUTINE (offset 50)
The address of this routine is found in the table of addresses. It is called via the calculator literal 50 by the routine at S_RND.
This subroutine calculates N (mod M), where M is a positive integer held at the top of the calculator stack (the 'last value'), and N is the integer held on the stack beneath M.
The subroutine returns the integer quotient INT (N/M) at the top of the calculator stack (the 'last value'), and the remainder N-INT (N/M) in the second place on the stack.
This subroutine is called during the calculation of a random number to reduce N mod 65537.
n_mod_m 13984 RST 40 N, M
13985 DEFB 192 st_mem_0: N, M (mem-0 holds M)
13986 DEFB 2 delete: N
13987 DEFB 49 duplicate: N, N
13988 DEFB 224 get_mem_0: N, N, M
13989 DEFB 5 division: N, N/M
13990 DEFB 39 int: N, INT (N/M)
13991 DEFB 224 get_mem_0: N, INT (N/M), M
13992 DEFB 1 exchange: N, M, INT (N/M)
13993 DEFB 192 st_mem_0: N, M, INT (N/M) (mem-0 holds INT (N/M))
13994 DEFB 4 multiply: N, M*INT (N/M)
13995 DEFB 3 subtract: N-M*INT (N/M)
13996 DEFB 224 get_mem_0: N-M*INT (N/M), INT (N/M)
13997 DEFB 56 end_calc
13998 RET Finished.
Prev: 13979 Up: Map Next: 13999