123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- ### GNU Mes --- Maxwell Equations of Software
- ### Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
- ###
- ### This file is part of GNU Mes.
- ###
- ### Mes is free software# you can redistribute it and/or modify it
- ### under the terms of the GNU General Public License as published by
- ### the Free Software Foundation# either version 3 of the License, or (at
- ### your option) any later version.
- ###
- ### GNU Mes is distributed in the hope that it will be useful, but
- ### WITHOUT ANY WARRANTY# without even the implied warranty of
- ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ### GNU General Public License for more details.
- ###
- ### You should have received a copy of the GNU General Public License
- ### along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
- # reduced instruction set: eax, ebx (some ecx for shift, edx for mul, div)
- # 193 instructions
- DEFINE add____$i32,%eax 05
- DEFINE add____$i32,%ebx 81c3
- DEFINE add____$i32,(%eax) 8100
- DEFINE add____$i32,(%ebx) 8103
- DEFINE add____$i32,0x32(%eax) 8180
- DEFINE add____$i32,0x32(%ebp) 8185
- DEFINE add____$i8,%eax 83c0
- DEFINE add____$i8,%ebx 83c3
- DEFINE add____$i8,%esp 83c4
- DEFINE add____$i8,(%eax) 8300
- DEFINE add____$i8,(%ebx) 8303
- DEFINE add____$i8,0x32 8305
- DEFINE add____$i8,0x32(%eax) 8380
- DEFINE add____$i8,0x32(%ebp) 8385
- DEFINE add____$i8,0x8(%eax) 8340
- DEFINE add____$i8,0x8(%ebp) 8345
- DEFINE add____%eax,%eax 01c0
- DEFINE add____%ebp,%eax 01e8
- DEFINE add____%ebx,%eax 01d8
- DEFINE add____%ebx,%ebx 01db
- DEFINE addb___$i8,(%eax) 8000
- DEFINE addb___$i8,(%ebx) 8003
- DEFINE addw___$i8,(%eax) 668100
- DEFINE addw___$i8,(%ebx) 668103
- DEFINE and____$i32,%eax 25
- DEFINE and____$i32,%ebx 81e3
- DEFINE and____%ebx,%eax 21d8
- DEFINE call32 e8
- DEFINE call___*%eax ffd0
- DEFINE call___*%ebx ffd3
- DEFINE cltd 99
- DEFINE cmp____$0x32,%eax 3d
- DEFINE cmp____$i32,%eax 3d
- DEFINE cmp____$i8,%eax 83f8
- DEFINE cmp____$i8,%ebx 81fb
- DEFINE div___%ebx f7f3
- DEFINE hlt f4
- DEFINE idiv___%ebx f7fb
- DEFINE int cd
- DEFINE int____$0x80 cd80
- DEFINE ja32 0f87
- DEFINE jae32 0f83
- DEFINE jb32 0f82
- DEFINE jbe32 0f86
- DEFINE je32 0f84
- DEFINE je8 74
- DEFINE jg32 0f8f
- DEFINE jge32 0f8d
- DEFINE jl32 0f8c
- DEFINE jle32 0f8e
- DEFINE jmp32 e9
- DEFINE jmp____*%ebx ffe3
- DEFINE jne32 0f85
- DEFINE lahf 9f
- DEFINE lea____0x32(%ebp),%eax 8d85
- DEFINE lea____0x8(%ebp),%eax 8d45
- DEFINE leave c9
- DEFINE mov____$i32,%eax b8
- DEFINE mov____$i32,%ebx bb
- DEFINE mov____$i32,(%eax) c700
- DEFINE mov____$i32,0x32 c705
- DEFINE mov____$i32,0x8(%eax) c740
- DEFINE mov____$i32,0x8(%ebp) c745
- DEFINE mov____$i8,%al b0
- DEFINE mov____$i8,%eax b0
- DEFINE mov____%al,(%ebx) 8803
- DEFINE mov____%al,0x8(%ebp) 8845
- DEFINE mov____%ax,(%ebx) 668903
- DEFINE mov____%ax,0x8(%ebp) 668945
- DEFINE mov____%bx,%bx 6689db
- DEFINE mov____%cl,(%ebx) 8a08
- DEFINE mov____%cx,(%ebx) 668b08
- DEFINE mov____%dl,(%eax) 8810
- DEFINE mov____%dl,0x8(%eax) 8850
- DEFINE mov____%eax,%ebx 89c3
- DEFINE mov____%eax,%ecx 89c1
- DEFINE mov____%eax,(%ebx) 8903
- DEFINE mov____%eax,0x32 a3
- DEFINE mov____%eax,0x32(%ebp) 8985
- DEFINE mov____%eax,0x8(%ebp) 8945
- DEFINE mov____%ebp,%eax 89e8
- DEFINE mov____%ebp,%ebx 89eb
- DEFINE mov____%ebx,%eax 89d8
- DEFINE mov____%ebx,%ecx 89d9
- DEFINE mov____%ebx,0x32 891d
- DEFINE mov____%ebx,0x32(%ebp) 899d
- DEFINE mov____%ebx,0x8(%ebp) 895d
- DEFINE mov____%ecx,(%ebx) 890b
- DEFINE mov____%edi,%ebp 89fd
- DEFINE mov____%edx,%eax 89d0
- DEFINE mov____%edx,%ebx 89d3
- DEFINE mov____%esp,%ebp 89e5
- DEFINE mov____%esp,%edi 89e7
- DEFINE mov____(%eax),%cl 8a08
- DEFINE mov____(%eax),%cx 668b08
- DEFINE mov____(%eax),%eax 8b00
- DEFINE mov____(%eax),%ecx 8b08
- DEFINE mov____(%ebx),%ebx 8b1b
- DEFINE mov____0x32(%eax),%eax 8b80
- DEFINE mov____0x32(%eax),%ebx 8b98
- DEFINE mov____0x32(%ebp),%eax 8b85
- DEFINE mov____0x32(%ebp),%ebx 8b9d
- DEFINE mov____0x32,%eax a1
- DEFINE mov____0x32,%ebx 8b1d
- DEFINE mov____0x8(%eax),%eax 8b40
- DEFINE mov____0x8(%eax),%ebx 8b58
- DEFINE mov____0x8(%ebp),%eax 8b45
- DEFINE mov____0x8(%ebp),%ebp 8b6d
- DEFINE mov____0x8(%ebp),%ebx 8b5d
- DEFINE mov____0x8(%ebp),%ecx 8b4d
- DEFINE mov____0x8(%ebp),%edi 8b7d
- DEFINE mov____0x8(%ebp),%edx 8b55
- DEFINE mov____0x8(%ebp),%esi 8b75
- DEFINE mov____0x8(%ebp),%esp 8b65
- DEFINE movb___%al,0x32 a2
- DEFINE movb___%bl,0x32 881d
- DEFINE movsbl_%al,%eax 0fbec0
- DEFINE movsbl_%bl,%ebx 0fbedb
- DEFINE movswl_%ax,%eax 0fbfc0
- DEFINE movswl_%bx,%ebx 0fbfdb
- DEFINE movw___%ax,0x32 66a3
- DEFINE movw___%bx,0x32 66891d
- DEFINE movzbl_%al,%eax 0fb6c0
- DEFINE movzbl_%bl,%ebx 0fb6db
- DEFINE movzbl_(%eax),%eax 0fb600
- DEFINE movzbl_(%ebx),%ebx 0fb61b
- DEFINE movzbl_0x32(%eax),%eax 0fb680
- DEFINE movzbl_0x8(%eax),%eax 0fb640
- DEFINE movzbl_0x8(%ebp),%eax 0fb645
- DEFINE movzwl_%ax,%eax 0fb7c0
- DEFINE movzwl_%bx,%ebx 0fb7db
- DEFINE movzwl_(%eax),%eax 0fb700
- DEFINE movzwl_(%ebx),%ebx 0fb71b
- DEFINE movzwl_0x32(%eax),%eax 0fb780
- DEFINE movzwl_0x32(%ebp),%eax 0fb785
- DEFINE movzwl_0x8(%eax),%eax 0fb740
- DEFINE mul____%ebx f7e3
- DEFINE mul_____%ebx f7e3
- DEFINE nop 90
- DEFINE not____%eax f7d0
- DEFINE not____%ebx f7d3
- DEFINE or_____%ebx,%eax 09d8
- DEFINE pop____%eax 58
- DEFINE pop____%ebx 5b
- DEFINE pop____%edx 5a
- DEFINE push___$i32 68
- DEFINE push___%eax 50
- DEFINE push___%ebp 55
- DEFINE push___%ebx 53
- DEFINE push___%edx 52
- DEFINE push___(%eax) ff30
- DEFINE push___0x32(%ebp) ffb5
- DEFINE push___0x8(%ebp) ff75
- DEFINE ret c3
- DEFINE sahf 9e
- DEFINE seta___%al 0f97c0
- DEFINE seta___%bl 0f97c3
- DEFINE setae__%al 0f93c0
- DEFINE setae__%bl 0f93c3
- DEFINE setb___%al 0f92c0
- DEFINE setb___%bl 0f92c3
- DEFINE setbe__%al 0f96c0
- DEFINE setbe__%bl 0f96c3
- DEFINE sete___%al 0f94c0
- DEFINE sete___%bl 0f94c3
- DEFINE setg___%al 0f9fc0
- DEFINE setg___%bl 0f9fc3
- DEFINE setge__%al 0f9dc0
- DEFINE setge__%bl 0f9dc3
- DEFINE setl___%al 0f9cc0
- DEFINE setl___%bl 0f9cc3
- DEFINE setle__%al 0f9ec0
- DEFINE setle__%bl 0f9ec3
- DEFINE setne__%al 0f95c0
- DEFINE setne__%bl 0f95c3
- DEFINE shl____$i8,%eax c1e0
- DEFINE shl____$i8,%ebx c1e3
- DEFINE shl____%cl,%eax d3e0
- DEFINE shl____%cl,%ebx d3e3
- DEFINE shr____%cl,%eax d3e8
- DEFINE sub____$8,%esp 83ec
- DEFINE sub____$i32,%esp 81ec
- DEFINE sub____%al,%dl 28d0
- DEFINE sub____%dl,%al 28c2
- DEFINE sub____%ebx,%eax 29d8
- DEFINE test___%al,%al 84c0
- DEFINE test___%eax,%eax 85c0
- DEFINE test___%ebx,%ebx 85db
- DEFINE xchg___%eax,%ebx 93
- DEFINE xchg___%eax,(%esp) 870424
- DEFINE xchg___%ebx,(%esp) 871c24
- DEFINE xor____$i32,%eax 35
- DEFINE xor____$i8,%ah 80f4
- DEFINE xor____%eax,%eax 31c0
- DEFINE xor____%ebx,%eax 31d8
- DEFINE xor____%ebx,%ebx 31db
- DEFINE xor____%edx,%edx 31d2
- # Enough for all of Mes + Mes C Libray when using all registers, i.e.,
- # non-reduced instruction set
- #DEFINE add____$i32,%ecx 81c1
- #DEFINE add____$i32,%edx 81c2
- #DEFINE add____$i32,%esi 81c6
- #DEFINE add____$i8,%ecx 83c1
- #DEFINE add____$i8,%edx 83c2
- #DEFINE add____$i8,%esi 83c6
- #DEFINE add____$i8,(%ecx) 8301
- #DEFINE add____$i8,(%edx) 8302
- #DEFINE add____%ecx,%ebx 01cb
- #DEFINE add____%ecx,%ecx 01c9
- #DEFINE add____%edx,%eax 01d0
- #DEFINE add____%edx,%ecx 01d1
- #DEFINE add____%edx,%edx 01d2
- #DEFINE add____%esi,%edx 01f2
- #DEFINE and____$i32,%ecx 81e1
- #DEFINE and____$i32,%edx 81e2
- #DEFINE and____%edx,%eax 21d0
- #DEFINE and____(%edx),%eax 2302
- #DEFINE cmp____%edx,%eax 39d0
- #DEFINE idiv___%ecx f7f9
- #DEFINE lea____0x32(%ebp),%edx 8d95
- #DEFINE lea____0x8(%ebp),%edx 8d55
- #DEFINE mov____$i32,%ecx b9
- #DEFINE mov____$i32,%edx ba
- #DEFINE mov____$i32,%esi be
- #DEFINE mov____%al,(%edx) 8802
- #DEFINE mov____%al,0x8(%edx) 8842
- #DEFINE mov____%ax,(%edx) 668902
- #DEFINE mov____%ax,0x32(%edx) 668982
- #DEFINE mov____%ax,0x8(%edx) 668942
- #DEFINE mov____%bl,(%ecx) 8819
- #DEFINE mov____%eax,%edx 89c2
- #DEFINE mov____%eax,%esi 89c6
- #DEFINE mov____%eax,(%ecx) 8901
- #DEFINE mov____%eax,(%edx) 8902
- #DEFINE mov____%eax,0x32(%edx) 8982
- #DEFINE mov____%eax,0x8(%edx) 8942
- #DEFINE mov____%ebp,%ecx 89e9
- #DEFINE mov____%ebp,%edx 89ea
- #DEFINE mov____%ebp,%esi 89ee
- #DEFINE mov____%ebx,(%ecx) 8919
- #DEFINE mov____%ebx,0x8(%edx) 895a
- #DEFINE mov____%ecx,%eax 89c8
- #DEFINE mov____%ecx,%ecx 89c9
- #DEFINE mov____%ecx,%edx 89ca
- #DEFINE mov____%ecx,(%eax) 8908
- #DEFINE mov____%ecx,(%edx) 890a
- #DEFINE mov____%ecx,0x32(%ebp) 898d
- #DEFINE mov____%ecx,0x8(%ebp) 894d
- #DEFINE mov____%edi,%ebx 89fb
- #DEFINE mov____%edx,%ecx 89d1
- #DEFINE mov____%edx,(%eax) 8910
- #DEFINE mov____%edx,0x32(%ebp) 8995
- #DEFINE mov____%edx,0x8(%ebp) 8955
- #DEFINE mov____%esi,%eax 89f0
- #DEFINE mov____%esi,%ebx 89f3
- #DEFINE mov____(%ecx),%ecx 8b09
- #DEFINE mov____(%edx),%eax 8b02
- #DEFINE mov____(%edx),%ecx 8b0a
- #DEFINE mov____(%edx),%edx 8b12
- #DEFINE mov____0x32(%eax),%ecx 8b88
- #DEFINE mov____0x32(%ebp),%ecx 8b8d
- #DEFINE mov____0x32(%ebp),%edx 8b95
- #DEFINE mov____0x32,%ecx 8b0d
- #DEFINE mov____0x32,%edx 8b15
- #DEFINE mov____0x8(%eax),%ecx 8b48
- #DEFINE movsbl_%cl,%ecx 0fbec9
- #DEFINE movsbl_%dl,%edx 0fbed2
- #DEFINE movswl_%cx,%ecx 0fbfc9
- #DEFINE movzbl_%cl,%ecx 0fb6c9
- #DEFINE movzbl_%dl,%edx 0fb6d2
- #DEFINE movzbl_(%eax),%edx 0fb610
- #DEFINE movzbl_(%ecx),%ecx 0fb609
- #DEFINE movzbl_(%edx),%edx 0fb612
- #DEFINE movzwl_(%ecx),%ecx 0fb709
- #DEFINE mul____%ecx f7e1
- #DEFINE mul____%edi f7e7
- #DEFINE mul____%edx f7e2
- #DEFINE mul____%esi f7e6
- #DEFINE or_____%ecx,%ebx 09cb
- #DEFINE or_____%edx,%eax 09d0
- #DEFINE or_____(%edx),%eax 0b02
- #DEFINE pop____%ecx 59
- #DEFINE pop____%edi 5f
- #DEFINE push___%ecx 51
- #DEFINE push___%edi 57
- #DEFINE push___%esi 56
- #DEFINE shl____$i8,%ecx c1e1
- #DEFINE shl____$i8,%edx c1e2
- #DEFINE shl____%cl,%ecx d3e1
- #DEFINE sub____%eax,%edx 29c2
- #DEFINE sub____%ecx,%ebx 29cb
- #DEFINE sub____%edx,%eax 29d0
- #DEFINE sub____%edx,%ecx 29d1
- #DEFINE xchg___%ebx,%ecx 87d9
- #DEFINE xchg___%ecx,%edx 87ca
- #DEFINE xor____%ecx,%ecx 31c9
- #DEFINE xor____%edx,%eax 31d0
- # deprecated, remove after 0.18
- DEFINE sub____%esp,$i32 81ec
- DEFINE sub____%esp,$i8 83ec
- DEFINE SYS_exit 01000000
- DEFINE SYS_fork 02000000
- DEFINE SYS_read 03000000
- DEFINE SYS_rmdir 28000000
- DEFINE SYS_write 04000000
- DEFINE SYS_open 05000000
- DEFINE SYS_close 06000000
- DEFINE SYS_waitpid 07000000
- DEFINE SYS_unlink 0a000000
- DEFINE SYS_execve 0b000000
- DEFINE SYS_chmod 0f000000
- DEFINE SYS_lseek 13000000
- DEFINE SYS_access 21000000
- DEFINE SYS_brk 2d000000
- DEFINE SYS_ioctl 36000000
- DEFINE SYS_stat 6a000000
- DEFINE SYS_fsync 76000000
- DEFINE SYS_getcwd b7000000
|