the_king
مدیرکل انجمن
برنامه زیر میانگین تعدادی عدد را با دقت دو رقم بعد از اعشار محاسبه کرده و نمایش می دهد.
برای خاتمه دادن به روتین دریافت اعداد، بجای درج یک عدد جدید، تنها کلید Enter فشار داده شود.
برای خاتمه دادن به روتین دریافت اعداد، بجای درج یک عدد جدید، تنها کلید Enter فشار داده شود.
کد:
.MODEL SMALL
.DATA
msg1 DB "Please enter a number (Just ENTER for Exit) :",13,10,"$"
msg2 DB 13,10,"Average = $"
msg3 DB 13,10,"Press any key to continue.",13,10,"$"
number DB 5
DB ?
DB 5 DUP (?)
.CODE
.STARTUP
MOV AX, 0
MOV CX, 0
loop_1:
PUSH AX
MOV AH, 9
LEA DX, msg1
INT 21h
POP AX
CALL get_number
CMP BX, -1
JE next_1
INC CX
ADD AX, BX
JMP loop_1
next_1:
CMP CX, 0
JZ next_2
PUSH AX
MOV AH, 9
LEA DX, msg2
INT 21h
POP AX
MOV DX, 0
DIV CX
CALL print_ax
CMP DX, 0
JZ next_2
MOV AX, 100
MUL DX
DIV CX
MOV DL, 10
DIV DL
ADD AX, "00"
MOV CX, AX
MOV AH, 2
MOV DL, "."
INT 21h
MOV DL, CL
INT 21h
CMP CH, "0"
JE next_2
MOV DL, CH
INT 21h
next_2:
MOV AH, 9
LEA DX, msg3
INT 21h
MOV AH, 8
INT 21h
.EXIT
get_number:
PUSH AX
PUSH CX
PUSH DX
MOV AH, 0ah
LEA DX, number
INT 21h
MOV BX, -1
MOV CL, number[1]
CMP CL, 0
JZ next_4
MOV AH, 2
MOV DL, 13
INT 21h
MOV DL, 10
INT 21h
MOV CH, 0
LEA SI, number[2]
MOV DI, 10
MOV BX, 0
loop_2:
MOV AL, [SI]
CMP AL, "0"
JB next_3
CMP AL, "9"
JA next_3
SUB AL, "0"
MOV AH, 0
XCHG AX, BX
MUL DI
ADD BX, AX
next_3:
INC SI
LOOP loop_2
next_4:
POP DX
POP CX
POP AX
RET
print_ax:
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CX, 0
MOV BX, 10
loop_3:
MOV DX, 0
DIV BX
PUSH DX
INC CX
CMP AX, 0
JNE loop_3
MOV AH, 2
loop_4:
POP DX
ADD DL, "0"
INT 21H
LOOP loop_4
POP DX
POP CX
POP BX
POP AX
RET
.STACK
END