8086装配有AFD错误,但emu8086一切都很好为什么?

时间:2017-04-28 18:59:43

标签: assembly x86-16 emu8086

当我在emu8086中运行此代码时,一切都很好,但我必须在AFD中运行此代码,然后在一行又一行的小费中我在JC et2

中出错
  

符号未定义

enter image description here

MOV CL,00fh
MOV SI,000h
MOV DI,000h

;i=0    
MOV [220h+SI],240h

et1:        
MOV AH,[210h+DI]
INC DI
MOV AL, [210h+DI]  
CMP AH,AL
JC et2   

INC SI
INC SI              
MOV [220h+SI],240h

loop et1 

HLT    

et2:      
INC SI
INC SI
DEC CL
JNZ et1
HLT     
loop et2  

ret

请帮我处理

2 个答案:

答案 0 :(得分:0)

似乎很难找到有关“AFD”的信息,但这里有一些可能有助于您找到解决方案的指示:

  • 如果您将此程序作为源提交给“AFD”,那么可能只是不能理解助记符jc。尝试使用完全相同的jb

  • 不同的程序有不同的保留字集。也许“AFD”认为 et2 是保留符号,使指令jc et2无意义。尝试重命名标签。也许选择 IsBelow ?无论如何,使用更有意义的名字总是一个好主意。

对您的代码进行一些评论:

  • 您只能使用MOV CL,00fh初始化CL寄存器。请注意,loop指令取决于整个CX寄存器。

  • loop et2下方的hlt指令毫无意义!如果它完全执行,它将启动64KB循环(因为那时计数器将为0)完全破坏你的程序数据。

因为当AH低于AL时你真正做的就是绕过另一个数字0240h的写作,你可以很好地简化你的progran:

    MOV  CX, 000Fh
    MOV  SI, 0000h
    MOV  DI, 0000h
    MOV  [0220h+SI], 0240h
TopOfTheLoop:
    MOV  AH, [0210h+DI]
    INC  DI
    MOV  AL, [0210h+DI]
    INC  SI
    INC  SI
    CMP  AH, AL
    JB   IsBelow
    MOV  [0220h+SI], 0240h
IsBelow:
    LOOP TopOfTheLoop
    HLT    

答案 1 :(得分:0)

是的,要解决我的问题,你必须定义et2:... loop et2然后编写JC et2。 如果未定义et2,则不能使用JC et2。