From: usotsuki@buric.co (Steve Nickolas)
Subject: [TUHS] Discuss of style and design of computer programs from a
Date: Sat, 6 May 2017 16:00:52 -0400 (EDT) [thread overview]
Message-ID: <alpine.BSF.2.02.1705061554080.4621@frieza.hoshinet.org> (raw)
In-Reply-To: <20170506152053.GI12539@yeono.kjorling.se>
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 2530 bytes --]
On Sat, 6 May 2017, Michael Kjörling wrote:
> On 6 May 2017 08:09 -0700, from corey at lod.com (Corey Lindsly):
>> Anyway, I reached one point in the assembly code that I simply could not
>> understand. It seemed like a mistake, and I went through it again and
>> again until I finally realized what it was doing. There was a branch/loop
>> that jumped to the middle of a multi-byte machine instruction, so that
>> branch had to be disassembled and stepped separately until it "synced" up
>> with the other branch again. Maybe this is standard practice in
>> programming (I don't know) but at the time I thought, what kind of evil
>> genius devised this to save a few bytes of memory?
>
> IIRC, that _was_ a common trick at least on machines of that class. It
> did have the potential to save a few bytes, yes (more if the
> instructions were such that you'd get some _other, desired_, behavior
> by jumping into the middle of one with some specific state), but it
> also foiled lots of disassemblers: Simply disassembling a binary from
> start to finish would yield nonsense in those locations, as you
> experienced. It thus basically forced you to single-step those
> instructions to figure out what was going on from the binary.
>
> I'm pretty sure it works on every architecture with variable-length
> instructions and arbitrary jump capability, as long as you have
> control over the specific machine instructions generated (such as if
> you are programming in assembler). Of course, it _is_ also a total
> nightmare to maintain such code.
>
> I would absolutely not say that doing something like that is standard
> practice in modern programming. Even in microcontrollers, where
> program and data memory can be scarce even today, I would argue that
> the costs would not outweigh the benefits by a long shot.
In 6502 code, it's not uncommon to do something like
foo1: lda #$00
.byte $2C ; 3-byte BIT
foo2: lda #$01
.
.
.
to save a byte (and probably still done for the few who write in ASM).
The "2C" operand would cause it to disassemble as something like...
1000- LDA #$00
1002- BIT $01A9
which is the route you'd go down if you called "foo1". Apart diddling a
few CPU flags, and an unneeded read on $01A9, harmless.
(Most 6502 programmers would probably see a strange BIT instruction as an
attempt to do this.)
It's probably not a good idea to still do this unless you're really REALLY
crunched for space.
-uso.
next prev parent reply other threads:[~2017-05-06 20:00 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-05 15:20 [TUHS] Discuss of style and design of computer programs from a user stand point [was dmr note on BSD's sins] Clem Cole
2017-05-05 15:37 ` Bakul Shah
2017-05-06 2:16 ` Noel Hunt
2017-05-06 2:40 ` Toby Thain
2017-05-06 6:07 ` Bakul Shah
2017-05-06 22:11 ` Steve Johnson
2017-05-06 23:35 ` Larry McVoy
2017-05-07 4:06 ` Dan Cross
2017-05-07 13:49 ` [TUHS] Discuss of style and design of computer programs from a user stand point Michael Kjörling
2017-05-06 2:02 ` [TUHS] Discuss of style and design of computer programs from a user stand point [was dmr note on BSD's sins] Doug McIlroy
2017-05-06 5:33 ` Steve Johnson
2017-05-06 9:18 ` [TUHS] Discuss of style and design of computer programs from a user stand point Michael Kjörling
2017-05-06 13:09 ` Nemo
2017-05-06 13:44 ` Michael Kjörling
2017-05-06 14:40 ` Larry McVoy
2017-05-06 15:09 ` [TUHS] Discuss of style and design of computer programs from a Corey Lindsly
2017-05-06 15:20 ` Michael Kjörling
2017-05-06 15:24 ` Larry McVoy
2017-05-06 15:51 ` Michael Kjörling
2017-05-06 15:53 ` Larry McVoy
2017-05-06 20:00 ` Steve Nickolas [this message]
2017-05-06 21:45 ` Michael Kjörling
2017-05-07 7:42 ` Stephen Kitt
2017-05-06 15:23 ` ron minnich
2017-05-06 15:44 ` Michael Kjörling
2017-05-06 18:43 ` [TUHS] Discuss of style and design of computer programs from a user stand point Dave Horsfall
2017-05-06 19:50 ` Bakul Shah
2017-05-07 1:15 ` Warner Losh
2017-05-07 1:42 ` Noel Hunt
2017-05-07 13:54 ` Michael Kjörling
2017-05-07 14:58 ` arnold
2017-05-07 16:33 ` Michael Kjörling
2017-05-07 15:13 ` Warner Losh
2017-05-06 16:40 ` Kurt H Maier
2017-05-06 14:16 ` [TUHS] The Elements of Programming Style (book) - was Re: Discuss of style and design of computer programs Toby Thain
2017-05-07 0:51 [TUHS] Discuss of style and design of computer programs from a Nemo
2017-05-08 13:39 ` Tony Finch
2017-05-08 16:21 ` Steve Johnson
2017-05-08 17:01 ` Dan Cross
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alpine.BSF.2.02.1705061554080.4621@frieza.hoshinet.org \
--to=usotsuki@buric.co \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).