From 6d4bf76e83379163ae7e027807f79f6cb14a9799 Mon Sep 17 00:00:00 2001 From: Ralph Ronnquist Date: Fri, 28 May 2021 16:56:01 +1000 Subject: [PATCH] added / (div) primitive --- adoc/p_div.adoc | 19 +++++++++++++++++++ adoc/p_divmod.adoc | 2 +- math.asm | 12 +++++++++++- reference.adoc | 1 + wordindex.adoc | 35 +++++++++++++++++++---------------- 5 files changed, 51 insertions(+), 18 deletions(-) create mode 100644 adoc/p_div.adoc diff --git a/adoc/p_div.adoc b/adoc/p_div.adoc new file mode 100644 index 0000000..bbd1ba0 --- /dev/null +++ b/adoc/p_div.adoc @@ -0,0 +1,19 @@ +// math.asm: WORD p_div,'/',fasm + +anchor:p_div[] + +=== Word: / + +.... +Data stack: ( v1 v2 -- q ) +.... + +"/" (div) is a function word that replaces a pair of values with the +results of signed integer division of the first, v1, divided by the +second, v2. To that end, the values are 64-bit signed integers. The +result is the integer quotient, q, and the discarded remainder, r, +where q and r are the respectively largest and smallest integers to +satisfy the formula: +.... + v1 = q * v2 + r +.... diff --git a/adoc/p_divmod.adoc b/adoc/p_divmod.adoc index 5e8f2a9..432e379 100644 --- a/adoc/p_divmod.adoc +++ b/adoc/p_divmod.adoc @@ -10,7 +10,7 @@ Data stack: ( v1 v2 -- q r ) "/MOD" (div-mod) is a function word that replaces a pair of values with the results of signed integer division of the first, v1, divided -by the scond, v2. To that end, the values are 64-bit signed integers. +by the second, v2. To that end, the values are 64-bit signed integers. The result is the integer quotient, q, and the remainder, r, where q and r are the respectively largest and smallest integers to satisfy the formula: diff --git a/math.asm b/math.asm index c678d11..3b82bd4 100644 --- a/math.asm +++ b/math.asm @@ -42,7 +42,7 @@ p_abs_end: WORD p_divmod,'/MOD',fasm ;; ( x y -- q r ) - ;; divide signed x/y giving quotient q and reminder r + ;; divide signed x/y giving quotient q and remainder r pop rbx pop rax xor rdx,rdx @@ -51,3 +51,13 @@ p_abs_end: push rdx next + WORD p_div,'/',fasm + ;; ( x y -- q ) + ;; divide signed x/y giving quotient q and discard remainder + pop rbx + pop rax + xor rdx,rdx + idiv rbx + push rax + next + diff --git a/reference.adoc b/reference.adoc index 4c79c23..832820d 100644 --- a/reference.adoc +++ b/reference.adoc @@ -12,6 +12,7 @@ include::adoc/p_colon.adoc[] include::adoc/p_comma.adoc[] include::adoc/p_create.adoc[] include::adoc/p_decimal.adoc[] +include::adoc/p_div.adoc[] include::adoc/p_does.adoc[] include::adoc/p_evaluate_stream.adoc[] include::adoc/p_here.adoc[] diff --git a/wordindex.adoc b/wordindex.adoc index b3cd87b..6ee602e 100644 --- a/wordindex.adoc +++ b/wordindex.adoc @@ -1,38 +1,41 @@ == Index of word links -xref:p_colon[:] {nbsp} -xref:p_comma[', (comma)'] {nbsp} -xref:p_dot['. (dot)'] {nbsp} -xref:p_double_quote["] {nbsp} -xref:p_equal[= ] {nbsp} -xref:p_left_bracket[[] {nbsp} -xref:p_lessequal[<] {nbsp} +xref:p_colon[: (colon)] {nbsp} +xref:p_semicolon[: (semi-colon)] {nbsp} +xref:p_comma[, (comma)] {nbsp} +xref:p_dot[. (dot)] {nbsp} +xref:p_double_quote[" (double-quote)] {nbsp} +xref:p_quote[' (single-quote)] {nbsp} +xref:p_left_bracket[[ (left bracket)] {nbsp} +xref:p_right_bracket[\] (right bracket)] {nbsp} + xref:p_lessthan[<] {nbsp} +xref:p_equal[= ] {nbsp} +xref:p_greaterthan[>] {nbsp} xref:p_lparen[(] {nbsp} xref:p_minus[ - ] {nbsp} xref:p_mult[*] {nbsp} xref:p_plus[+] {nbsp} -xref:p_right_bracket[']'] {nbsp} - +xref:p_div[/] {nbsp} +{nbsp} xref:p_0equal[0=] {nbsp} xref:p_0less[0<] {nbsp} -xref:p_Ccomma[C,] {nbsp} +xref:p_lessequal[\<=] {nbsp} +xref:p_unequal[!=] {nbsp} xref:p_greaterequal[>= ] {nbsp} -xref:p_greaterthan[>] {nbsp} -xref:p_gtR[>R] {nbsp} -xref:p_lessequal[<=] {nbsp} +xref:p_Ccomma[C,] {nbsp} xref:p_literal_string[S"] {nbsp} +xref:p_gtR[>R] {nbsp} xref:p_Rget[R@] {nbsp} xref:ef:p_Rgt[R>] {nbsp} -xref:p_unequal[!=] {nbsp} xref:data_stack[DATA-STACK] {nbsp} xref:return_stack[RETURN-STACK] {nbsp} - +{nbsp} xref:p_0branch[0BRANCH] {nbsp} - +{nbsp} xref:p_2drop[2DROP] {nbsp} xref:p_2dup[2DUP] {nbsp} xref:p_2over[2OVER] {nbsp} -- 2.39.2