diff options
author | Kartik Agaram <vc@akkartik.com> | 2018-09-22 23:19:39 -0700 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2018-09-22 23:19:39 -0700 |
commit | 7d4e351a0d1e3c4e71b58d3218b4e6b833f542f2 (patch) | |
tree | 8f8b8e62848b76ce5debf3ef89ad6f0e1c381de8 /subx/examples | |
parent | 2b36eee9b13eb16fb2e4b05d7e26f6d09f431912 (diff) | |
download | mu-7d4e351a0d1e3c4e71b58d3218b4e6b833f542f2.tar.gz |
4503
Include LEA (load effective address) in the SubX subset of x86 ISA.
Diffstat (limited to 'subx/examples')
-rwxr-xr-x | subx/examples/ex5 | bin | 138 -> 139 bytes | |||
-rw-r--r-- | subx/examples/ex5.subx | 7 | ||||
-rwxr-xr-x | subx/examples/ex8 | bin | 149 -> 143 bytes | |||
-rw-r--r-- | subx/examples/ex8.subx | 6 |
4 files changed, 2 insertions, 11 deletions
diff --git a/subx/examples/ex5 b/subx/examples/ex5 index 536ddcd6..906846db 100755 --- a/subx/examples/ex5 +++ b/subx/examples/ex5 Binary files differdiff --git a/subx/examples/ex5.subx b/subx/examples/ex5.subx index faecdcfb..51bc19a0 100644 --- a/subx/examples/ex5.subx +++ b/subx/examples/ex5.subx @@ -10,9 +10,6 @@ # 1-3 bytes 3 bits 2 bits 3 bits 3 bits 3 bits 2 bits 2 bits 0/1/2/4 bytes 0/1/2/4 bytes # main: - # prolog - 55/push-EBP - 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . . # copy ESP to EBP # allocate x on the stack 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 4/imm32 # subtract 4 bytes from ESP @@ -20,7 +17,7 @@ # fd = 0 (stdin) bb/copy . . . . . . . 0/imm32 # copy 0 to EBX # initialize x (location to write result to) - 89/copy 3/mod/direct 1/rm32/ECX . . . 5/r32/EBP . . # copy EBP to ECX + 8d/copy-address 1/mod/*+disp8 4/rm32/sib 4/base/ESP 4/index/none 1/r32/ECX 4/disp8 . # copy ESP+4 to ECX # size = 1 character ba/copy . . . . . . . 1/imm32 # copy 1 to EDX # read(fd, x, size) @@ -31,7 +28,7 @@ # fd = 1 (stdout) bb/copy . . . . . . . 1/imm32 # copy 1 to EBX # initialize x (location to read from) - 89/copy 3/mod/direct 1/rm32/ECX . . . 5/r32/EBP . . # copy EBP to ECX + 8d/copy-address 1/mod/*+disp8 4/rm32/sib 4/base/ESP 4/index/none 1/r32/ECX 4/disp8 . # copy ESP+4 to ECX # size = 1 character ba/copy . . . . . . . 1/imm32 # copy 1 to EDX # write(fd, x, size) diff --git a/subx/examples/ex8 b/subx/examples/ex8 index c0aa5806..463f83b8 100755 --- a/subx/examples/ex8 +++ b/subx/examples/ex8 Binary files differdiff --git a/subx/examples/ex8.subx b/subx/examples/ex8.subx index 8d9efcd7..fb35dc7e 100644 --- a/subx/examples/ex8.subx +++ b/subx/examples/ex8.subx @@ -21,18 +21,12 @@ # var s = argv[1] (EBX) 8b/copy 1/mod/*+disp8 4/rm32/sib 4/base/ESP 4/index/none 3/r32/EBX 8/disp8 . # copy *(ESP+8) to EBX # call ascii_length(EBX) - # prepare call - 55/push-EBP - 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . . # copy ESP to EBP # push args 53/push-EBX # call e8/call ascii_length/disp32 # discard args 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32 # add 4 to ESP - # clean up after call - 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . . # copy EBP to ESP - 5d/pop-to-EBP # exit(EAX) 89/copy 3/mod/direct 3/rm32/EBX . . . 0/r32/EAX . . # copy EAX to EBX |