aboutsummaryrefslogtreecommitdiff
path: root/examples/instruction-test.asm
blob: bd31c681d1359824336d258bfd57da4987034e90 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
;;; instruction-test.asm: A file that contains all possible opcodes in
;;; order, with proper calling convention.  Used to test lexer and
;;; parser but isn't a semantically correct program, but may be run as
;;; first instruction is halt (so program will stop immediately).

  ;; setup entrypoint
  global main
main:
  halt
  push.byte 1
  push.hword 2
  push.word 3
  pop.byte
  pop.hword
  pop.word
  push.reg.byte 1
  push.reg.hword 2
  push.reg.word 3
  mov.byte 1
  mov.hword 2
  mov.word 3
  dup.byte 1
  dup.hword 2
  dup.word 3
  malloc.byte 1
  malloc.hword 2
  malloc.word 3
  malloc.stack.byte
  malloc.stack.hword
  malloc.stack.word
  mset.byte 1
  mset.hword 2
  mset.word 3
  mset.stack.byte
  mset.stack.hword
  mset.stack.word
  mget.byte 1
  mget.hword 2
  mget.word 3
  mget.stack.byte
  mget.stack.hword
  mget.stack.word
  not.byte
  not.hword
  not.word
  or.byte
  or.hword
  or.word
  and.byte
  and.hword
  and.word
  xor.byte
  xor.hword
  xor.word
  eq.byte
  eq.hword
  eq.word
  plus.byte
  plus.hword
  plus.word
  sub.byte
  sub.hword
  sub.word
  print.char
  print.byte
  print.int
  print.hword
  print.long
  print.word
  jump.abs 1
  jump.stack
  jump.if.byte 1
  jump.if.hword 2
  jump.if.word 3

  ;; Testing if overflows work correctly
  ;; Format is:
  ;;     -1        All bits are turned on
  ;;     UINT_MAX  All bits are turned on
  ;;     INT_MAX   All bits but the most significant are on
  ;;     INT_MIN   Only the most significant bit is on
  push.byte -1
  push.byte 255
  push.byte 127
  push.byte -128

  push.hword -1
  push.hword 4294967295
  push.hword 2147483647
  push.hword -2147483648

  push.word -1
  push.word 18446744073709551615
  push.word 9223372036854775807
  push.word -9223372036854775808