当我在emu8086中运行此代码时,一切都很好,但我必须在AFD中运行此代码,然后在一行又一行的小费中我在JC et2
符号未定义
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
请帮我处理
答案 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。