mu/subx/ex6.subx

38 lines
2.1 KiB
Plaintext

## print out a (global variable) string to stdout
#
# To run:
# $ subx translate ex6.subx ex6
# $ subx run ex6
# Hello, world!
== 0x08048074 # 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
## write(stdout, x, 1)
# fd = 1 (stdout)
bb/copy 1/imm32 # copy 1 to EBX
# set location to write out
b9/copy 0x08049097/imm32 # copy to ECX
# set size
ba/copy 0x08049093/imm32 # copy to EDX
8b/copy 0/mod/indirect 2/rm32/edx 2/r32/edx # copy *EDX to EDX
# syscall = write
b8/copy 4/imm32 # copy 4 to EAX
# call
cd/syscall 0x80/imm8 # int 80h
## exit(EBX)
b8/copy 1/imm32 # copy 1 to EAX
cd/syscall 0x80/imm8 # int 80h
== 0x08049093
# size of string
0e 00 00 00
# string
48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 21 0a
# h e l l o , ␣ w o r l d ! newline
# vim:ft=subx:nowrap