
程序代码:
;
;This Program Compiled Sucess by Masm 6.15
;
assume cs:code,ds:data
data segment
array dw 12h,34h,23h,15h,123h,1254h,1999h ;待测数据
max dw 0 ;初始化最大值
min dw 0ffffh ;初始化最小值
ave dw 0 ;初始化平均值
sum dw 0 ;初始化总和
data ends
code segment
start:
mov ax,data ;定义数据段
mov ds,ax
mov bx,offset array ;将段地址以及数组偏移地址
push ds ;通过堆栈传递给子程序
push bx
call odd ;调用子程序
mov ah,4ch ;返回DOS
int 21h
;子程序
odd proc
push bp ;保存基址指针
mov bp,sp ;堆栈基址
push ds ;保存段地址
push bx ;保存偏移地址
xor dx,dx ;高位清零,最后做除法使用
xor si,si ;计数器,用作统计奇数个数
mov ds,[bp+6] ;设定入口参数
mov bx,[bp+4]
mov cx,lengthof array ;数组个数
s:
mov ax,[bx] ;开始遍历,
test ax,1 ;测试奇偶数
jz jx ;是偶数,跳过,
inc si ;是奇数,开始统计计算等操作
add sum,ax ;累加
cmp ax,max ;比较大小数
ja ma
cmp ax,min
jb mi
ma:
mov max,ax ;大数暂存max
jmp jx
mi:
mov min,ax ;小数暂存min
jx:
add bx,2 ;指向下一个数据
loop s
mov ax,sum ;求平均数
div si
mov ave,ax ;结果放置ave
pop bx ;恢复寄存器
pop ds
pop bp ;恢复基址
ret 4 ;清理堆栈
odd endp
;
code ends
end start
max=1999
min=15
ave=6bd
[
本帖最后由 ansic 于 2011-6-1 12:00 编辑 ]