From 104e521c04d1a0cad9c68fb11e250e12ad8917ef Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Wed, 17 Oct 2018 07:08:47 -0700 Subject: 4709 --- html/subx/050_write.subx.html | 105 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 html/subx/050_write.subx.html (limited to 'html/subx/050_write.subx.html') diff --git a/html/subx/050_write.subx.html b/html/subx/050_write.subx.html new file mode 100644 index 00000000..ec944002 --- /dev/null +++ b/html/subx/050_write.subx.html @@ -0,0 +1,105 @@ + + + + +Mu - subx/050_write.subx + + + + + + + + + + +
+ 1 # _write: write to a file descriptor
+ 2 
+ 3 == code
+ 4 
+ 5 # instruction                     effective address                                                   operand     displacement    immediate
+ 6 # op          subop               mod             rm32          base        index         scale       r32
+ 7 # 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
+ 8 
+ 9 # main:  (manual test if this is the last file loaded)
+10   # syscall(exit, 0) -- can't test these functions just yet
+11   bb/copy-to-EBX  0/imm32
+12   b8/copy-to-EAX  1/imm32
+13   cd/syscall  0x80/imm8
+14 
+15 _write:  # fd : int, s : (address array byte) -> <void>
+16   # prolog
+17   55/push-EBP
+18   89/copy                         3/mod/direct    5/rm32/EBP    .           .             .           4/r32/ESP   .               .                 # copy ESP to EBP
+19   # save registers
+20   50/push-EAX
+21   51/push-ECX
+22   52/push-EDX
+23   53/push-EBX
+24   # syscall(write, fd, (data) s+4, (size) *s)
+25     # fd : EBX
+26   8b/copy                         1/mod/*+disp8   4/rm32/sib    5/base/EBP  4/index/none  .           3/r32/EBX   8/disp8         .                 # copy *(EBP+8) to EBX
+27     # data : ECX = s+4
+28   8b/copy                         1/mod/*+disp8   4/rm32/sib    5/base/EBP  4/index/none  .           1/r32/ECX   0xc/disp8       .                 # copy *(EBP+12) to ECX
+29   81          0/subop/add         3/mod/direct    1/rm32/ECX    .           .             .           .           .               4/imm32           # add to ECX
+30     # size : EDX = *s
+31   8b/copy                         1/mod/*+disp8   4/rm32/sib    5/base/EBP  4/index/none  .           2/r32/EDX   0xc/disp8       .                 # copy *(EBP+12) to EDX
+32   8b/copy                         0/mod/indirect  2/rm32/EDX    .           .             .           2/r32/EDX   .               .                 # copy *EDX to EDX
+33     # syscall
+34   b8/copy-to-EAX  4/imm32/write
+35   cd/syscall  0x80/imm8
+36   # restore registers
+37   5b/pop-to-EBX
+38   5a/pop-to-EDX
+39   59/pop-to-ECX
+40   58/pop-to-EAX
+41   # epilog
+42   89/copy                         3/mod/direct    4/rm32/ESP    .           .             .           5/r32/EBP   .               .                 # copy EBP to ESP
+43   5d/pop-to-EBP
+44   c3/return
+45 
+46 # vim:nowrap:textwidth=0
+
+ + + -- cgit 1.4.1-2-gfad0