首页
社区
课程
招聘
[原创]请教这句C语言怎么用Win32汇编实现?
发表于: 2011-4-11 21:17 4299

[原创]请教这句C语言怎么用Win32汇编实现?

2011-4-11 21:17
4299
我想用Win32汇编写代码实现大致下面这句的功能:
a=b-c
if a>0
{...}
a,b,c都为整数。其实就是判断b减c的差是否为正,如果为正(也就是b比c大),就执行if里面的代码。
我写的Win32代码如下:
mov eax, b
sub eax, c
mov a, eax
.if a > 0
......
.endif
看起来貌似没什么问题,结果出错了。举一个例子就能看出来:如果b为0,c为3,那么a就是-3,在内存中表示为0FFFF FFFD, 而表达式"a>0"的值就会为真。。。
想请教大家,怎么样才能正确地实现我想要的功能呢?请各位不吝赐教,谢谢大家了

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 723
活跃值: (81)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
2
a=b-c
-----------------
你要区分两种情况:signed 和 unsigned

1. 当是 unsigned 的时候:

mov eax, a
sub eax, c
jc   next                    // a < 0
...                           // a > 0

next:
   ...

2. 当 signed 的时候

mov eax, b
sub eax, c

jl    next                            // a < 0
   ....                                  // a > 0

next:
    ...
2011-4-11 21:42
0
雪    币: 723
活跃值: (81)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
3
根据你的需求,你不需要做 sub, 只需做 cmp 就行了
2011-4-11 21:43
0
雪    币: 233
活跃值: (285)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
4
同上~~直接cmp + js,jns或je就可以了~~
2011-4-11 21:46
0
雪    币: 723
活跃值: (81)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
5
这你个 js, jns 和 je 表达不到 >, <, <= 以及 >= 这些逻辑关系
2011-4-11 21:54
0
雪    币: 233
活跃值: (285)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
6
讨论这个有意思嘛?只是举个例子而已,需要什么条件自己写就行了,难道我还要把所有可能的情况都罗列一遍?jcc三十多条指令,再与cmp,test组合,你嫌不累的话,可以都讲讲啊~~
2011-4-11 22:02
0
雪    币: 723
活跃值: (81)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
7
汗~
你能把 js,jns 顺手写来,作为比较结果,说明你不明白这些条件码的意义!

你要是连这一点都不接受,无话可说,到此为止
2011-4-11 22:06
0
雪    币: 233
活跃值: (285)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
8
好吧,我刚口气不太好,对汇编没有深入的研究,仅限于做逆向时接触的内容。
js和je是最好记的,分别根据SF和ZF标志位的值进行跳转。我的回答有问题吗?事实上只要判断大于或者小于0就好了,最后把je随手加上了,是为了将所有情况都考虑到~~
2011-4-11 22:11
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
c写好 F5 点反汇编 就看到了
2011-4-11 22:14
0
雪    币: 723
活跃值: (81)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
10
SF 与 OF 组合可以判断大小(符号数)
SF 与 ZF 组合不能判断大小,只等得到是否等于的结果
--------------------------------
你的回答恰恰是不当的
2011-4-11 22:17
0
雪    币: 500
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
喔,明白你的意思了~谢谢!

不过,我不只要比较一对数相减的结果,而是好几对数。。。
比如说:
a= b-c
d=e-f
g=h-i
if a>0&&d>0&&g>0
{...}
elseif a>0&&d>0&&g<0
{....}
else
{...}
这样的话cmp怎么用了呢。。
2011-4-11 22:19
0
雪    币: 233
活跃值: (285)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
12
好吧~~是有无符号的问题吧~~我确实没有考虑这些~~
2011-4-11 22:21
0
雪    币: 723
活跃值: (81)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
13
复合条件,多做几次 cmp
2011-4-11 22:21
0
雪    币: 500
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
明白了,谢谢~
2011-4-11 22:24
0
雪    币: 500
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
有关这个问题我今天在书上找到了,《Windows环境下的32位汇编语言程序设计》的第五章里,讲解对话框程序Control的滚动条部分里面有讲~
2011-4-12 20:09
0
游客
登录 | 注册 方可回帖
返回
//