Implement subWord, stSub, stGtEq in calculator.asm

This commit is contained in:
Juhani Krekelä 2022-08-17 02:32:26 +03:00
parent 34c3fa70e3
commit b63232169d
1 changed files with 57 additions and 8 deletions

View File

@ -35,17 +35,27 @@ stAdd:
; a b -- a-b
stSub:
cleq r0, r0, stNeg
breq r0, r0, stAdd
; n -- -n
stNeg:
cleq r0, r0, popWord
nand r0, r0
nand r1, r1
cleq r0, r0, incWord
cleq r0, r0, tmpStoreWord01
cleq r0, r0, popWord
cleq r0, r0, tmpLoadWord23
cleq r0, r0, subWord
breq r0, r0, pushWord
; a b --
; if a >= b then r0:r1 = 0001
; else r0:r1 = 0000
stGtEq:
cleq r0, r0, popWord
cleq r0, r0, tmpStoreWord01
cleq r0, r0, popWord
cleq r0, r0, tmpLoadWord23
cleq r0, r0, subWord
xor r0, r0
xor r1, r1
or r1, r2
ret
; ------------------------------------------------------------------
; I/O
; ------------------------------------------------------------------
@ -228,6 +238,45 @@ addWord:
addWordSecondHigh: data 0
addWordResultLow: data 0
; in:
; r0:r1 = minuend
; r2:r3 = subtrahend
; out:
; r0:r1 = result
; r2 = carryout
; trashes:
; r3
subWord:
store subWordMinuendHigh, r0
store subWordSubtrahendHigh, r2
; Subtract low bytes
; a - b = a + (-b) = a + ~b + 1
xor r0, r0
or r0, r3
nand r0, r0
load r2, lit01
cleq r0, r0, addByte3
store subWordResultLow, r0
; Subtract high bytes with carry-in in r1
load r0, subWordMinuendHigh
load r2, subWordSubtrahendHigh
nand r2, r2
cleq r0, r0, addByte3
; Move carryout to r2
xor r2, r2
or r2, r1
load r1, subWordResultLow
ret
subWordMinuendHigh: data 0
subWordSubtrahendHigh: data 0
subWordResultLow: data 0
; in/out:
; r0:r1 = word
; trashes: