* * * * ACTION ROUTINES FOR RELATIONAL OPERATORS * * AGT CALL RELOP JC RTRUE * RFALSE MOV H,B MOV L,C JMP ZEX STORE A ZERO * * ALT CALL RELOP JZ RFALSE JC RFALSE * RTRUE MOV D,B BC TO DE MOV E,C JMP VCPY1 FPONE FOR TRUE * AEQ CALL RELOP JZ RTRUE JMP RFALSE * ANE CALL RELOP JNZ RTRUE JMP RFALSE * AGE CALL RELOP JZ RTRUE JC RTRUE JMP RFALSE * ALE CALL RELOP JZ RTRUE JNC RTRUE JMP RFALSE * * * * COMMON ROUTINE FOR RELATIONAL OPERATOR ACTION * * RESULT ADDRESS IN BC, SAVED * LEFT ARG ADDRESS IN DE, SAVED * RIGHT ARG ADDRESS IN HL * RETURN: SIGN=1 ==> GT * ZERO=1 ==> EQ * RELOP DCX H DCX D POINT TO SIGN BYTE LDAX D GET SIGN CMP M COMPARE THE TWO RNZ . NOT EQUAL...THE FLAGS ARE SET INX H INX D POINT BACK TO THE EXP * ORA A JNZ RLOO1 BOTH NOT ZERO XCHG . EXCHANGE ORDER OF ARGS * * TEST EXPONENTS FOR EQUALITY * RLOO1 LDAX D SUB M RNZ * PUSH B LXI B,-FPSIZ+1 DAD B XCHG . HL POINT RIGHT...SAVE IN DE DAD B FIX DE XCHG . AND ADJUST INR C * * C HAS BYTE COUNT * RCOMP LDAX D SUB M JNZ RLOP1 INX H INX D INR C JNZ RCOMP * RLOP1 POP B RET * * * * * BOOLEAN OPERATORS * AND OR NOT * HL AND DE POINT TO ARGS * WE ASSUME DE=BC AND THE POINT TO TOS+1 (ONE DOWN) * BC = DE OP HL * AAND LDAX D ORA A RZ . ALREADY ZERO MOV A,M ORA A JZ RFALSE * * COPY FPONE TO DESTINATION * AAND1 MOV D,B MOV E,C JMP VCPY1 * AOR MOV A,M ORA A JNZ AAND1 MAKE 1 LDAX D ORA A RZ . ALREADY ZERO JMP AAND1 MAKE 1 * ANOT LDAX D ORA A JZ AAND1 WAS 0 SET TO 1 JMP RFALSE WAS NON 0 SET TO 0 * *