1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- /*-*- mode:unix-assembly; indent-tabs-mode:t; tab-width:8; coding:utf-8 -*-│
- │vi: set et ft=asm ts=8 tw=8 fenc=utf-8 :vi│
- ╞══════════════════════════════════════════════════════════════════════════════╡
- │ Copyright 2021 Justine Alexandra Roberts Tunney │
- │ Some size optimisations by Peter Ferrie │
- │ │
- │ Permission to use, copy, modify, and/or distribute this software for │
- │ any purpose with or without fee is hereby granted, provided that the │
- │ above copyright notice and this permission notice appear in all copies. │
- │ │
- │ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
- │ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
- │ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
- │ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
- │ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
- │ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
- │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
- │ PERFORMANCE OF THIS SOFTWARE. │
- ╚─────────────────────────────────────────────────────────────────────────────*/
- // compliant brainf*#k in 99 bytes
- // ++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++
- // ..+++.>>.<-.<.+++.------.--------.>>+.>++.[]$
- .code16
- .globl _start
- _start: mov $0x7e00,%di
- push %di
- Load: xor %ax,%ax
- int $0x16
- stosb
- cmp $'[',%al
- je Lsb
- cmp $']',%al
- je Rsb
- cmp $'$',%al
- jne Load
- pop %si
- Brain: lodsb
- cbw
- mov $0x0e,%bh
- mov (%di),%bl
- sub $'+',%al
- jz Inc # + 43
- dec %ax
- jz Get # , 44
- dec %ax
- jz Dec # - 45
- dec %ax
- jz Put # . 46
- cmp $'>'-'.',%al
- je Right # > 60 14
- cmp $'<'-'.',%al
- je Left # < 62 16
- cmp $']'-'.',%al
- je Loop # ] 91 45
- cmp $'['-'.',%al
- jne Brain # [ 93 47
- Do: cmp $1,%bl
- sbb %bl,%bl
- Loop: test %bl,%bl
- lodsw
- jz Brain
- xchg %ax,%si
- inc %si
- inc %si
- .byte 0x80
- Inc: incb (%di)
- jmp Brain
- Get: int $0x16
- stosb
- Left: dec %di
- .byte 0x80
- Dec: decb (%di)
- .byte 0x3C
- Right: inc %di
- .byte 0x84
- Put: xchg %bx,%ax
- int $0x10
- jmp Brain
- Rsb: pop %si
- mov %di,(%si)
- xchg %si,%ax
- .byte 0x3c
- Lsb: push %di
- stosw
- jmp Load
- Sig: .fill 510 - (. - _start), 1, 0xce
- .word 0xAA55
- .type Sig,@object
|