Assembly 程序集比较incloud文件中的变量

Assembly 程序集比较incloud文件中的变量,assembly,emu8086,Assembly,Emu8086,我正在Tictatcoe游戏中构建一个组装Ai。我用的是eu8086乳化器。 我的想法很简单,我预先准备了一张桌子 table db 0 0 0 db 0 0 0 db 0 0 0 并在玩家每次玩游戏时更改值。 现在,我创建了很多这样的表,每个表都有不同的状态。 并将它们与curnnet的进行比较,然后告诉计算机该怎么做。 所以我做了一个incloud文件,放了很多变量。问题是,当我比较它们时,计算机没有意识到它们是相同的,但是如果它在同一个文件中,他就被识别了 比较说

我正在Tictatcoe游戏中构建一个组装Ai。我用的是eu8086乳化器。 我的想法很简单,我预先准备了一张桌子

table db 0 0 0
      db 0 0 0
      db 0 0 0
并在玩家每次玩游戏时更改值。 现在,我创建了很多这样的表,每个表都有不同的状态。 并将它们与curnnet的进行比较,然后告诉计算机该怎么做。 所以我做了一个incloud文件,放了很多变量。问题是,当我比较它们时,计算机没有意识到它们是相同的,但是如果它在同一个文件中,他就被识别了

比较说明:

    CompareArray MACRO arr1,arr2
    cld
    mov cx,9

    lea di,arr1
    lea si,arr2

    repe cmpsb
    jnz enddd

    mov isEquel, 1
    jmp ed
enddd:
    mov isEquel,0 
ed:
    ENDM
如何包含该文件:

include TicTacToeAi.inc
文件本身(我删除了很多以尝试检查问题):


我很高兴能得到帮助

请不要链接代码的图像。相反,只需在这里直接编写代码(就像您对表定义所做的那样)。反汇编程序生成的二进制文件(或让汇编程序生成一个列表文件)。使用该输出来比较使用包含文件和不使用包含文件生成的代码。我认为这是找出发生了什么情况的最可靠的方法。您可能将其包含在与以前不同的段中,并且您不会通过使用正确的段寄存器来反映这一点(
cmps
确实隐式使用
ds:si
作为“源代码”)地址和
es:di
作为“目的地”地址,其中隐式的
ds
可以被段前缀覆盖,并且
es
在硅中设置).emu8086最近确实添加了对列出文件的支持,可能是向软件供应商查询,对于其他汇编程序,它通常是
-l
命令行选项。无论如何,尝试为此制作,从您发布的片段来看,不清楚如何/在何处包含数据以及如何设置比较代码。例如:“我如何包含文件”-你知道汇编程序会产生“机器代码”吗例如,将include放在代码中的某个位置会产生数据字节,这些字节会意外地作为指令执行?整个汇编源不仅描述了应该汇编哪些指令,而且还将它们相对地放在最终机器代码中,因此您必须将每一部分放在适当的位置(一些汇编器允许使用指令(如
.code/.data
)在节之间快速切换,但更多情况下,数据不能与代码混合)建议:让您的宏将结果保留在ZF中。可能使用此宏的代码将在结果上分支,因此只执行
comparararray状态[bx]更有效
/
je match\u找到的
没有涉及结果的静态存储。(如果您接受Ped7g的建议并将其放在函数中而不是宏中,则同样适用。在这种情况下,我建议调用者在SI和DI中传递参数,并在ZF中返回。因此函数体就是
cld
/
mov cx,9
/
repe cmpsb
/
ret
)。
; TicTacToeAi.inc - macro definitions library for easy input/output

tableF   db 1,0,0 
         db 0,0,0 
         db 0,0,0