| 答1 |
请参考以下所举的例子。
ADJBA是通过一个宏来定义的针对加法的十进制调整指令。十进制调整是通过加法结束以后执行ADJBA宏指令来完成的。
ADJBS是通过一个宏来定义的针对减法的十进制调整指令。十进制调整是通过减法结束以后执行ADJBS宏指令来完成的。
;
; definition of macro
;
ADJBA MACRO
CALLT [ADJBAT]
ENDM
ADJBS MACRO
CALLT [ADJBST]
ENDM
;
; definition of CALT table
;
CALTTBL CSEG AT 40H
ADJBAT: DW ADJBAS
;
; decimal adjust for addtion
;
ADJBAS: PUSH BC
MOV C,#0
BNC $NEXT0 ; IF C=1 ADJUST 60H
MOV C,#0B0H
NEXT0: BT PSW.4,$NEXT1 ; JUMP IF AC=1
MOV B,A ; SAVE DATA
AND A,#0FH ; MASK UPPER NIBBLE
CMP A,#0AH
MOV A,B ; RESTORE DATA
BC $NEXT3 ; JUMP IF NOT ADJUST
NEXT1: ADD A,#6 ; ADJUST
MOV B,A ; SAVE DATA
NEXT2: BNC $NEXT3
MOV C,#0B0H
NEXT3: CMP A,#0A0H
BC $NEXT4
MOV C,#0B0H
NEXT4: ADD A,C
ADD A,C
POP BC
RET
;
; decimal adjust for subtraction
;
ADJBSS: PUSH BC
MOV C,#0
BNC $NEXT5
MOV C,#0D0H
NEXT5: BF PSW.4,$NEXT6
SUB A,#6
NEXT6: BNC $NEXT7
MOV C,#0D0H
NEXT7: ADD A,C
ADD A,C
POP BC
RET
|