aboutsummaryrefslogtreecommitdiff
path: root/ia32
diff options
context:
space:
mode:
Diffstat (limited to 'ia32')
-rw-r--r--ia32/macro.sts20
-rw-r--r--ia32/math.sts16
2 files changed, 33 insertions, 3 deletions
diff --git a/ia32/macro.sts b/ia32/macro.sts
index 5aa3b35..34c3a9d 100644
--- a/ia32/macro.sts
+++ b/ia32/macro.sts
@@ -40,13 +40,21 @@
[ as 1
_data_segment ?choose
- defword %1%
- lit ?$ # 0 ?.
- exit
+ defword %1%
+ lit ?$ # 0 ?.
+ exit
_code_segment ?choose
lit ?. !
]
+[ local 1
+ top as %1%
+]
+
+[ ref 0
+ top + 1 +
+]
+
[ literal 0
lit # %1% ?.
]
@@ -84,3 +92,9 @@
branch ?swap ?.
?$ ?swap ?!
]
+
+[ change 0
+ dup get
+ swap 2 get swap 2 + set
+ swap drop
+]
diff --git a/ia32/math.sts b/ia32/math.sts
index 1864a93..95ca5f7 100644
--- a/ia32/math.sts
+++ b/ia32/math.sts
@@ -17,6 +17,22 @@ defasm /
# 50 ?' ; push eax
next
+defasm mod
+ # 5b ?' ; pop ebx
+ # 58 ?' ; pop eax
+ # 31 ?' # d2 ?' ; xor edx, edx
+ # f7 ?' # f3 ?' ; div ebx
+ # 52 ?' ; push edx
+next
+
+defasm div
+ # 5b ?' ; pop ebx
+ # 58 ?' ; pop eax
+ # 31 ?' # d2 ?' ; xor edx, edx
+ # f7 ?' # f3 ?' ; div ebx
+ # 50 ?' ; push eax
+next
+
defasm =
# 5b ?' ; pop ebx
# 58 ?' ; pop eax