63 lines
1.6 KiB
NASM
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 |