diff options
author | pommicket <pommicket@gmail.com> | 2021-11-13 14:32:00 -0500 |
---|---|---|
committer | pommicket <pommicket@gmail.com> | 2021-11-13 14:32:00 -0500 |
commit | c664b4e61b54bed0bd55924c97fcad9d5ad97e21 (patch) | |
tree | bcc3ef0cd3263d08a7a5fd0629f14b11aef4c424 | |
parent | 2507f4b19677e73521e1f03b3a915e1d0c5fcee1 (diff) |
pretty much done 03 compiler!
-rw-r--r-- | 03/ex03 | 8 | ||||
-rw-r--r-- | 03/in02 | 140 | ||||
-rw-r--r-- | 03/in03 | 6 |
3 files changed, 145 insertions, 9 deletions
@@ -31,10 +31,10 @@ B-=J A=:label x3c return -;;;;;;;;;;;;;;;;;;;;;;;*- -;;;;;;;;;;;;;;;;;;;;;;;/- -;;;;;;;;;;;;;;;;;;;;;;;*+ -;;;;;;;;;;;;;;;;;;;;;;;/+ +imul +idiv +mul +div :funciton call A str Here is some text which will be put in the executable! @@ -278,8 +278,64 @@ im ##1. je :-al +im +--U* "mul" +IA +im +--LI +JA +im +--s= +cl +BA +im +##1. +je +:-u* +im +--S* "imul" +IA +im +--LI +JA +im +--s= +cl +BA +im +##1. +je +:-s* +im +--U/ "div" +IA +im +--LI +JA +im +--s= +cl +BA +im +##1. +je +:-u/ +im +--S/ "idiv" +IA +im +--LI +JA +im +--s= +cl +BA +im +##1. +je +:-s/ jm -:-ex +:-!i // handle += instruction ::+= im @@ -2165,6 +2221,66 @@ jm :-rl next line ::Rt re +// deal with "mul" +::u* +im +--+* +IA +im +##3. +DA +im +--wr +cl +jm +:-rl next line +// deal with "imul" +::s* +im +---* +IA +im +##3. +DA +im +--wr +cl +jm +:-rl next line +// deal with "div" +::u/ +im +--+/ +IA +im +##3. +DA +im +--wr +cl +jm +:-rl next line +// deal with "idiv" +::s/ +im +---/ +IA +im +##3. +DA +im +--wr +cl +jm +:-rl next line +::+* ++* +::-* +-* +::+/ ++/ +::-/ +-/ // bad instruction ::!i im @@ -2311,6 +2427,28 @@ jm 'g 'n \n +::U* "mul" text +'m +'u +'l +\n +::S* "imul" text +'i +'m +'u +'l +\n +::U/ "div" text +'d +'i +'v +\n +::S/ "idiv" text +'i +'d +'i +'v +\n ::IF input file name 'i 'n @@ -1,10 +1,8 @@ -return -str Hi -align -return +; write to stdout J=d1 I=:hello_world D=:hello_world_end +; calculate length by subtracting end from start D-=I syscall d1 J=d42 |