From 90f1c47345084f3ad3ab8d6c89ded30ae7a686d0 Mon Sep 17 00:00:00 2001 From: Rangi Date: Thu, 26 Mar 2020 09:24:32 -0400 Subject: inc a --- Optimizing-assembly-code.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'Optimizing-assembly-code.md') diff --git a/Optimizing-assembly-code.md b/Optimizing-assembly-code.md index 2c4b827..867cb07 100644 --- a/Optimizing-assembly-code.md +++ b/Optimizing-assembly-code.md @@ -201,6 +201,23 @@ If `FOO` equals `BAR - 2`, then do: sbc -BAR ; -1 becomes BAR - 2 aka FOO, 0 becomes BAR ``` +If `FOO` is 1 and `BAR` is 0 (i.e. set `a` to 1 if carry or 0 if not carry), then do: + +```asm + ; 3 bytes, 3 cycles + ccf ; invert carry flag + sbc a ; if originally carry, then 0, else $ff aka -1 + inc a ; 0 becomes 1, -1 becomes 0 +``` + +If `FOO` is 0 and `BAR` is 0 (i.e. set `a` to 0 if carry or 1 if not carry), then do: + +```asm + ; 2 bytes, 2 cycles + sbc a ; if carry, then $ff aka -1, else 0 + inc a ; -1 becomes 0, 0 becomes 1 +``` + ### Shift `a` right by 3 bits -- cgit v1.2.3