محاسبه میانگین چند عدد در زبان اسمبلی

the_king

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

جدیدترین ارسال ها

بالا