首页
社区
课程
招聘
[求助]汇编语法不明白
发表于: 2014-4-10 11:11 5093

[求助]汇编语法不明白

2014-4-10 11:11
5093
1、“@@:”
2、jmp        @b  中的 @b

小弟真心不懂,有哪位好心人提点一下

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

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 135
活跃值: (63)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
好像
@@是可以重复的标号,@b就是上一个@@,@f是下一个@@,不知道对不对。b=back,f=forward。实在不记得,就看看罗云彬的那本书讲过。
2014-4-10 11:19
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢楼上,我去看看
2014-4-10 11:29
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
Win32汇编的标号和 @@
(相当于C中的goto)
当在程序中使用一条跳转指令的时候,可以用标号来表示跳转的目的地,编译器在编译的时候会把它替换成地址,
标号既可以定义在目的指令同一行的头部,也可以在目的指令前一行单独用一行定义,标号定义的格式是:
标号名:         目的指令
标号的作用域是当前的子程序,在单个子程序中的标号不能同名,否则编译器不知该用哪个地址,但在不同的子程序中可以有相同名称的标号,这意味着不能从一个子程序中用跳转指令跳到另一个子程序中。
在低版本的MASM中,标号在整个程序中是惟一的,子程序中的标号也可以从整个程序的任何地方转入。
但Win32汇编使用的高版本MASM中不允许这样,这是为了提供对局部变量和参数的支持,由于在子程序入口处有对堆栈的初始化指令,所以一个子程序不允许有多个入口,其结果就是标号的作用域变成了单个子程序范围。
MASM中的@@
当用@@做标号时,可以用@F和@B来引用它,@F表示本条指令后的第一个@@标号,@B表示本条指令前的第一个@@标号,程序中可以有多个@@标号,@B和@F只寻找匹配最近的一个。
2014-4-10 11:37
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
确实是这样,谢谢  fatecaster
2014-4-10 11:38
0
雪    币: 1254
活跃值: (730)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
就是为了解决汇编中,跳转命名是个麻烦的事情,发明了@@   @b   @f.
2014-4-15 09:48
0
雪    币: 20
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我也是新学的,把我理解的意思传达给你,理解的不对,请不要见怪.

@@:是给出一个地址也可以理解成一座房子
@b: 是前门,你要进去就走前门
@f:  是后门,你出来的时候走后门
流程是@b=>@@=>@f
@b出现就是要进一座房子,进哪个房子呢@@,进去就得出来那就走后门@f
如果没有@b的话也就是不进门后面给出房子@@无效,没有进就不会涉及到出@f的问题
如果@b进去了@@但是没有出@f,那就只能在里边待着了,再有一座房子@@你也进不去
所以出现这些情况的时候就会报错
^O^
2014-5-7 13:20
0
游客
登录 | 注册 方可回帖
返回
//