mean1.asm

来自「求取一个数列平均直的程序,运行环境为DOS,编译环境ASM 」· 汇编 代码 · 共 65 行

ASM
65
字号

public _mean
.model small
.data
_wmed dw ?,?

.code
_mean proc
    mov ax,@data
    mov ds,ax
     push bp
     mov bp,sp
     push bx
     push cx
     push dx
     push si
     push di
     mov bx,[bp+6]      ; 从堆栈中取出缓冲区偏移地址给bx
     mov cx,[bp+4]     ;从堆栈中取数据个数给cx
     xor si, si                 ;si中存放求和的低16位
     mov di,si                 ;di中存放求和的高16位
mean1: mov ax,[bx]          ; 取出一个数据给ax
           cwd                         ; 符号扩展至dx
           add si, ax                ; 低16位求和
           adc di, dx                ;高16位求和
           inc bx                       ;指向下一个数据
           inc bx
           loop mean1
           mov ax,si                ;累加和放在dx.ax中
           mov cx,[bp+4]       ; 数据个数重新给cx
           idiv cx                      ; 有符号数除法,求的平均值在ax中
           mov [_wmed],ax
           
 ;下面我们进行比较,并得出小于平均值的个数
     mov bx,[bp+6]
     mov cx,[bp+4]
     xor dx,dx        ;把个数存在dx中
  compare:
       mov ax,[bx]
       cmp ax,[_wmed]
         jl add_dx      ;小于,则dx加1
        inc bx                       ;指向下一个数据
        inc bx
       loop compare
        jmp over

   add_dx: inc dx
        inc bx                       ;指向下一个数据
        inc bx
       loop compare
   over:
       mov [_wmed+2],dx
   mov ax,offset _wmed

        pop di
        pop si
        pop dx
        pop cx
        pop bx
        pop bp
      
        ret

_mean endp
end

⌨️ 快捷键说明

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