diff options
Diffstat (limited to 'ia32')
-rw-r--r-- | ia32/core.sts | 2 | ||||
-rw-r--r-- | ia32/macro.sts | 18 | ||||
-rw-r--r-- | ia32/stack.sts | 4 | ||||
-rw-r--r-- | ia32/syscall.sts | 2 |
4 files changed, 23 insertions, 3 deletions
diff --git a/ia32/core.sts b/ia32/core.sts index fcb62ae..17b7d89 100644 --- a/ia32/core.sts +++ b/ia32/core.sts @@ -15,3 +15,5 @@ defasm lit # ad ?' ; lodsd # 50 ?' ; push eax next + +defconst word_size 4 diff --git a/ia32/macro.sts b/ia32/macro.sts index 3842a5c..5aa3b35 100644 --- a/ia32/macro.sts +++ b/ia32/macro.sts @@ -18,14 +18,19 @@ _docol # 4 ?+ ?. ] +[ defconst 2 + defasm %1% + # 68 ?' # %2% ?. ; push %2% + next +] + [ defarr 2 _data_segment ?choose ?$ ?? _%1%_arr # %2% # 4 ?* ?res _code_segment ?choose defasm %1% - ; push _%1%_arr - # 68 ?' _%1%_arr ?. + # 68 ?' _%1%_arr ?. ; push _%1%_arr next ] @@ -33,6 +38,15 @@ defarr %1% 1 ] +[ as 1 + _data_segment ?choose + defword %1% + lit ?$ # 0 ?. + exit + _code_segment ?choose + lit ?. ! +] + [ literal 0 lit # %1% ?. ] diff --git a/ia32/stack.sts b/ia32/stack.sts index 7756706..f3c8bab 100644 --- a/ia32/stack.sts +++ b/ia32/stack.sts @@ -1,3 +1,7 @@ +defasm top + # 54 ?' ; push esp +next + defasm get # 58 ?' ; pop eax # 8b ?' # 4 ?' # 84 ?' ; mov eax, [esp + 4 * eax] diff --git a/ia32/syscall.sts b/ia32/syscall.sts index 7ff7480..92d4d3a 100644 --- a/ia32/syscall.sts +++ b/ia32/syscall.sts @@ -5,7 +5,7 @@ defasm sys_exit ; no need in next since this is the last instruction _data_segment ?choose - ?$ ?? _iobuf # 0 ?' + ?$ ?? _iobuf # 0 ?. _code_segment ?choose defasm sys_read |