-
Notifications
You must be signed in to change notification settings - Fork 2
/
tools.asm
executable file
·91 lines (85 loc) · 1.23 KB
/
tools.asm
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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; tools.asm
;;
;; © 2012,2013 David J Göhrig <[email protected]>
;;
octal:
dupe ; a -- a a
shiftrnum 3 ; a a -- a a/8
dupe ; a -- a a/8 a/8
shiftrnum 3 ; a -- a a/8 a/16
andnum 7 ;
addnum 48 ;
type ; a/16&7
andnum 7 ;
addnum 48 ;
type ; a/8&7
andnum 7 ;
addnum 48 ;
type ; a&7
ret
hexen:
dupe
shiftrnum 4 ; a - a a/16
andnum 15 ; a - a a/16&15
literal 9 ; a - a a/16&15 9
more ; a - a a/16&15 flag
method first_digit ; a - a a/16&15 flag digit
if ; a - a a/16&15
hexen_cont:
addnum 48 ; "a"-10
type
andnum 15
literal 9
more
method second_digit
if
addnum 48
type
ret
first_digit:
addnum 39
method hexen_cont
invoke
second_digit:
addnum 87
type
ret
dump:
dupe
rpush ; byte 0
dupe
shiftrnum 8
rpush ; byte 1
dupe
shiftrnum 16
rpush ; byte 2
dupe
shiftrnum 24
rpush ; byte 3
dupe
shiftrnum 32
rpush ; byte 4
dupe
shiftrnum 40
rpush ; byte 5
dupe
shiftrnum 48
rpush ; byte 6
shiftrnum 56
call hexen ; byte 7
rpop
call hexen ; byte 6
rpop
call hexen ; byte 5
rpop
call hexen ; byte 4
rpop
call hexen ; byte 3
rpop
call hexen ; byte 2
rpop
call hexen ; byte 1
rpop
call hexen ; byte 0
ret