diff options
author | Rangi <remy.oukaour+rangi42@gmail.com> | 2020-06-09 15:22:02 -0400 |
---|---|---|
committer | Rangi <remy.oukaour+rangi42@gmail.com> | 2020-06-09 15:22:02 -0400 |
commit | 97136f4bba85ecfd9c32814ae7c1963f10a2254f (patch) | |
tree | d2f10d2c0d75abdc4a2260ce2cf7d963619bb6be /Optimizing-assembly-code.md | |
parent | 7cfbf4f8aa73a2e6cbd75ca5bb6aa88c6402915a (diff) |
hl|bc|de -= N
Diffstat (limited to 'Optimizing-assembly-code.md')
-rw-r--r-- | Optimizing-assembly-code.md | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/Optimizing-assembly-code.md b/Optimizing-assembly-code.md index 54af5ba..7d7afd9 100644 --- a/Optimizing-assembly-code.md +++ b/Optimizing-assembly-code.md @@ -28,6 +28,7 @@ WikiTI's advice fully applies here: - [16-bit registers](#16-bit-registers) - [Multiply `hl` by 2](#multiply-hl-by-2) - [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) - [Add `a` to an address](#add-a-to-an-address) - [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) @@ -490,6 +491,45 @@ Or if you can spare another 16-bit register and want to optimize for size over s add hl, de ``` + +### Subtract an 8-bit constant from a 16-bit register + +(The example uses `hl`, but `bc` or `de` would also work.) + +Don't do: + +```asm + ; 8 bytes, 8 cycles + ld a, l + sub FOO + ld l, a + ld a, h + sbc 0 + ld h, a +``` + +But do: + +```asm + ; 7 bytes, 7 or 8 cycles + ld a, l + sub FOO + ld l, a + jr nc, .no_carry + dec h + +.no_carry: +``` + +Or if you can spare another 16-bit register, do: + +```asm + ; 4 bytes, 5 cycles + ld de, -FOO + add hl, de +``` + + ### Add `a` to an address (The example uses `hl`, but `bc` or `de` would also work.) |