summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Optimizing-assembly-code.md19
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.)