From fef36fd11c9d3d7f632098c5005bf0e3e5ce5ad9 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Wed, 17 Jan 2018 12:01:40 +0100 Subject: finished Screen. - a bit slow though --- projects/12/MathTest/Math.jack | 12 ++++++++++++ projects/12/MathTest/Math.vm | 26 ++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) (limited to 'projects/12/MathTest') diff --git a/projects/12/MathTest/Math.jack b/projects/12/MathTest/Math.jack index 6bac42e..01bce8f 100644 --- a/projects/12/MathTest/Math.jack +++ b/projects/12/MathTest/Math.jack @@ -28,6 +28,18 @@ class Math { return ~(x & twoToThe[i] = 0); } + function int sign(int x) { + if (x > 0) { + return 1; + } else { + if (x < 0) { + return -1; + } else { + return 0; + } + } + } + /** Returns the absolute value of x. */ function int abs(int x) { if (x > 0){ diff --git a/projects/12/MathTest/Math.vm b/projects/12/MathTest/Math.vm index dad8ff5..513fc1a 100644 --- a/projects/12/MathTest/Math.vm +++ b/projects/12/MathTest/Math.vm @@ -44,6 +44,32 @@ push constant 0 eq not return +function Math.sign 0 +push argument 0 +push constant 0 +gt +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +push constant 1 +return +goto IF_END0 +label IF_FALSE0 +push argument 0 +push constant 0 +lt +if-goto IF_TRUE1 +goto IF_FALSE1 +label IF_TRUE1 +push constant 1 +neg +return +goto IF_END1 +label IF_FALSE1 +push constant 0 +return +label IF_END1 +label IF_END0 function Math.abs 0 push argument 0 push constant 0 -- cgit v1.2.3