我有两个向量;其中一个(VectorA)是用户介绍的,另一个(VectorB)包含一堆个位数的数字。它们都是 char 向量。这个想法是程序必须逐一比较 VectorA 的数字,以确保它们是有效数字,通过将它们与 VectorB 中的数字进行比较,其中包含所有可用的有效数字。
如果 VectorA 中的所有数字都包含在 VectorB 中,则程序返回 0。如果 VectorA 中的任何数字都不存在于 VectorB 中,则程序返回 1。返回寄存器是EAX
。
这是代码,我希望它不会太乱,但请耐心等待(如果我使用了错误的术语,请原谅,因为英语不是我的母语)......
MOV edi, 5 ;VectorA is a 5 digit vector.
character_1:
mov rcx, 10 ;VectorB is a 10 digit vector.
character_2:
mov eax, [ebx+edi-1] ;ebx contains the address of VectorA
cmp eax, [VectorB+rcx-1]
je found_it
loop character_2
mov eax, 1
jmp end_comp
found_it:
dec edi
cmp edi, 0
jne character_1
mov eax, 0
end_comp:
首先,我知道我可能不应该将其用作EAX
索引,但在尝试了一大堆其他注册表EAX
之后,只有一个没有YASM
吓坏。
问题是......它似乎不起作用。第一个验证循环工作正常。如果 VectorA 的最后一个数字是 9,它实际上会转到found_it
标签并执行它必须执行的操作。但是,无论第二个数字是什么,它都不会在 VectorB 上找到它。
出于调试目的,我mov esi, [VectorB+rcx-1]
在主行正上方添加了一行CMP
,用于比较两个值。我发现第一次比较它们时,ESI
具有正确的值。但是,程序第二次执行该指令时,返回一个 14648 值,这当然与下一行中ESI
的内容不对应。EAX
有谁知道我做错了什么?