寄托天下 寄托天下
查看: 8074|回复: 34
打印 上一主题 下一主题

[编程天地] 今天被一段5行的汇编差点搞崩溃 [复制链接]

Rank: 11Rank: 11Rank: 11Rank: 11

声望
3110
寄托币
48275
注册时间
2003-9-1
精华
44
帖子
1795

荣誉版主 GRE斩浪之魂 Golden Apple

跳转到指定楼层
楼主
发表于 2010-3-5 07:42:44 |只看该作者 |倒序浏览
其实很简单的代码,把错误的贴出来,看看大家有没有发现错在哪里:

  1.         __asm{
  2. sleep:
  3.                 mov eax, 8
  4.                 dec eax
  5.                 cmp eax, 0
  6.                 jnz sleep
  7.         }
复制代码
回应
0

使用道具 举报

Rank: 9Rank: 9Rank: 9

声望
297
寄托币
9342
注册时间
2009-3-2
精华
2
帖子
110

荣誉版主

沙发
发表于 2010-3-11 13:23:20 |只看该作者
好久没用汇编了,司机仁兄现在在哪呀?
决定去Gatech了!
Three passions, simple but overwhelmingly strong, have governed my life: the longing for love, the research for knowledge, and unbearable pity for the suffering of mankind.

使用道具 举报

Rank: 11Rank: 11Rank: 11Rank: 11

声望
3110
寄托币
48275
注册时间
2003-9-1
精华
44
帖子
1795

荣誉版主 GRE斩浪之魂 Golden Apple

板凳
发表于 2010-3-11 22:49:49 |只看该作者
还在老地方啊。呵呵

使用道具 举报

Rank: 9Rank: 9Rank: 9

声望
4149
寄托币
29807
注册时间
2008-11-24
精华
20
帖子
1432

荣誉版主 QQ联合登录 备考先锋 AW活动特殊奖 AW作文修改奖 IBT Smart Virgo处女座 US Applicant Sub luck

地板
发表于 2010-3-11 23:58:58 |只看该作者
老实说大概看一下好像是没错,我觉得问题可能出在 dec这个东西,它好像自己就能影响ZF位吧,那还要CMP么?
平生太湖上,短棹几经过,于今重到何事? 愁比水云多。拟把匣中长剑,换取扁舟一叶,归去老渔蓑。银艾非吾事,丘壑已蹉跎。
脍新鲈,斟美酒,起悲歌:太平生长,岂谓今日识干戈!欲泻三江雪浪,净洗胡尘千里,无为挽天河。回首望霄汉,双泪坠清波。

使用道具 举报

Rank: 9Rank: 9Rank: 9

声望
336
寄托币
955
注册时间
2006-3-31
精华
11
帖子
469

荣誉版主

5
发表于 2010-3-12 02:41:22 |只看该作者
Check the order of src and dest of the MOV.
Also try the MOVL.
Ref: http://www.ibm.com/developerworks/linux/library/l-ia.html


飞起来的时候幸福的感觉就来了!

使用道具 举报

Rank: 11Rank: 11Rank: 11Rank: 11

声望
3110
寄托币
48275
注册时间
2003-9-1
精华
44
帖子
1795

荣誉版主 GRE斩浪之魂 Golden Apple

6
发表于 2010-3-12 07:22:36 |只看该作者
呵呵。4楼和5楼回答的都不对。偷偷的笑一下。
MOV的ORDER没错。我例子程序是在MS VS 里面,用的INTEL格式,不是AT&T格式。即使你用AT&T重写一遍,还是同样的错误。(其实我最早是用AT&T在LINUX下写的,但是不好调,所以换到MS VS 里面又写了一遍)
DEC能否影响ZF不清楚,不过CMP一下也没错。关键的错误不在这里。

使用道具 举报

Rank: 11Rank: 11Rank: 11Rank: 11

声望
3110
寄托币
48275
注册时间
2003-9-1
精华
44
帖子
1795

荣誉版主 GRE斩浪之魂 Golden Apple

7
发表于 2010-3-13 07:25:59 |只看该作者
INC, DEC没啥问题。关键问题是1楼的程序会死循环。这个提示够强了吧?

使用道具 举报

Rank: 9Rank: 9Rank: 9

声望
336
寄托币
955
注册时间
2006-3-31
精华
11
帖子
469

荣誉版主

8
发表于 2010-3-13 07:59:51 |只看该作者
我已经把那个死循环改过来了,还是有问题。


飞起来的时候幸福的感觉就来了!

使用道具 举报

Rank: 9Rank: 9Rank: 9

声望
336
寄托币
955
注册时间
2006-3-31
精华
11
帖子
469

荣誉版主

9
发表于 2010-3-13 08:02:13 |只看该作者
我用cmp和jne配合试的


飞起来的时候幸福的感觉就来了!

使用道具 举报

Rank: 9Rank: 9Rank: 9

声望
336
寄托币
955
注册时间
2006-3-31
精华
11
帖子
469

荣誉版主

10
发表于 2010-3-13 08:28:25 |只看该作者
我用inc指令貌似没问题
用dec指令程序貌似有死循环
附件是两个程序
附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册


飞起来的时候幸福的感觉就来了!

使用道具 举报

Rank: 9Rank: 9Rank: 9

声望
336
寄托币
955
注册时间
2006-3-31
精华
11
帖子
469

荣誉版主

11
发表于 2010-3-13 08:59:21 |只看该作者
找出原因了
我的代码把src和dst弄反了
低级错误
现在dec和inc都能跑了


飞起来的时候幸福的感觉就来了!

使用道具 举报

Rank: 9Rank: 9Rank: 9

声望
336
寄托币
955
注册时间
2006-3-31
精华
11
帖子
469

荣誉版主

12
发表于 2010-3-13 09:08:22 |只看该作者
司机贴出来的顺序和gnu assembler的顺序是相反的
一直都忘了查顺序,后来gdb一下才发现了我的顺序反了


飞起来的时候幸福的感觉就来了!

使用道具 举报

Rank: 9Rank: 9Rank: 9

声望
336
寄托币
955
注册时间
2006-3-31
精华
11
帖子
469

荣誉版主

13
发表于 2010-3-13 09:17:18 |只看该作者
恩,顺便把改正以后的代码帖上来
附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册


飞起来的时候幸福的感觉就来了!

使用道具 举报

Rank: 11Rank: 11Rank: 11Rank: 11

声望
3110
寄托币
48275
注册时间
2003-9-1
精华
44
帖子
1795

荣誉版主 GRE斩浪之魂 Golden Apple

14
发表于 2010-3-13 23:08:32 |只看该作者
赞下小披风同学的认真态度. 其实我开始就是没看出来那个死循环. 而且比较郁闷的是,我开始是在一个类似DOS的环境下跑的. 一死就整个机器死了,调都没法调. 后来把代码搬到 VS 上单步几下就看出来了.

使用道具 举报

Rank: 9Rank: 9Rank: 9

声望
336
寄托币
955
注册时间
2006-3-31
精华
11
帖子
469

荣誉版主

15
发表于 2010-3-14 01:24:45 |只看该作者
不是俺态度认真
而是debug这种事情欲罢不能
会上瘾的


飞起来的时候幸福的感觉就来了!

使用道具 举报

RE: 今天被一段5行的汇编差点搞崩溃 [修改]
您需要登录后才可以回帖 登录 | 立即注册

问答
Offer
投票
面经
最新
精华
转发
转发该帖子
今天被一段5行的汇编差点搞崩溃
https://bbs.gter.net/thread-1067232-1-1.html
复制链接
发送
报offer 祈福 爆照
回顶部