80x86 彙編語言:去掉1個最高分,去掉一個最低分,再取平均


7 個評委分別給分在 10~20分 之間的整數,7 個評分中去掉1個最高分,去掉一個最低分,將剩下 5 個分的平均值作爲最後得分。

程序要求:

1) 評委給分以兩位十制數從鍵盤輸入。

2) 最後得分以十進制數形式在屏幕上顯示。

3) 最後得分取小數 1~2 位。


題目鏈接:http://zhidao.baidu.com/question/1819307939774660988.html


做而論道編程如下:     (2015-01-07 23:25   提問者採納)


ASSUME  CS:CODE, DS:DATA


DATA  SEGMENT

    STRING  DB   13, 10, 'Please  iuput  number_1 : $'

    NUM     DB   7 DUP (?)

    MAX     DB   0

    MIN     DB   255

    N_SUM   DW   ?

    NUM_X   DB   ?

DATA  ENDS


CODE  SEGMENT


START:

    MOV   AX, DATA

    MOV   DS, AX

    MOV   CX, 7

    MOV   SI, 0

IN_X:

    MOV   DX, OFFSET STRING

    MOV   AH, 9       ;顯示字符串

    INT   21H

    CALL  INPUT

    MOV   NUM[SI], BL

    CALL  OUTPUT

    INC   SI

    INC   STRING + 24

    LOOP  IN_X

;--------------------------

    CALL  SUM

    MOV   N_SUM, BX

    MOV   AL, MAX

    MOV   AH, 0

    SUB   BX, AX

    MOV   AL, MIN

    MOV   AH, 0

    SUB   BX, AX


    MOV   AX, 5

    XCHG  AX, BX

    DIV   BL

    MOV   NUM_X, AH

    MOV   AH, 0

    XCHG  AX, BX

    

    CALL  OUTPUT

    CALL  OUTPUT2


    MOV   AH, 4CH

    INT   21H

;----------------------------------

MOV   BX, N_SUM

CALL  OUTPUT


MOV   BL, MAX

MOV   BH, 0

CALL  OUTPUT


MOV   BL, MIN

MOV   BH, 0

CALL  OUTPUT



SUM:

    MOV   BX, 0

    MOV   CX, 7

    MOV   SI, 0

LP1:

    MOV   AL, NUM[SI]

    CMP   AL, MAX

    JB    LP2

    MOV   MAX, AL

LP2:

    CMP   AL, MIN

    JA    HE

    MOV   MIN, AL

HE:

    MOV   AH, 0

    ADD   BX, AX

    INC   SI

    LOOP  LP1

    RET

;----------------------------------

INPUT:

    MOV   BX, 0

IN_1:

    MOV   AH, 1

    INT   21H

    CMP   AL, 13

    JZ    IN_END

    CMP   AL, '0'

    JB    IN_1

    CMP   AL, '9'

    JA    IN_1

    AND   AL, 0FH

    MOV   AH, 0

    XCHG  AX, BX

    MOV   DL, 10

    MUL   DL

    ADD   AX, BX

    XCHG  AX, BX

    JMP   IN_1

IN_END:

    RET

;----------------------------------

OUTPUT2:

    MOV   AH, 02H

    MOV   DL, '.'  ;小數點

    INT   21H


    MOV   AL, NUM_X

    MOV   BL, 10

    MUL   BL

    MOV   BL, 5

    DIV   BL

    MOV   NUM_X, AH

    ADD   AL, '0'

    MOV   DL, AL

    MOV   AH, 2

    INT   21H


    MOV   AL, NUM_X

    MOV   BL, 10

    MUL   BL

    MOV   BL, 5

    DIV   BL

    MOV   NUM_X, AH

    ADD   AL, '0'

    MOV   DL, AL

    MOV   AH, 2

    INT   21H


    RET

;----------------------------------

OUTPUT:

    CALL  CRLF

    MOV   AX, BX

    MOV   BL, 10

    DIV   BL

    ADD   AX, 3030H

    MOV   DX, AX

    MOV   AH, 2

    INT   21H

    MOV   DL, DH

    INT   21H

    RET

;----------------------------------

CRLF  PROC  NEAR        ;回車換行子程序

    PUSH  AX

    PUSH  DX

    MOV   AH, 02H       ;回車

    MOV   DL, 0DH

    INT   21H

    MOV   DL, 0AH       ;換行

    INT   21H

    POP   DX

    POP   AX

    RET

CRLF  ENDP


CODE  ENDS


    END START


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章