From 3350c34a74844e21ea69077e01efff3bae64bdcd Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Tue, 23 Mar 2021 17:31:08 -0700 Subject: . --- html/linux/119error-byte.subx.html | 154 +++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 html/linux/119error-byte.subx.html (limited to 'html/linux/119error-byte.subx.html') diff --git a/html/linux/119error-byte.subx.html b/html/linux/119error-byte.subx.html new file mode 100644 index 00000000..d5f02960 --- /dev/null +++ b/html/linux/119error-byte.subx.html @@ -0,0 +1,154 @@ + + + + +Mu - linux/119error-byte.subx + + + + + + + + + + +https://github.com/akkartik/mu/blob/main/linux/119error-byte.subx +
+ 1 # Print an error message followed by the text representation of a byte. Then exit.
+ 2 
+ 3 == code
+ 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 #? Entry:  # manual test
+ 9 #?     # . var ed/eax: exit-descriptor
+10 #?     81          5/subop/subtract    3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # subtract from esp
+11 #?     89/copy                         3/mod/direct    0/rm32/eax    .           .             .           4/r32/esp   .               .                 # copy esp to eax
+12 #?     # . configure ed to really exit()
+13 #?     # . . ed->target = 0
+14 #?     c7          0/subop/copy        0/mod/direct    0/rm32/eax    .           .             .           .           .               0/imm32           # copy to *eax
+15 #?     # . error-byte(ed, Stdout, msg, 34)
+16 #?     68/push  0x34/imm32
+17 #?     68/push  "abc"/imm32
+18 #?     68/push  Stderr/imm32
+19 #?     50/push-eax
+20 #?     e8/call  error-byte/disp32
+21 #?     # . syscall(exit, Num-test-failures)
+22 #?     8b/copy                         0/mod/indirect  5/rm32/.disp32            .             .           3/r32/ebx   Num-test-failures/disp32          # copy *Num-test-failures to ebx
+23 #?     e8/call  syscall_exit/disp32
+24 
+25 # write(out, "Error: "+msg+": "+byte) then stop(ed, 1)
+26 error-byte:  # ed: (addr exit-descriptor), out: (addr buffered-file), msg: (addr array byte), n: byte
+27     # . prologue
+28     55/push-ebp
+29     89/copy                         3/mod/direct    5/rm32/ebp    .           .             .           4/r32/esp   .               .                 # copy esp to ebp
+30     # write-buffered(out, "Error: ")
+31     # . . push args
+32     68/push  "Error: "/imm32
+33     ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp    .           .             .           .           0xc/disp8       .                 # push *(ebp+12)
+34     # . . call
+35     e8/call  write-buffered/disp32
+36     # . . discard args
+37     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
+38     # write-buffered(out, msg)
+39     # . . push args
+40     ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp    .           .             .           .           0x10/disp8      .                 # push *(ebp+16)
+41     ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp    .           .             .           .           0xc/disp8       .                 # push *(ebp+12)
+42     # . . call
+43     e8/call  write-buffered/disp32
+44     # . . discard args
+45     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
+46     # write-buffered(out, ": ")
+47     # . . push args
+48     68/push  ": "/imm32
+49     ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp    .           .             .           .           0xc/disp8       .                 # push *(ebp+12)
+50     # . . call
+51     e8/call  write-buffered/disp32
+52     # . . discard args
+53     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
+54     # write-byte-hex-buffered(out, byte)
+55     # . . push args
+56     ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp    .           .             .           .           0x14/disp8      .                 # push *(ebp+20)
+57     ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp    .           .             .           .           0xc/disp8       .                 # push *(ebp+12)
+58     # . . call
+59     e8/call  write-byte-hex-buffered/disp32
+60     # . . discard args
+61     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
+62     # write-buffered(out, Newline)
+63     # . . push args
+64     68/push  Newline/imm32
+65     ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp    .           .             .           .           0xc/disp8       .                 # push *(ebp+12)
+66     # . . call
+67     e8/call  write-buffered/disp32
+68     # . . discard args
+69     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
+70     # flush(out)
+71     # . . push args
+72     ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp    .           .             .           .           0xc/disp8       .                 # push *(ebp+12)
+73     # . . call
+74     e8/call  flush/disp32
+75     # . . discard args
+76     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
+77     # stop(ed, 1)
+78     # . . push args
+79     68/push  1/imm32
+80     ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp    .           .             .           .           8/disp8         .                 # push *(ebp+8)
+81     # . . call
+82     e8/call  stop/disp32
+83     # should never get past this point
+84 $error-byte:dead-end:
+85     # . epilogue
+86     89/copy                         3/mod/direct    4/rm32/esp    .           .             .           5/r32/ebp   .               .                 # copy ebp to esp
+87     5d/pop-to-ebp
+88     c3/return
+89 
+90 # . . vim:nowrap:textwidth=0
+
+ + + -- cgit 1.4.1-2-gfad0