汇编中的@@, JMP @F, JMP @B 是什么意思

本文深入探讨了汇编语言中@@标号的特殊用途,以及如何利用@F和@B指令实现向上或向下跳转到最近的@@标号。介绍了这种标号在循环和条件跳转中的应用,并提供了修改标号以适应不同编译器需求的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在汇编语言的程序中,标号,总是免不了的。
程序编写的长了,标号,就要有很多。

但是,在一个程序中,标号,是不能重名的。
于是,在编程时,对于标号的命名,往往要费些心思。

@@,在汇编语言中,是当作标号用的。
而且,这个标号,还可以重复使用。
这不就方便多了吗?

标号,有时是作为一段程序的名称。
其最基本的功能就是:作为转移指令、调用指令的目的地。

可是,如果在程序中,有了很多很多的 @@,可怎么区分它们呢?
方法就是:最近。

@F,就是向下转移到最近的 @@ 处;
@B,就是向上转移到最近的 @@ 处。

例如:

    MOV   CX, 8   ;循环 8 次
@@: ... ...      ;这就是一个标号
    ... ...
    ... ...      ;循环体
    ... ...
    LOOP  @B     ;向上转移到最近的@@处

又例如:

    MOV   AL, [SI]
    CMP   AL, 0
    JNZ   @F     ;向下转移到最近的@@处
    ... ...
    ... ...
@@: ... ...
    ... ...

做而论道所编写的程序,有许多标号都是使用了 @@ 的形式。
看起来很简明,而且编程也方便。

但是需要注意的是:

--用 EMU8086 编译不通过,@@ 报错。
--网上搜了一下,说是 @@ 只对于 MASM 有效。

如果实在是想用 EMU8086,你也可以自己改动一下。
把 @@、@F、@B 都改掉,即可。

比如,在某处有个 @@,你可以自己改成:XX1;
然后在其前、后都找一找,凡是转移到此处的 @F、@B,都要改成:XX1。

其它的 @@、…,也都按此方法,依次修改,即可。
改过之后,用 EMU8086 编译时,就应该不出错了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值