⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 课设裁判评分.asm

📁 一个简易的用汇编写的裁判平分程序
💻 ASM
字号:
data segment
     buf db 3                      ;buf为缓冲区
         db ?
         db 3 dup(0)
     score db 5 dup(0)             ;分数区
     ;string db 'please enter 5 scores(10-20):',0ah,0dh,'$'
data ends
stack1 segment para stack
       dw 20h dup(0)
stack1 ends
coseg segment
      assume cs:coseg,ds:data
      push ds
      xor ax,ax
      push ax
      mov ax,data
      mov ds,ax                    ;装段基值
;**************************************
start:
      ;lea dx,string         ;打出提示信息
      ;mov ah,09h
      ;int 21h
      mov cx,0005h                 ;循环次数
      mov si,0
 lop1:
      mov dx,offset buf            ;输入分数到缓冲区(如18)
      mov ah,0ah
      int 21h
;以下:校正(ASCII->十进制->十六进制)
      mov bx,word ptr buf+2        ;从缓冲区到BX:如38 31
      push cx
      mov cx,4                               ;BX:38 10
      shl bl,cl
      and bh,0fh                             ;BX:08 10
      or bl,bh                               ;BX:18

                       ;D变H(先判断是否为20,20专门转换)
                       ;D变H(<16的数先加10,再去十位数1)
                       ;D变H(>=16的数加10后要保证十位数为1)
      cmp bl,20h                    ;(=20的)转为14H
      jne j0
      mov bl,14h
      jmp exit
   j0:cmp bl,16h                    ;!=20的先与16h比                   
      jge j1
      add bl,0ah                         ;(<16的)BL:+10校正 
      and bl,0fh                         ;提炼个位数
      jmp exit
   j1:
      add bl,0ah                         ;(>=16的)BL:+10校正
      and bl,0fh             
      add bl,10h                         ;十位置1
 exit:
      pop cx
      mov score[si],bl              ;校正后的数存入数据区
      inc si
      loop lop1
;*************************************
;找最大数存入AL,最小数存入BL
      mov cx,0005h
      mov si,0
      mov al,0h                     ;置AL初值0,比它大的代替
      mov bl,15h                    ;置BL初值最大,比它小的代替
 lop2:
      mov dl,score[si]              ;把要比较的数从分数区提到DL
      inc si
      cmp al,dl
      jg l1
      mov al,dl
   l1:
      cmp bl,dl
      jb l2
      mov bl,dl
   l2:loop lop2
;***************************************
;求平均分,并校正
      neg al                        ; -max
      sub al,bl                     ;再-min
      mov cx,0005h
      mov si,0
 lop3:                              ;再+5个分数
      add al,score[si]
      inc si
      loop lop3
      cbw                           ;除以3(33H/3=11H)
      mov bl,3
      div bl
      add al,6h                     ;11h--->17
;*****************************************
;输出校正(转换成ASCII才能显示)
      mov bl,al
      and bl,0fh                    ;如上例提炼出7
      add bl,30h                    ;ASCII码37
      mov cx,0004h                  ;提出1
      shr al,cl
      add al,30h                    ;ASCII码31
      mov dl,al                     ;显示器输出
      mov ah,2
      int 21h
      mov dl,bl
      mov ah,2
      int 21h
;******************************************
      mov ah,4ch
      int 21h
coseg ends
      end start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -