Files
erkyrath.infocom-zcode-terps/ibm/logicops.ezp
Andrew Plotkin b642da811e Initial commit.
2023-11-16 18:19:54 -05:00

78 lines
1.4 KiB
Plaintext

SUBTTL LOGICOPS
PAGE
;LESS?
PUBLIC OPQLES,OPQGRT,OPBTST,OPBOR,OPBCOM,OPBAND
OPQLES PROC
CMP AX,BX ;IS OPR1 LESS THAN OPR2?
JL JPT ;YES, PREDICATE TRUE
JPF: JMP PFALSE ;NO, PREDICATE FALSE
JPT: JMP PTRUE
OPQLES ENDP
;GRTR?
OPQGRT PROC
CMP AX,BX ;IS OPR1 GREATER THAN OPR2?
JG JPT ;YES, PREDICATE TRUE
JMP JPF ;NO, PREDICATE FALSE
OPQGRT ENDP
SUBTTL LOGICAL OPERATIONS
PAGE +
;BTST
OPBTST PROC
NOT AX ;TURN OFF BITS IN OPR2 THAT ARE ON IN OPR1
AND BX,AX
JE JPT ;SUCCESS IF OPR2 COMPLETELY CLEARED
JMP JPF
OPBTST ENDP
;BOR
OPBOR PROC
OR AX,BX ;LOGICAL OR
JMP PUTVAL ;RETURN THE VALUE
OPBOR ENDP
;BCOM
OPBCOM PROC
NOT AX ;LOGICAL COMPLEMENT
JMP PUTVAL ;RETURN THE VALUE
OPBCOM ENDP
;BAND
OPBAND PROC
AND AX,BX ;LOGICAL AND
JMP PUTVAL ;RETURN THE VALUE
OPBAND ENDP
SUBTTL GENERAL PREDICATES
PAGE +
PUBLIC OPQEQU,OPQZER
;EQUAL?
OPQEQU PROC
NOP ;TELL CALLER TO USE ARGUMENT BLOCK
MOV BX,ARGBLK ;GET OPR1
CMP BX,ARGBLK[2] ;IS OPR1 EQUAL TO OPR2?
JE OQE1$ ;YES
CMP AX,3 ;NO, IS THERE A THIRD OPERAND?
JL OQE2$ ;NO
CMP BX,ARGBLK[4] ;YES, IS IT EQUAL TO OPR1?
JE OQE1$ ;YES
CMP AX,4 ;NO, IS THERE A FOURTH?
JL OQE2$ ;NO
CMP BX,ARGBLK[6] ;YES, IS IT EQUAL TO OPR1?
JNE OQE2$ ;NO
OQE1$: JMP PTRUE ;PREDICATE TRUE IF EQUAL
OQE2$: JMP PFALSE ;PREDICATE FALSE IF NOT
OPQEQU ENDP
;ZERO?
OPQZER PROC
CMP AX,0 ;IS OPR ZERO?
JNE OQZ1$ ;NO, PREDICATE FALSE
JMP PTRUE ;YES, PREDICATE TRUE
OQZ1$: JMP PFALSE
OPQZER ENDP