2023-11-16 18:19:54 -05:00

76 lines
1.6 KiB
Plaintext

SUBTTL VARIABLE OPERATIONS
PAGE +
PUBLIC OPVALU,OPSET,OPPUSH,OPPOP
;VALUE (GET VALUE OF VAR)
OPVALU PROC
CALL GETVAR ;GET THE VALUE
JMP PUTVAL ;AND RETURN IT
OPVALU ENDP
;SET (VAR TO VALUE)
OPSET PROC
JMP PUTVAR ;STORE THE VALUE
OPSET ENDP
;PUSH (A VALUE ONTO THE STACK)
OPPUSH PROC
PUSHZ AX ;PUSH THE VALUE
RET
OPPUSH ENDP
;POP (A VALUE OFF THE STACK INTO VAR)
OPPOP PROC
POPZ BX ;POP A VALUE
JMP PUTVAR ;AND STORE IT
OPPOP ENDP
PUBLIC OPINC,OPDEC
;INC (INCREMENT VAR)
OPINC PROC
MOV CX,AX ;VARIABLE
CALL GETVAR ;GET VAR'S VALUE
INC AX ;INCREMENT IT
OPINC1: MOV BX,AX ;VALUE
MOV AX,CX ;VARIABLE
JMP PUTVAR ;STORE NEW VALUE
OPINC ENDP
;DEC (DECREMENT VAR)
OPDEC PROC
MOV CX,AX ;VARIABLE
CALL GETVAR ;GET VAR'S VALUE
DEC AX ;DECREMENT IT
JMP OPINC1 ;STORE NEW VALUE
OPDEC ENDP
PUBLIC OPQIGR,OPQDLE
;IGRTR? (INCREMENT VAR & TEST IF GREATER THAN VAL)
OPQIGR PROC
PUSH AX ;SAVE VARIABLE
CALL GETVAR ;GET VAR'S VALUE
INC AX ;INCREMENT IT
SUB CX,CX ;SET FLAG FALSE
CMP AX,BX ;NEW VALUE GREATER THAN VAL?
JLE OPQIG1 ;NO
OPQIG0: INC CX ;YES, CHANGE FLAG TO TRUE
OPQIG1: MOV BX,AX ;VALUE
POP AX ;RESTORE VARIABLE
CALL PUTVAR ;STORE NEW VALUE
CMP CX,0 ;TEST FLAG
JE OQI1$ ;FALSE, PREDICATE FALSE
JMP PTRUE ;ELSE, PREDICATE TRUE
OQI1$: JMP PFALSE
OPQIGR ENDP
;DLESS? (DECREMENT VAR & TEST IF LESS THAN VAL)
OPQDLE PROC
PUSH AX ;SAVE VARIABLE
CALL GETVAR ;GET VAR'S VALUE
DEC AX ;DECREMENT IT
SUB CX,CX ;SET FLAG FALSE
CMP AX,BX ;NEW VALUE LESS THAN VAL?
JGE OPQIG1 ;NO, PREDICATE FALSE
JMP OPQIG0 ;YES, PREDICATE TRUE
OPQDLE ENDP