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

📄 work5.asm

📁 本人的汇编上机的简单的小程序
💻 ASM
字号:
data segment
      buf db 3
          db ?
          db 3 dup(?)
      num dw 7 dup(0)
      var dw ?                      ;暂存数据
      n   dw ?                      ;计数迭代器
      max dw ?                      ;存储最高分在num中的下标
      min dw ?                      ;存储最低分在num中的下标
      aveInteger dw ?               ;存储平均分整数部分
      aveDecimal dw ?               ;存储平均分小数部分
      ten db 10
      tenW dw 10
      count   dw 5                  ;有效分个数
      tip1 db "Input 7 judgement mark between 10~20:",0ah,0dh,'$'
      tip2 db "Judge mark: $"
      tip3 db "Out of range,input again: $"
      tip4 db "The final score: $"
data ends
stack1 segment para stack
      dw 20h dup(0)
stack1 ends
code segment
      assume cs:code, ds:data, ss:stack1
start:
      mov ax,data
      mov ds,ax
      mov dx,offset tip1            ;提示语
      mov ah,09h
      int 21h
;..............7个裁判分数的输入................
      mov cx,7
      mov n,0
input:push cx
      mov dx,offset tip2            ;提示语
      mov ah,09h
      int 21h
      jmp seq
re:   mov dx,offset tip3            ;输入不足2位数字时重输
      mov ah,09h
      int 21h
seq:  lea dx,buf                    ;数字的输入
      mov ah,0ah
      int 21h
      mov dl,0ah                    ;换行
      mov ah,02h
      int 21h
      mov dl,0dh
      mov ah,02h
      int 21h
      mov cl,buf+1                  ;获取输入字符长度
      mov ch,0
      lea bx,buf+2
      add bx,cx
      mov byte ptr [bx],'$'         ;将输入最后的0DH变为$

      mov var,0                      ;将输入字符串的ASC转为数值
      lea bx,buf+2
      mov al,[bx]
      sub al,30h
      mul ten
      mov var,ax

      lea bx,buf+3                  ;获取数值的个位
      mov cl,[bx]                   ;个位存于cx
      sub cl,30h
      mov ch,0
      mov bx,var                    ;十位存入bx
      add bx,cx                     ;十位与个位相加
      mov cx,bx                     ;结果存入cx
      cmp cx,20                     ;输入超过20
      ja re
      cmp cx,10                     ;输入不足10
      jb re
      mov bx,n
      mov num[bx],cx                ;将输入数值顺序存入num的连续空间
      add n,2
      pop cx
      loop input
;.............................................................
;........................找最高分和最低分.....................
      mov cx,6
      mov bx,0
      mov ax,num[bx]                ;以ax存储最低分
      mov dx,num[bx]                ;以dx存储最高分
      mov max,bx
      mov min,bx
      add bx,2
lop1: cmp ax,num[bx]
      jbe next1
      mov ax,num[bx]
      mov min,bx
next1: cmp dx,num[bx]
      jae next2
      mov dx,num[bx]
      mov max,bx
next2: add bx,2
      loop lop1
;............................................................
;.....................求平均分...............................
      mov dx,min
      cmp dx,max                    ;如果最高分与最低分相同,则循环次数少一次
      je L1
      mov cx,7
      jmp L2
L1:   mov cx,6
L2:   mov bx,0
      mov dx,0                      ;dx寄存有效总分
lop2: cmp bx,min                    ;最低分不计入总分
      je next3
      cmp bx,max                    ;最高分不计入总分
      je next3
      add dx,num[bx]
next3: add bx,2
      loop lop2
      mov ax,dx
      mov dx,0
      div count
      mov aveInteger,ax
      mov cx,2
      mov aveDecimal,0
lop3: mov var,dx                    ;计算小数部分
      mov ax,var
      mov dx,0
      mul tenW
      div count
      add aveDecimal,ax
      loop lop3
;...........................................................
;.........................输出平均分........................
      mov dx,offset tip4            ;输出提示语
      mov ah,09h
      int 21h
      mov cx,2
      mov ax,aveInteger
lop4: div ten                       ;输出整数部分
      mov bl,al
      add ah,30h
      push ax
      xor ah,ah
      mov al,bl
      loop lop4
      mov cx,2
lop5: pop ax
      mov dl,ah
      mov ah,02h
      int 21h
      loop lop5
      
      mov dl,'.'                    ;输出小数点
      mov ah,02h
      int 21h
      
      mov cx,2
      mov ax,aveDecimal
      mov ah,0
lop6: div ten                       ;输出小数部分
      mov bl,al
      add ah,30h
      mov dl,ah
      mov ah,02h
      int 21h
      xor ah,ah
      mov al,bl
      loop lop6

      mov dl,0ah                    ;换行
      mov ah,02h
      int 21h
      mov dl,0dh
      mov ah,02h
      int 21h
;............................................................

      mov ah,4ch
      int 21h
code  ends
      end start

⌨️ 快捷键说明

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