### GNU Mes --- Maxwell Equations of Software ### Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen ### ### 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 . # reduced instruction set: eax, ebx (some ecx for shift, edx for mul, div) # 182 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 cmp____$0x32,%eax 3d DEFINE cmp____$i32,%eax 3d DEFINE cmp____$i8,%eax 83f8 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____%al,(%ebx) 8803 DEFINE mov____%al,0x8(%ebp) 8845 DEFINE mov____%ax,(%ebx) 668903 DEFINE mov____%ax,0x8(%ebp) 668945 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____%edx,%eax 89d0 DEFINE mov____%edx,%ebx 89d3 DEFINE mov____%esp,%ebp 89e5 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 movsbl_%al,%eax 0fbec0 DEFINE movsbl_%bl,%ebx 0fbedb DEFINE movswl_%ax,%eax 0fbfc0 DEFINE movswl_%bx,%ebx 0fbfdb 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_(%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___%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