From 7d4e351a0d1e3c4e71b58d3218b4e6b833f542f2 Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Sat, 22 Sep 2018 23:19:39 -0700 Subject: 4503 Include LEA (load effective address) in the SubX subset of x86 ISA. --- subx/examples/ex5 | Bin 138 -> 139 bytes subx/examples/ex5.subx | 7 ++----- subx/examples/ex8 | Bin 149 -> 143 bytes subx/examples/ex8.subx | 6 ------ 4 files changed, 2 insertions(+), 11 deletions(-) (limited to 'subx/examples') diff --git a/subx/examples/ex5 b/subx/examples/ex5 index 536ddcd6..906846db 100755 Binary files a/subx/examples/ex5 and b/subx/examples/ex5 differ diff --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 Binary files a/subx/examples/ex8 and b/subx/examples/ex8 differ diff --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 -- cgit 1.4.1-2-gfad0