来看看这个程序怎么编才好呢
1、编写一个过程OddMaxMinAvg,用于求字数组中所有奇数的最大值、最小值和平均值。该过程必须有三个参数: (1)数组在数据段中的地址。
(2)数组元素的个数。
(3)保存结果的地址,其中结果顺序为:最大值、最小值、平均值。 要求用堆栈传递参数,寄存器的内容不改变。
2、编写主程序测试OddMaxMinAvg。
有完整的程序么。。据说简单。。但是还是不会 悲剧
2011-06-01 10:46
2011-06-01 10:54
2011-06-01 10:57

2011-06-01 11:23
程序代码:
;
;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

2011-06-01 11:58
2011-06-01 22:52


2011-06-02 10:06