اينم از كدهاش:
;************************************************* *******
.MODEL SMALL
.STACK 64
;------------
.DATA
LEFTCOL EQU 28
RIGHTCOL EQU 52
TOPROW EQU 10
BOTROW EQU 14
MAXQLEN DB 6
ACTQLEN DB ?
QTYFLD DB 6 DUP(?)
MAXRLEN DB 6
ACTRLEN DB ?
RATEFLD DB 6 DUP(?)
PROMPT1 DB 'Quantity? '
PROMPT2 DB 'Rate? '
PROMPT3 DB 'Product = '
ASCPROD DB 10 DUP(30H)
PROMPT4 DB 'Press any key to continue or Esc to quit'
ADJUST DW ?
BINPROD DW 00
BINQTY DW 00
BINRATE DW 00
COL DB 00
DECIND DB 00
MULT10 DW 01
NODECIMS DW 00
ROW DB 00
SHIFT DW ?
TENWD DW 10
;----------------------------------------------------------------
.CODE
MAIN PROC FAR
MOV AX,@data
MOV DS,AX
MOV ES,AX
;*** start ***
MOV AX,0003H
INT 10H
A20: CALL WINDOW
CALL INPUT
CALL QTY
CALL RATE
CALL MULT
CALL PROD
CALL FORMAT
CALL PAUSE
CMP AL,1BH
JNE A20
;*** end ***
MOV AX,4C00H
INT 21H
MAIN ENDP
;************************************************* *******
WINDOW PROC NEAR
MOV AX,0600H
MOV BH,00H
MOV CX,0000H
MOV DX,184FH
INT 10H
MOV AX,0605H
MOV BH,16H
MOV CH,TOPROW
MOV CL,LEFTCOL
MOV DH,BOTROW
MOV DL,RIGHTCOL
INT 10H
RET
WINDOW ENDP
;************************************************* *******
INPUT PROC NEAR
MOV ROW,TOPROW+1
MOV COL,LEFTCOL+3
LEA BP,PROMPT1
MOV CX,15
CALL DISPLY
MOV AH,0AH
LEA DX,MAXQLEN
INT 21H
MOV COL,LEFTCOL+3
INC ROW
LEA BP,PROMPT2
MOV CX,15
CALL DISPLY
MOV AH,0AH
LEA DX,MAXRLEN
INT 21H
INC ROW
RET
INPUT ENDP
;************************************************* *******
DISPLY PROC NEAR
MOV AX,1301H
MOV BX,0016H
MOV DH,ROW
MOV DL,COL
INT 10H
RET
DISPLY ENDP
;************************************************* *******
QTY PROC NEAR
MOV NODECIMS,00
MOV CH,00H
MOV CL,ACTQLEN
LEA SI,QTYFLD-1
ADD SI,CX
CALL ASCBIN
MOV AX,BINPROD
MOV BINQTY,AX
RET
QTY ENDP
;************************************************* *******
ASCBIN PROC NEAR
PUSH DX
MOV MULT10,0001
MOV BINPROD,00
MOV DECIND,00
XOR BX,BX
J20: MOV AL,[SI]
CMP AL,'.'
JNE J30
MOV DECIND,01
JMP J40
J30: AND AX,000FH
MUL MULT10
ADD BINPROD,AX
MOV AX,MULT10
MOV DX,10
IMUL DL
MOV MULT10,AX
CMP DECIND,00
JNZ J40
INC BX
J40: DEC SI
LOOP J20
CMP DECIND,00
JZ J90
ADD NODECIMS,BX
J90: POP DX
RET
ASCBIN ENDP
;************************************************* ********
RATE PROC NEAR
MOV CH,00H
MOV CL,ACTRLEN
LEA SI,RATEFLD-1
ADD SI,CX
CALL ASCBIN
MOV AX,BINPROD
MOV BINRATE,AX
RET
RATE ENDP
;************************************************* ********
MULT PROC NEAR
PUSH BX
MOV CX,10
LEA DI,ASCPROD
MOV AL,30H
CLD
REP STOSB
MOV SHIFT,10
MOV ADJUST,00
MOV CX,NODECIMS
CMP CL,06
JA E40
SUB CX,02
JLE E30
MOV NODECIMS,02
MOV AX,01
E20: MOV BX,10
IMUL BL
LOOP E20
MOV SHIFT,AX
SHR AX,1
MOV ADJUST,AX
E30: MOV AX,BINQTY
MUL BINRATE
ADD AX,ADJUST
ADC DX,00
CMP DX,SHIFT
JB E50
E40: XOR AX,AX
JMP E70
E50: CMP ADJUST,00
JZ E80
DIV SHIFT
E70: XOR DX,DX
E80: POP BX
RET
MULT ENDP
;************************************************* ********
PROD PROC NEAR
LEA SI,ASCPROD+7
MOV BYTE PTR[SI],'.'
ADD SI,NODECIMS
F30: CMP BYTE PTR[SI],'.'
JNE F40
DEC SI
F40: CMP DX,00
JNZ F50
CMP AX,0010
JB F60
F50: DIV TENWD
OR DL,30H
MOV [SI],DL
DEC SI
SUB DX,DX
JMP F30
F60: OR AL,30H
MOV [SI],AL
RET
PROD ENDP
;************************************************* ********
FORMAT PROC NEAR
MOV COL,LEFTCOL+3
MOV CX,09
LEA SI,ASCPROD
G20: CMP BYTE PTR[SI],30H
JNE G30
MOV BYTE PTR[SI],20H
INC SI
LOOP G20
G30: LEA BP,PROMPT3
MOV CX,20
CALL DISPLY
RET
FORMAT ENDP
;************************************************* ********
PAUSE PROC NEAR
MOV COL,20
MOV ROW,22
LEA BP,PROMPT4
MOV CX,40
CALL DISPLY
MOV AH,10H
INT 16H
RET
PAUSE ENDP
END MAIN
ممنون ميشم كمكم كنيد