diff options
author | Kartik Agaram <vc@akkartik.com> | 2020-04-21 23:41:23 -0700 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2020-04-22 16:34:08 -0700 |
commit | 84a02972294a2f7b3b50bca75e7ebf6a488419df (patch) | |
tree | 142ab57998bdd6079a8ad2f97fd71a989a5acc9d /080zero-out.subx | |
parent | 5170e27ce841ee00f316c499a179ae9d24228bbf (diff) | |
download | mu-84a02972294a2f7b3b50bca75e7ebf6a488419df.tar.gz |
6208
Diffstat (limited to '080zero-out.subx')
-rw-r--r-- | 080zero-out.subx | 84 |
1 files changed, 0 insertions, 84 deletions
diff --git a/080zero-out.subx b/080zero-out.subx deleted file mode 100644 index 681dd621..00000000 --- a/080zero-out.subx +++ /dev/null @@ -1,84 +0,0 @@ -# Fill a region of memory with zeroes. - -== code -# instruction effective address register displacement immediate -# . op subop mod rm32 base index scale r32 -# . 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 - -zero-out: # start: (addr byte), len: int - # pseudocode: - # curr/esi = start - # i/ecx = 0 - # while true - # if (i >= len) break - # *curr = 0 - # ++curr - # ++i - # - # . prologue - 55/push-ebp - 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp - # . save registers - 50/push-eax - 51/push-ecx - 52/push-edx - 56/push-esi - # curr/esi = start - 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 . # copy *(ebp+8) to esi - # var i/ecx: int = 0 - 31/xor 3/mod/direct 1/rm32/ecx . . . 1/r32/ecx . . # clear ecx - # edx = len - 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 2/r32/edx 0xc/disp8 . # copy *(ebp+12) to edx -$zero-out:loop: - # if (i >= len) break - 39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx - 7d/jump-if->= $zero-out:end/disp8 - # *curr = 0 - c6 0/subop/copy 0/mod/direct 6/rm32/esi . . . . . 0/imm8 # copy byte to *esi - # ++curr - 46/increment-esi - # ++i - 41/increment-ecx - eb/jump $zero-out:loop/disp8 -$zero-out:end: - # . restore registers - 5e/pop-to-esi - 5a/pop-to-edx - 59/pop-to-ecx - 58/pop-to-eax - # . epilogue - 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . . # copy ebp to esp - 5d/pop-to-ebp - c3/return - -test-zero-out: - # . prologue - 55/push-ebp - 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp - # region/ecx = 34, 35, 36, 37 - 68/push 0x37363534/imm32 - 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . . # copy esp to ecx - # zero-out(ecx, 3) - # . . push args - 68/push 3/imm32/len - 51/push-ecx - # . . call - e8/call zero-out/disp32 - # . . discard args - 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp - # first 3 bytes cleared, fourth left alone - # . check-ints-equal(*ecx, 0x37000000, msg) - # . . push args - 68/push "F - test-zero-out"/imm32 - 68/push 0x37000000/imm32 - ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . . # push *ecx - # . . call - e8/call check-ints-equal/disp32 - # . . discard args - 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp - # . epilogue - 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . . # copy ebp to esp - 5d/pop-to-ebp - c3/return - -# . . vim:nowrap:textwidth=0 |