diff options
author | Kartik Agaram <vc@akkartik.com> | 2018-08-03 23:23:39 -0700 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2018-08-03 23:23:39 -0700 |
commit | 12adb3da8a8979c207b2e7fd17bdb05bacefeb44 (patch) | |
tree | 12c1a96ffe7feb8b41613e0b2cead1c3919db8d9 /subx/ex5.subx | |
parent | 85173b622021de062706df81947df7ae2300b654 (diff) | |
download | mu-12adb3da8a8979c207b2e7fd17bdb05bacefeb44.tar.gz |
4467
Diffstat (limited to 'subx/ex5.subx')
-rw-r--r-- | subx/ex5.subx | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/subx/ex5.subx b/subx/ex5.subx index bdbfe6f4..e4a2db81 100644 --- a/subx/ex5.subx +++ b/subx/ex5.subx @@ -5,41 +5,41 @@ # $ subx run ex5 == 0x08048054 # code segment, after leaving room for ELF header and segment headers -# instruction effective address operand 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 +# instruction effective address operand 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 ## function main # prolog - 55/push # push EBP - 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP # copy ESP to EBP + 55/push # push EBP + 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP # copy ESP to EBP # allocate x on the stack - 81 5/subop/subtract 3/mod/direct 4/rm32/ESP 4/imm32 # subtract 4 bytes from ESP + 81 5/subop/subtract 3/mod/direct 4/rm32/ESP 4/imm32 # subtract 4 bytes from ESP ## read(stdin, x, 1) # fd = 0 (stdin) - bb/copy 0/imm32 # copy 0 to EBX + bb/copy 0/imm32 # copy 0 to EBX # initialize x (location to write result to) - 89/copy 3/mod/direct 1/rm32/ECX 5/r32/EBP # copy EBP to ECX + 89/copy 3/mod/direct 1/rm32/ECX 5/r32/EBP # copy EBP to ECX # size = 1 character - ba/copy 1/imm32 # copy 1 to EDX + ba/copy 1/imm32 # copy 1 to EDX # read(fd, x, size) - b8/copy 3/imm32 # copy 3 to EAX - cd/syscall 0x80/imm8 # int 80h + b8/copy 3/imm32 # copy 3 to EAX + cd/syscall 0x80/imm8 # int 80h ## write(stdout, x, 1) # fd = 1 (stdout) - bb/copy 1/imm32 # copy 1 to EBX + bb/copy 1/imm32 # copy 1 to EBX # initialize x (location to read from) - 89/copy 3/mod/direct 1/rm32/ECX 5/r32/EBP # copy EBP to ECX + 89/copy 3/mod/direct 1/rm32/ECX 5/r32/EBP # copy EBP to ECX # size = 1 character - ba/copy 1/imm32 # copy 1 to EDX + ba/copy 1/imm32 # copy 1 to EDX # write(fd, x, size) - b8/copy 4/imm32 # copy 4 to EAX - cd/syscall 0x80/imm8 # int 80h + b8/copy 4/imm32 # copy 4 to EAX + cd/syscall 0x80/imm8 # int 80h ## exit(EBX) - b8/copy 1/imm32 # copy 1 to EAX - cd/syscall 0x80/imm8 # int 80h + b8/copy 1/imm32 # copy 1 to EAX + cd/syscall 0x80/imm8 # int 80h # vim:ft=subx:nowrap |