首页
社区
课程
招聘
[旧帖] MASM的问题 0.00雪花
发表于: 2010-3-14 22:21 4372

[旧帖] MASM的问题 0.00雪花

2010-3-14 22:21
4372
MOV ECX,DWORD PTR [01BBD028h]
为什么编译后
MOV ECX,01BBD028

为什么
JMP 00401000
会出错

这是为什么呢...

编译工具 MASM

每次我都要
MOV ECX,01BBD028H
MOV ECX,[ECX]

每次都要
MOV ECX,00401000
JMP ECX
或者是把地址放在变量里
Addr dd 00401000H

jmp Addr

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 309
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
在编译时。数字好像一般不直接认为是地址。
所以:

数字加【】没有意义,不像寄存器。
所以,编译时会去掉中括号。

jmp后面也不能跟单独的数字。
所以不能jmp 004*

不行你就试试TASM。

别把编译器想得那么智能。你这完全是在调戏他们。。。

你要是这样,就用机器码编程得了。。。
2010-3-14 22:44
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
MOV ECX,DWORD PTR ds:[01BBD028h]

JMP 00401000

因为编译的时候无法得知当前的地址是啥

mov eax,401000h
jmp eax

or

push 401000h
ret
2010-3-14 22:47
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
MOV ECX,DWORD PTR [01BBD028h]
这语句是不可以通过编译的,因为编译器不知道[01BBD028h]是否为有效地址。
JMP 00401000
跳转语句中的立即数地址只能是相对地址,而不是绝对地址,所以你只有用你所说的方法,或者你在程序开头处设个标记,例如:loop1:  
然后,JUMP处改为 jmp loop1
2010-3-14 23:23
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
当然,你也可以用3楼所说的方法
2010-3-14 23:24
0
雪    币: 309
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
额,他只是在问为什么。
我想他还是知道那么基本的方法的。。
2010-3-14 23:26
0
雪    币: 143
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
[QUOTE=liuyq;775749]MOV ECX,DWORD PTR [01BBD028h]
这语句是不可以通过编译的,因为编译器不知道[01BBD028h]是否为有效地址。
JMP 00401000
跳转语句中的立即数地址只能是相对地址,而不是绝对地址,所以你只有用你所说的方法,或者你在程序开头处设个标记,例如:loop1:...[/QUOTE]
事实上这句编译能通过,只是编译后自动被修改了。
2010-3-14 23:34
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
说明它是错误编译啊
2010-3-14 23:55
0
游客
登录 | 注册 方可回帖
返回
//