首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本地和本地指令

本地和本地指令
EN

Stack Overflow用户
提问于 2015-04-27 12:39:24
回答 1查看 2.2K关注 0票数 0

我正在用TASM-4.1编写一个汇编程序,我偶然发现了一个问题,我已经两天无法解决了。问题是TASM只是不承认宏中的标签为本地标签,并且在组装时会给我一个错误(符号已经在其他地方定义了)。到目前为止,我已经尝试了以下几点:

  1. 将局部变量放在.asm文件的开头,并使用@ for本地标签(类似问题的答案之一)。没有产生任何效果。
  2. 使用宏中的本地标记列出以@@开头的所有本地标签(同样,正如web上所建议的那样)。然而,这在组装时会产生更多的错误:“符号已经不同类型”和“期望指针类型”。
  3. 将局部变量“@”放在宏的开头。就像第一种情况一样,零效应。
  4. 将局部变量放在.asm文件的开头,并使用本地列出标签。与2号相同的效果。
  5. 将局部变量放在.asm文件的开头,并使用局部变量@ inside宏。没有效果。
  6. 将局部变量@@放在.asm文件的开头。没有效果。

这是我第一次尝试编程,所以如果我错过了一些导致这个问题的琐事,我很抱歉。下面是我多次使用的宏:

代码语言:javascript
复制
dot_connect_oct1 macro dot1_x, dot1_y, dot2_x, dot2_y, colour

        ;;code

    @@check_1:
        ;;code
        jz @@exit_1

        ;;code
        jg @@draw_1_2

    @@draw_1_1:
        ;;code
        jmp @@check_1

    @@draw_1_2:
        ;;code
        jmp @@check_1

    @@exit_1:
endm

更新:

好吧,我好像找到了解决办法。对我起作用的是在.asm文件开始时声明标签,并在宏本身中对每个标签使用本地,如下所示:

代码语言:javascript
复制
LOCAL @@label1
LOCAL @@label2
LOCAL @@label3
...

将它们列在一行中(本地的@label3 1,@label3 2,@@label3 3,.)不管用。

也许有人会发现这很有用。

EN

回答 1

Stack Overflow用户

发布于 2015-04-27 16:32:00

我不知道您的解决方案是如何解决这个问题的,但是局部变量指令只启用@@前缀,@@前缀只使标签成为当前过程(PROC)的本地标记。只有本地指令才能使标签成为本地宏,并且只有在宏定义开始时才能使用。解决方案2应该适用于您,但可能您在宏困惑的TASM中在本地指令上下文中使用@@前缀。但是,我不能用较早版本的汇编程序TASM 3.1来重现这个问题。

因此,您应该做的是声明不带@@前缀的本地宏标签,因为它并不是必要的,而且实际可以做一些您期望之外的事情。就像这样:

代码语言:javascript
复制
dot_connect_oct1 macro dot1_x, dot1_y, dot2_x, dot2_y, colour
    LOCAL check_1, draw_1_1, draw_1_2, exit_1

check_1:
    jz exit_1

    ...
endm
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29896060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档