TITLE PROBLEM 5
STSEG SEGMENT STACK
DB 32 DUP(?)
STSEG ENDS
DTSEG SEGMENT
Data1 DB '3546882164'
Data2 DB '2345611245'
Result DB 10 DUP (?)
DTSEG ENDS
CDSEG SEGMENT
MAIN PROC FAR
ASSUME CS:CDSEG, DS:DTSEG, SS:STSEG
MOV AX, DTSEG
MOV DS, AX
CALL SUB_ASICII
CALL CONVERT_TO_ASICII
MOV AH,4CH
INT 21H
MAIN ENDP
SUB_ASICII PROC
CLC
MOV CX, 10H ;add ten ASICII Numbers
MOV BX, 9H ;Start Subtracting LEAST SIGNIFICANT ASICII
SUBTRACT:
MOV AL,Data1[BX]
SBB AL,Data2[BX]
AAS ;Result is AL in Unpacked BCD
MOV Result[BX],AL ;Move Result to memory location "Result"
DEC BX
LOOP SUBTRACT ;Continue Untill full Subtraction Completed
RET
SUB_ASICII ENDP
CONVERT_TO_ASICII PROC
mov CX,10H ;Push ten Unpacked BCD Numbers onto Stack
MOV BX, OFFSET Result
PUSH_STACK:
ADD [BX], 3030H ;Convert unpacked BCD to ASICII
PUSH BX
ADD BX,1H
LOOP PUSH_STACK ;Continue untill all 10 numbers on stack
MOV CX, 10H
MOV BX, OFFSET Result
POP_STACK:
POP AX
MOV [BX], AX
ADD BX, 1H
LOOP POP_STACK
RET
CONVERT_TO_ASICII ENP
END MAIN
CDSEG ENDS
END MAIN