我正在用TASM-4.1编写一个汇编程序,我偶然发现了一个问题,我已经两天无法解决了。问题是TASM只是不承认宏中的标签为本地标签,并且在组装时会给我一个错误(符号已经在其他地方定义了)。到目前为止,我已经尝试了以下几点:
这是我第一次尝试编程,所以如果我错过了一些导致这个问题的琐事,我很抱歉。下面是我多次使用的宏:
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文件开始时声明标签,并在宏本身中对每个标签使用本地,如下所示:
LOCAL @@label1
LOCAL @@label2
LOCAL @@label3
...将它们列在一行中(本地的@label3 1,@label3 2,@@label3 3,.)不管用。
也许有人会发现这很有用。
发布于 2015-04-27 16:32:00
我不知道您的解决方案是如何解决这个问题的,但是局部变量指令只启用@@前缀,@@前缀只使标签成为当前过程(PROC)的本地标记。只有本地指令才能使标签成为本地宏,并且只有在宏定义开始时才能使用。解决方案2应该适用于您,但可能您在宏困惑的TASM中在本地指令上下文中使用@@前缀。但是,我不能用较早版本的汇编程序TASM 3.1来重现这个问题。
因此,您应该做的是声明不带@@前缀的本地宏标签,因为它并不是必要的,而且实际可以做一些您期望之外的事情。就像这样:
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
...
endmhttps://stackoverflow.com/questions/29896060
复制相似问题