| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1222 人关注过本帖
标题:[求助]我的求闰年子程序代码错在什么地方啊
只看楼主 加入收藏
彭现陈
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-7-21
收藏
 问题点数:0 回复次数:5 
[求助]我的求闰年子程序代码错在什么地方啊
这是我的判断闰年的子程序代码,形参yy传入的是年份:
IsRunNian proc yy:DWORD
mov eax,yy
xor ebx,ebx
mov bx,4
div bx
shr eax,16
.if ax==0
mov bx,100
mov eax,yy
div bx
shr eax,16
.if ax==0
mov bx,400
mov eax,yy
div bx
shr eax,16
.if ax==0
mov eax,TRUE
.else
mov eax,FALSE
.endif
.else
mov eax,TRUE
.endif
.else
mov eax,FALSE
.endif
ret
IsRunNian endp
执行时出错.弹出如下窗口:
图片附件: 游客没有浏览图片的权限,请 登录注册

当我把子程序种的div bx全部去掉后,再执行,就不出错了.
为了完成判断闰年的功能,我该怎么办啊??错在哪里啊??好几天了,哪位高手看出来帮下忙啊.
搜索更多相关主题的帖子: 子程序 闰年 代码 
2007-08-05 19:20
yege
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-5-22
收藏
得分:0 

不知道你用的是那種工具﹐
我記得匯編里的子程序是不能帶參數的。

.386
.model small
.data
yy dd 1949
true dd 1
false dd 0

.code

start:
IsRunNian proc ;yy:DWORD

mov eax,yy
xor ebx,ebx
mov bx,4
div bx
shr eax,16
.if ax==0
mov bx,100
mov eax,yy
div bx
shr eax,16
.if ax==0
mov bx,400
mov eax,yy
div bx
shr eax,16
.if ax==0
mov eax,TRUE
.else
mov eax,FALSE
.endif
.else
mov eax,TRUE
.endif
.else
mov eax,FALSE
.endif
ret

IsRunNian endp
end start

2007-08-13 08:17
casm
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-8-14
收藏
得分:0 

IsRunNian proc uses ebx edx yy:DWORD


win32asm讨论群:44942254
2007-08-14 20:41
彭现陈
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-7-21
收藏
得分:0 
回复:(yege)不知道你用的是那種工具﹐我記得匯編里...

我用的masm32开发包.
子程序是可以带参数的,使用invoke语句调用子程序,编译器会自动为我们把参数传递的工作做好.
我在网上找到了正确的答案,程序可以正确判断闰年.
并且基本搞懂了为什么我的代码会出错.

这是我找到的正确的代码:
IsRunNian proc dwYear:DWORD

xor eax,eax
pushad
mov ebx,dwYear
mov eax,ebx
xor edx,edx
mov ecx,400
div ecx
or edx,edx
je loc002
mov eax,ebx
xor edx,edx
mov ecx,100
div ecx
or edx,edx
je loc001
mov eax,ebx
xor edx,edx
mov ecx,4
div ecx
or edx, edx
jne loc001
loc002: inc dword ptr [esp+1Ch] ;returnEAX
loc001: popad
ret


我想,用子程序返回值的时候,必须把返回的值存放进[esp+1Ch],编译后自动将他的值放入eax.
而不是在程序中自己用代码将返回值放入eax,因为编译器可能在函数返回时处理eax,这样,返回值就丢失了.
这是我猜想的.

2007-08-15 11:00
彭现陈
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-7-21
收藏
得分:0 
回复:(casm)IsRunNian proc uses ebx edx yy:DWORD...
不需要uses也可以的.
2007-08-15 11:01
无理取闹
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:53
帖 子:4264
专家分:0
注 册:2006-7-26
收藏
得分:0 

可以这样
IsRunNian proc :dword
local @return
pushad
.
.
.
.
mov @return,eax
popad
mov eax,@return
IsRunNian endp


win32汇编
病毒 加密
目前兴趣所在
2007-08-15 17:34
快速回复:[求助]我的求闰年子程序代码错在什么地方啊
数据加载中...
 
   



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

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