41 lines
1.7 KiB
Plaintext
41 lines
1.7 KiB
Plaintext
program Horner's method
|
|
// Input: x, n, a_n, . . ., a_2, a_1, a_0
|
|
// Output: p_n(x) = a_n x^n + . . . + a_2 x^2 + a_1 x + a_0
|
|
// Remarks: polynomial evaluation via Horner's method
|
|
// Idea: p_3(x) = ((a_3 * x + a_2) * x + a_1) * x + a_0
|
|
// Example 1 : to convert 765 decimal to hex, enter input
|
|
// A 2 7 6 5
|
|
// Example 2: to convert 100 1111 0011 from binary to hex, enter
|
|
// 2 A 1 0 0 1 1 1 1 0 0 1 1
|
|
// -----------------------------------------------------------------------------
|
|
10: 7C00 R[C] <- 0000 result c
|
|
11: 7101 R[1] <- 0001 always 1
|
|
12: 82FF read R[2] read x
|
|
13: 83FF read R[3] read n
|
|
|
|
14: 84FF read R[4] do { read a_i
|
|
15: 1A20 R[A] <- R[2] |
|
|
16: 1BC0 R[B] <- R[C] | c *= x
|
|
17: FF30 R[F] <- pc; goto 30 |
|
|
18: 1CC4 R[C] <- R[C] + R[4] c += a_i
|
|
19: C31C if (R[3] == 0) goto 1C |
|
|
1A: 2331 R[3] <- R[3] - R[1] | } while (i-- >= 0)
|
|
1B: C014 goto 14 |
|
|
|
|
1C: 9CFF write R[C]
|
|
1D: 0000 halt
|
|
|
|
function multiply
|
|
// Input: R[A] and R[B] (should be passed by value)
|
|
// Return address: R[F]
|
|
// Output: R[C] = R[A] * R[B]
|
|
// Temporary variables: R[1] = 1
|
|
|
|
30: 7C00 R[C] <- 0000
|
|
31: 7101 R[1] <- 0001
|
|
32: CA36 if (R[A] == 0) goto 36
|
|
33: 1CCB R[C] <- R[C] + R[B]
|
|
34: 2AA1 R[A] <- R[A] - R[1]
|
|
35: C032 goto 32
|
|
36: EF00 goto R[F]
|