cardiograph-computer/javascript-old/test-programs/flag-overflow-2.asm

63 lines
1.6 KiB
NASM

;; Test behaviour of flags during addition and subtraction
;; with a focus on the Overflow flag
;; 2023-08-29
; http://teaching.idallen.com/dat2343/11w/notes/040_overflow.txt:
;
; > 1. If the sum of two numbers with the sign bits off yields a result number
; with the sign bit on, the "overflow" flag is turned on.
; >
; > 0100 + 0100 = 1000 (overflow flag is turned on)
; >
; > 2. If the sum of two numbers with the sign bits on yields a result number
; > with the sign bit off, the "overflow" flag is turned on.
; >
; > 1000 + 1000 = 0000 (overflow flag is turned on)
; >
; > Otherwise, the overflow flag is turned off.
; > * 0100 + 0001 = 0101 (overflow flag is turned off)
; > * 0110 + 1001 = 1111 (overflow flag is turned off)
; > * 1000 + 0001 = 1001 (overflow flag is turned off)
; > * 1100 + 1100 = 1000 (overflow flag is turned off)
;; Check simple addition and subtraction
; LDA 1
; STO 0
; LDA 1
; ADD 1
; LDA 1
; ADD (0)
; LDA 3
; SUB 1
; LDA 3
; SUB (0)
;; Check zero flag, negative flag
; LDA 0
; LDA 255
;; Check overflow flag
LDA 0b01000000
ADD 0b01000000 ; 10000000 ; Overflow flag is on
LDA 0b10000000
ADD 0b10000000 ; 00000000 ; Overflow flag is on
; > * 0100 + 0001 = 0101 (overflow flag is turned off)
; > * 0110 + 1001 = 1111 (overflow flag is turned off)
; > * 1000 + 0001 = 1001 (overflow flag is turned off)
; > * 1100 + 1100 = 1000 (overflow flag is turned off)
LDA 0b01000000
ADD 0b00010000 ; 01010000 ; overflow off
LDA 0b01100000
ADD 0b10010000 ; 11110000 ; overflow off
LDA 0b10000000
ADD 0b00010000 ; 10010000 ; overflow off
LDA 0b11000000
ADD 0b11000000 ; 10000000 ; overflow off