| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1448 人关注过本帖
标题:在win32中如何实现二维数组?
只看楼主 加入收藏
misslucky
Rank: 1
等 级:新手上路
帖 子:11
专家分:4
注 册:2009-8-14
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:6 
在win32中如何实现二维数组?
我想定义一个二维数组,表示平年和闰年的每月天数
不知是否这样定义?
 month db 31,28,31,30,31,30,31,31,30,31,30,31
       db 31,29,31,30,31,30,31,31,30,31,30,31
如何访问这个数组中的每一个数?请高人指教!
搜索更多相关主题的帖子: 二维数组 
2009-08-15 14:01
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:10 
数据组织非常灵活的,这样当然可以。

访问的话:
 
程序代码:
mov esi,offset month             //地址放入esi

xor  ecx,ecx                     //清空计数器

while (ecx < 017h)               //17h ==23,线性数组长度
   mov al,byte ptr[esi + ecx]    //访问每一个数组元素
   .......                       //你的处理语句
   inc ecx                       //计数器加一,移动下标
.endw

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-08-15 15:25
misslucky
Rank: 1
等 级:新手上路
帖 子:11
专家分:4
注 册:2009-8-14
收藏
得分:0 
谢谢!按照你的方法写了判断一年中某月的第一天是整年的第几天的函数,
DayPosition proc umonth:DWORD,uleap:DWORD    //umonth表示某月,uleap闰年的判断标志,是闰年uleap==1,否则为0
        mov esi,offset month         //month为开始定义的数组,见贴
        xor ecx,ecx
        xor eax,eax
        .if uleap==1                 //如果是闰年就是用数组中的第二行,偏移量加12
            add esi,12
        .endif
        .while ecx<umonth-1           //计算前(umonth-1)个月的天数和  
            mov al,byte ptr[esi + ecx]
            inc ecx
        .endw
        inc eax            //某月的第一天,所以加1
        ret
        DayPosition endp
2009-08-15 16:11
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
,注意一点,esi是公用约定寄存器,使用前需要保存。

所以:

DayPosition proc uses esi umonth:DWORD,uleap:DWORD

汇编器会将其展开为

push esi      //入栈保存

........   

........

pop esi      //恢复

ret          //返回

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-08-15 16:23
misslucky
Rank: 1
等 级:新手上路
帖 子:11
专家分:4
注 册:2009-8-14
收藏
得分:0 
非常感谢!不知哪些寄存器使用前一定要保存呢?
是不是可以不用uses,而直接在代码开始和结尾处分别加上pushad和popad指令来一次保存所有寄存器就可以了?
2009-08-15 17:06
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
ebx\esi\edi\esp\ebp都需要保护。

eax\ecx\edx可以自由使用,其中ecx会被某些C++编译器当做类对象的this指针使用,所以如果要与C++模块交互的话,保险

起见最好将ecx也进行保护。

是不是可以不用uses,而直接在代码开始和结尾处分别加上pushad和popad指令来一次保存所有寄存器就可以了?

完全可以,但是太没有效率。pushad要比个别寄存器入栈所占的机器时钟周期要高得多。

不过话又说回来了,似乎现在的人没有人在乎这个。毕竟现在的硬件速度要比过去强悍太多了。

[ 本帖最后由 东海一鱼 于 2009-8-15 17:38 编辑 ]

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-08-15 17:36
misslucky
Rank: 1
等 级:新手上路
帖 子:11
专家分:4
注 册:2009-8-14
收藏
得分:0 
O(∩_∩)O谢谢!
2009-08-15 17:41
快速回复:在win32中如何实现二维数组?
数据加载中...
 
   



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

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