首页
社区
课程
招聘
[求助]关于VC++内联汇编被优化的问题
发表于: 2013-11-21 00:18 4926

[求助]关于VC++内联汇编被优化的问题

bxc 活跃值
6
2013-11-21 00:18
4926
我在VC++中使用内联汇编,其中有一句发现被编译器和谐了0.0
原文:
mov     edx,[0xFF00FF00]
编译后:
mov     edx, 0xFF00FF00

修改成mov edx,dword ptr [0xFF00FF00]也不行。
VC++中不能用绝对地址么?

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

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 350
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
mov edx,dword ptr ds:[0xFF00FF00]
2013-11-21 00:52
0
雪    币: 7068
活跃值: (3517)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=Diabloking;1241163]mov edx,dword ptr ds:[0xFF00FF00][/QUOTE]

请教下,为什么要在前面加段寄存器呢?
2013-11-21 02:19
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
不是和谐了,记得以前学汇编的时候说是不能这样寻址的。
可以这样:
                xor                ebx, ebx
                mov     edx,[0xFF00FF00  + ebx]
也可以这样
mov edx,dword ptr ds:[0xFF00FF00]
2013-11-21 07:33
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
5
单片机中可以用#号来区分地址和立即数(不带#号表示该数是地址)
VC估计无法直接区分地址和立即数,得加个寻址寄存器来区分立即数。
2013-11-21 07:39
0
雪    币: 56
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
__declspec(naked)
2013-11-21 13:39
0
雪    币: 7068
活跃值: (3517)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
7
[QUOTE=toofunny;1241181]不是和谐了,记得以前学汇编的时候说是不能这样寻址的。
可以这样:
                xor                ebx, ebx
                mov     edx,[0xFF00FF00  + ebx]
也可以这样
mov edx,dword ptr ds:[0xFF00FF00][/QUOTE]

OD汇编就可以直接mov     edx,[FF00FF00]这样
2013-11-21 16:09
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
8
[QUOTE=bxc;1241380]OD汇编就可以直接mov     edx,[FF00FF00]这样[/QUOTE]

不但OD, NASM也可以。传统的汇编语言是不可以的。
另外,你这个说法也不正确,原因如下:
MOV EDX,[FF00FF00]  ;;;;提示:未知标识符
正确写法:MOV EDX,[0FF00FF00h]
完成后会被OD自动更正为:MOV EDX,DWORD PTR DS:[FF00FF00]
OD里面反汇编基本都是 段寄存器:[] 的形式的,标号和变量除外
2013-11-21 22:46
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
9
经测试,不起作用。
void __declspec(naked) demo()
{
        __asm{
                mov     edx,[0xFF00FF00]
        }
}
反汇编后:

?demo@@YAXXZ PROC NEAR       
        mov        edx, -16711936                                ; ff00ff00H
?demo@@YAXXZ ENDP                                        ; demo
2013-11-21 22:54
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
10
我傻了,在这种帖子浪费时间。
2013-11-21 23:01
0
雪    币: 7068
活跃值: (3517)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
11
[QUOTE=toofunny;1241465]不但OD, NASM也可以。传统的汇编语言是不可以的。
另外,你这个说法也不正确,原因如下:
MOV EDX,[FF00FF00]  ;;;;提示:未知标识符
正确写法:MOV EDX,[0FF00FF00h]
完成后会被OD自动更正为:MOV EDX,DWORD PTR DS:[FF00F...[/QUOTE]

我OD把显示默认段给关了。。
2013-11-22 07:31
0
游客
登录 | 注册 方可回帖
返回
//