| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 576 人关注过本帖
标题:来看看这个程序怎么编才好呢
只看楼主 加入收藏
fina2046
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-6-1
结帖率:0
收藏
已结贴  问题点数:20 回复次数:6 
来看看这个程序怎么编才好呢
1、编写一个过程OddMaxMinAvg,用于求字数组中所有奇数的最大值、最小值和平均值。该过程必须有三个参数:
(1)数组在数据段中的地址。
(2)数组元素的个数。
(3)保存结果的地址,其中结果顺序为:最大值、最小值、平均值。 要求用堆栈传递参数,寄存器的内容不改变。

2、编写主程序测试OddMaxMinAvg。


有完整的程序么。。据说简单。。但是还是不会  悲剧
搜索更多相关主题的帖子: 寄存器 平均值 主程序 最大值 元素 
2011-06-01 10:46
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
字数组 是字符数组还是数值数组?

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-06-01 10:54
fina2046
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-6-1
收藏
得分:0 
数值数组啊。。。打错了
2011-06-01 10:57
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
简单。但有些繁琐,我给你一个基本框架吧
调用子程序之前,将数组的段地址和偏移地址入栈,如:
在主程序里:
...
push ds
lea bx,array
push bx
call OddMaxMinAvg
...
OddMaxMinAvg proc
    push bp
    mov sp,bp
    push ds
    push bx
    mov ds,[bp+6]
    mov bx,[bp+4]
;开始对数组操作
   pop bx
   pop ds
   pop bp
   ret 4
OddMaxMinAvg endp

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-06-01 11:23
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:10 
程序代码:
;
;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 编辑 ]

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-06-01 11:58
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:10 
挺好的,有些小问题

技术问题,请不要以短消息方式提问
2011-06-01 22:52
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
以下是引用zaixuexi在2011-6-1 22:52:30的发言:

挺好的,有些小问题

嗯,sum应该用dd,否则容易溢出。

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-06-02 10:06
快速回复:来看看这个程序怎么编才好呢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015471 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved