From 91dab3e1a499cac50abd146ce849d3dab94229ab Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Mon, 3 Dec 2018 12:03:23 -0800 Subject: 4824 --- subx/053new_segment.subx | 14 +++++++------- subx/examples/ex12.subx | 4 ++-- subx/examples/ex7.subx | 14 +++++++------- 3 files changed, 16 insertions(+), 16 deletions(-) (limited to 'subx') diff --git a/subx/053new_segment.subx b/subx/053new_segment.subx index efbfc1a3..27fd8ea1 100644 --- a/subx/053new_segment.subx +++ b/subx/053new_segment.subx @@ -12,33 +12,33 @@ # . . call e8/call new-segment/disp32 # . . discard args - 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32 # add to ESP + 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32 # add to ESP # write to *EAX to check that we have access to the newly-allocated segment - c7/copy 0/mod/direct 0/rm32/EAX . . . . . 0x34/imm32 # copy to *EAX + c7/copy 0/mod/direct 0/rm32/EAX . . . . . 0x34/imm32 # copy to *EAX # syscall(exit, EAX) - 89/copy 3/mod/direct 3/rm32/EBX . . . 0/r32/EAX . . # copy EAX to EBX + 89/copy 3/mod/direct 3/rm32/EBX . . . 0/r32/EAX . . # copy EAX to EBX b8/copy-to-EAX 1/imm32/exit cd/syscall 0x80/imm8 new-segment: # len : int -> address # . prolog 55/push-EBP - 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . . # copy ESP to EBP + 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . . # copy ESP to EBP 53/push-EBX # copy len to _mmap-new-segment->len # TODO: compute _mmap-new-segment+4 before runtime - 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none . 0/r32/EAX 8/disp8 . # copy *(EBP+8) to EAX + 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none . 0/r32/EAX 8/disp8 . # copy *(EBP+8) to EAX bb/copy-to-EBX _mmap-new-segment/imm32 - 89/copy 1/mod/*+disp8 3/rm32/EBX . . . 0/r32/EAX 4/disp8 . # copy EAX to *(EBX+4) + 89/copy 1/mod/*+disp8 3/rm32/EBX . . . 0/r32/EAX 4/disp8 . # copy EAX to *(EBX+4) # mmap(_mmap-new-segment) bb/copy-to-EBX _mmap-new-segment/imm32 b8/copy-to-EAX 0x5a/imm32/mmap cd/syscall 0x80/imm8 # . epilog 5b/pop-to-EBX - 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . . # copy EBP to ESP + 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . . # copy EBP to ESP 5d/pop-to-EBP c3/return diff --git a/subx/examples/ex12.subx b/subx/examples/ex12.subx index 3b101379..6d17a39f 100644 --- a/subx/examples/ex12.subx +++ b/subx/examples/ex12.subx @@ -17,10 +17,10 @@ cd/syscall 0x80/imm8 # write to *EAX to check that we have access to the newly-allocated segment - c7/copy 0/mod/direct 0/rm32/EAX . . . . . 0x34/imm32 # copy to *EAX + c7/copy 0/mod/direct 0/rm32/EAX . . . . . 0x34/imm32 # copy to *EAX # syscall(exit, EAX) - 89/copy 3/mod/direct 3/rm32/EBX . . . 0/r32/EAX . . # copy EAX to EBX + 89/copy 3/mod/direct 3/rm32/EBX . . . 0/r32/EAX . . # copy EAX to EBX b8/copy-to-EAX 1/imm32/exit cd/syscall 0x80/imm8 diff --git a/subx/examples/ex7.subx b/subx/examples/ex7.subx index e28ff89b..4355910a 100644 --- a/subx/examples/ex7.subx +++ b/subx/examples/ex7.subx @@ -30,12 +30,12 @@ cd/syscall 0x80/imm8 # save stream bb/copy-to-EBX Stream/imm32 - 89/copy 0/mod/indirect 3/rm32/EBX . . . 0/r32/EAX . . # copy EAX to *EBX + 89/copy 0/mod/indirect 3/rm32/EBX . . . 0/r32/EAX . . # copy EAX to *EBX # syscall(write, Stream, "a", 1) # . load stream bb/copy-to-EBX Stream/imm32 - 8b/copy 0/mod/indirect 3/rm32/EBX . . . 3/r32/EBX . . # copy *EBX to EBX + 8b/copy 0/mod/indirect 3/rm32/EBX . . . 3/r32/EBX . . # copy *EBX to EBX # . b9/copy-to-ECX A/imm32 ba/copy-to-EDX 1/imm32/size @@ -45,7 +45,7 @@ # syscall(close, Stream) # . load stream bb/copy-to-EBX Stream/imm32 - 8b/copy 0/mod/indirect 3/rm32/EBX . . . 3/r32/EBX . . # copy *EBX to EBX + 8b/copy 0/mod/indirect 3/rm32/EBX . . . 3/r32/EBX . . # copy *EBX to EBX # . b8/copy-to-EAX 6/imm32/close cd/syscall 0x80/imm8 @@ -58,12 +58,12 @@ cd/syscall 0x80/imm8 # . save Stream bb/copy-to-EBX Stream/imm32 - 89/copy 0/mod/indirect 3/rm32/EBX . . . 0/r32/EAX . . # copy EAX to *EBX + 89/copy 0/mod/indirect 3/rm32/EBX . . . 0/r32/EAX . . # copy EAX to *EBX # syscall(read, Stream, B, 1) # . load stream bb/copy-to-EBX Stream/imm32 - 8b/copy 0/mod/indirect 3/rm32/EBX . . . 3/r32/EBX . . # copy *EBX to EBX + 8b/copy 0/mod/indirect 3/rm32/EBX . . . 3/r32/EBX . . # copy *EBX to EBX # . b9/copy-to-ECX B/imm32 ba/copy-to-EDX 1/imm32/size @@ -73,7 +73,7 @@ # syscall(close, Stream) # . load stream bb/copy-to-EBX Stream/imm32 - 8b/copy 0/mod/indirect 3/rm32/EBX . . . 3/r32/EBX . . # copy *EBX to EBX + 8b/copy 0/mod/indirect 3/rm32/EBX . . . 3/r32/EBX . . # copy *EBX to EBX # b8/copy-to-EAX 6/imm32/close cd/syscall 0x80/imm8 @@ -86,7 +86,7 @@ # syscall(exit, b) # . load b bb/copy-to-EBX B/imm32 - 8b/copy 0/mod/indirect 3/rm32/EBX . . . 3/r32/EBX . . # copy *EBX to EBX + 8b/copy 0/mod/indirect 3/rm32/EBX . . . 3/r32/EBX . . # copy *EBX to EBX # b8/copy-to-EAX 1/imm32/exit cd/syscall 0x80/imm8 -- cgit 1.4.1-2-gfad0