PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : محاسبه میانگین چند عدد در زبان اسمبلی


GodMaster
23 Jan 2011, 11:14
برنامه زیر میانگین تعدادی عدد را با دقت دو رقم بعد از اعشار محاسبه کرده و نمایش می دهد.
برای خاتمه دادن به روتین دریافت اعداد، بجای درج یک عدد جدید، تنها کلید 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