From 14a380525ed2df295463b1906b718cb26871df3b Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Fri, 30 Nov 2018 16:54:01 -0800 Subject: 4809 - subx: html with 5 colors for comments --- html/subx/050_write.subx.html | 91 +++++++++++++++++++++++-------------------- 1 file changed, 48 insertions(+), 43 deletions(-) (limited to 'html/subx/050_write.subx.html') diff --git a/html/subx/050_write.subx.html b/html/subx/050_write.subx.html index 1d3ba052..369c7b33 100644 --- a/html/subx/050_write.subx.html +++ b/html/subx/050_write.subx.html @@ -11,12 +11,17 @@ @@ -55,48 +60,48 @@ if ('onhashchange' in window) { 1 # _write: write to a file descriptor 2 3 == code - 4 # instruction effective address operand displacement immediate - 5 # op subop mod rm32 base index scale r32 - 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 + 4 # instruction effective address register displacement immediate + 5 # . op subop mod rm32 base index scale r32 + 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 7 8 # main: - 9 # syscall(exit, 0) -- can't test _write just yet -10 bb/copy-to-EBX 0/imm32 -11 b8/copy-to-EAX 1/imm32 -12 cd/syscall 0x80/imm8 + 9 # syscall(exit, 0) -- can't test _write just yet +10 bb/copy-to-EBX 0/imm32 +11 b8/copy-to-EAX 1/imm32 +12 cd/syscall 0x80/imm8 13 14 _write: # fd : int, s : (address array byte) -> <void> -15 # prolog -16 55/push-EBP -17 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . . # copy ESP to EBP -18 # save registers -19 50/push-EAX -20 51/push-ECX -21 52/push-EDX -22 53/push-EBX -23 # syscall(write, fd, (data) s+4, (size) *s) -24 # fd : EBX -25 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none . 3/r32/EBX 8/disp8 . # copy *(EBP+8) to EBX -26 # data : ECX = s+4 -27 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none . 1/r32/ECX 0xc/disp8 . # copy *(EBP+12) to ECX -28 81 0/subop/add 3/mod/direct 1/rm32/ECX . . . . . 4/imm32 # add to ECX -29 # size : EDX = *s -30 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none . 2/r32/EDX 0xc/disp8 . # copy *(EBP+12) to EDX -31 8b/copy 0/mod/indirect 2/rm32/EDX . . . 2/r32/EDX . . # copy *EDX to EDX -32 # syscall -33 b8/copy-to-EAX 4/imm32/write -34 cd/syscall 0x80/imm8 -35 # restore registers -36 5b/pop-to-EBX -37 5a/pop-to-EDX -38 59/pop-to-ECX -39 58/pop-to-EAX -40 # epilog -41 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . . # copy EBP to ESP -42 5d/pop-to-EBP -43 c3/return +15 # . prolog +16 55/push-EBP +17 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . . # copy ESP to EBP +18 # . save registers +19 50/push-EAX +20 51/push-ECX +21 52/push-EDX +22 53/push-EBX +23 # syscall(write, fd, (data) s+4, (size) *s) +24 # . fd : EBX +25 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none . 3/r32/EBX 8/disp8 . # copy *(EBP+8) to EBX +26 # . data : ECX = s+4 +27 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none . 1/r32/ECX 0xc/disp8 . # copy *(EBP+12) to ECX +28 81 0/subop/add 3/mod/direct 1/rm32/ECX . . . . . 4/imm32 # add to ECX +29 # . size : EDX = *s +30 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none . 2/r32/EDX 0xc/disp8 . # copy *(EBP+12) to EDX +31 8b/copy 0/mod/indirect 2/rm32/EDX . . . 2/r32/EDX . . # copy *EDX to EDX +32 # . syscall +33 b8/copy-to-EAX 4/imm32/write +34 cd/syscall 0x80/imm8 +35 # . restore registers +36 5b/pop-to-EBX +37 5a/pop-to-EDX +38 59/pop-to-ECX +39 58/pop-to-EAX +40 # . epilog +41 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . . # copy EBP to ESP +42 5d/pop-to-EBP +43 c3/return 44 -45 # vim:nowrap:textwidth=0 +45 # . . vim:nowrap:textwidth=0 -- cgit 1.4.1-2-gfad0