diff options
author | Rangi <remy.oukaour+rangi42@gmail.com> | 2020-11-29 16:04:45 -0500 |
---|---|---|
committer | Rangi <remy.oukaour+rangi42@gmail.com> | 2020-11-29 16:04:45 -0500 |
commit | 4c1cfe6b4802dd01acf750d184c6e96bcd3cc9a0 (patch) | |
tree | 5ba2f2dfa8908601d809a1ec1a81860ccb6c0b10 | |
parent | d7ffa5c08dc04f32ce3fb87476bced31c768c689 (diff) |
hl = a + {0-255}
-rw-r--r-- | Optimizing-assembly-code.md | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/Optimizing-assembly-code.md b/Optimizing-assembly-code.md index 8f18570..5d80acf 100644 --- a/Optimizing-assembly-code.md +++ b/Optimizing-assembly-code.md @@ -35,6 +35,7 @@ WikiTI's advice fully applies here: - [Add `a` to a 16-bit register](#add-a-to-a-16-bit-register) - [Subtract an 8-bit constant from a 16-bit register](#subtract-an-8-bit-constant-from-a-16-bit-register) - [Set a 16-bit register to `a` plus a 16-bit constant](#set-a-16-bit-register-to-a-plus-a-16-bit-constant) + - [Set a 16-bit register to `a` plus a nonzero 8-bit constant](#set-a-16-bit-register-to-a-plus-a-nonzero-8-bit-constant) - [Set a 16-bit register to `a` \* 16](#set-a-16-bit-register-to-a--16) - [Increment or decrement a 16-bit register](#increment-or-decrement-a-16-bit-register) - [Load from an address to `hl`](#load-from-an-address-to-hl) @@ -861,6 +862,24 @@ But do: ``` +### Set a 16-bit register to `a` plus a nonzero 8-bit constant + +(The example uses `hl`, but `bc` or `de` would also work.) + +Don't do any of [the above](#set-a-16-bit-register-to-a-plus-a-16-bit-constant) methods for a 16-bit constant. Instead, do: + +```asm + ; 6 bytes, 6 cycles + sub -FOO + ld l, a + sbc a + inc a + ld h, a +``` + +This will work for any constant `FOO` from 1 to 255, but not 0. + + ### Set a 16-bit register to `a` \* 16 (The example uses `hl`, but `bc` or `de` would also work.) |