| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2252 人关注过本帖, 1 人收藏
标题:关于 @F 的问题
只看楼主 加入收藏
lxkaka
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-12-9
收藏(1)
 问题点数:0 回复次数:2 
关于 @F 的问题
今天看到有的程序有如  jnz @F  之类的语句 ,而@F也不是程序里的标号  请问@F是什么意思啊
搜索更多相关主题的帖子: 今天 
2008-12-09 21:51
songshilian
Rank: 2
等 级:新手上路
威 望:3
帖 子:40
专家分:0
注 册:2008-11-23
收藏
得分:0 
和@@有关,@F是跳转到本条指令后第一个@@标号,@B是跳转到本条指令前的第一个@@标号,参考《WINDOWS环境下32位汇编语言程序设计》第三章里面的基础知识。
2008-12-09 22:11
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用songshilian在2008-12-9 22:11的发言:

和@@有关,@F是跳转到本条指令后第一个@@标号,@B是跳转到本条指令前的第一个@@标号,参考《WINDOWS环境下32位汇编语言程序设计》第三章里面的基础知识。


正解!

2. MASM中的@@

在DOS时代,为标号起名是个麻烦的事情,因为汇编指令用到跳转指令特别多,任何比较和测试等都要涉及跳转,所以在程序中会有很多标号,在整个程序范围内起个不重名的标号要费一番功夫,结果常常用addr1和addr2之类的标号一直延续下去,如果后来要在中间插一个标号,那么就常常出现addr1_1和loop10_5之类奇怪的标号。

实际上,很多标号只会使用一到两次,而且不一定非要起个有意义的名称,如汇编程序中下列代码结构很多:

  mov cx,1234h

  cmp flag,1

  jz   loc1

  mov cx,1000h

loc1:

  

  loop  loc1

loc1在别的地方就再也用不到了,对于这种情况,高版本的MASM用@@标号去代替它:

mov cx,1234h

cmp flag,1

jz   @F

mov cx,1000h

@@:



loop  @B

当用@@做标号时,可以用@F和@B来引用它,@F表示本条指令后的第一个@@标号,@B表示本条指令前的第一个@@标号,程序中可以有多个@@标号,@B和@F只寻找匹配最近的一个。

 不要在间隔太远的代码中使用@@标号,因为在以后的修改中@@和@B,@F中间可能会被无意中插入一个新的@@,这样一来,@B或@F就会引用到错误的地方去,源程序中@@标号和跳转指令之间的距离最好限制在编辑器能够显示的同一屏幕的范围内。
2008-12-10 13:19
快速回复:关于 @F 的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029295 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved