about summary refs log tree commit diff stats
path: root/subx/ex6.subx
diff options
context:
space:
mode:
Diffstat (limited to 'subx/ex6.subx')
-rw-r--r--subx/ex6.subx37
1 files changed, 37 insertions, 0 deletions
diff --git a/subx/ex6.subx b/subx/ex6.subx
new file mode 100644
index 00000000..5e4f34f5
--- /dev/null
+++ b/subx/ex6.subx
@@ -0,0 +1,37 @@
+## print out a (global variable) string to stdout
+#
+# To run:
+#   $ subx translate ex6.subx ex6
+#   $ subx run ex6
+#   Hello, world!
+
+== 0x08048074  # code segment, after leaving room for ELF header and segment headers
+# instruction                     effective address                                         operand     displacement    immediate
+# op          subop               mod             rm32          base      index     scale     r32
+# 1-3 bytes                                                                                               0/1/2/4 bytes   0/1/2/4 bytes
+
+  ## write(stdout, x, 1)
+  # fd = 1 (stdout)
+  bb                                                                                                                      1/imm32           # copy 1 to EBX
+  # set location to write out
+  b9                                                                                                                      0x08049097/imm32  # copy to ECX
+  # set size
+  ba                                                                                                                      0x08049093/imm32  # copy to EDX
+  8b                              0/mod/indirect  2/rm32/edx                                  2/r32/edx                                     # copy *EDX to EDX
+  # syscall = write
+  b8                                                                                                                      4/imm32       # copy 4 to EAX
+  # call
+  cd                                                                                                                      0x80/imm8     # int 80h
+
+  ## exit(EBX)
+  b8                                                                                                                      1/imm32       # copy 1 to EAX
+  cd                                                                                                                      0x80/imm8     # int 80h
+
+== 0x08049093
+# size of string
+0e 00 00 00
+# string
+  48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 21 0a
+# h  e  l  l  o  ,  ␣  w  o  r  l  d  !  newline
+
+# vim:ft=subx:nowrap
it/012transform.cc?h=hlt&id=5a4810855d34ce74b787d70383a712eef9e053f4'>5a481085 ^
215365d4 ^




5a481085 ^

215365d4 ^


37e4573b ^

dd2e01e4 ^
f1e09b14 ^
b24eb476 ^
dd2e01e4 ^
363be37f ^
37e4573b ^


91abd257 ^
363be37f ^
37e4573b ^


322ce34d ^
3ba63579 ^
7cca03bd ^
3ba63579 ^

7858a06a ^











3ba63579 ^
dd2e01e4 ^
363be37f ^
3ba63579 ^

b24eb476 ^
05d17773 ^
b24eb476 ^
05d17773 ^
3ba63579 ^
b24eb476 ^
05d17773 ^
3ba63579 ^





9cc16d04 ^
7f73795c ^
0f125d5f ^

37e4573b ^
a70ce311 ^





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
96
97
98
99