如何将数组与汇编语言中的另一个数组进行比较

时间:2013-10-12 16:09:20

标签: arrays assembly x86 compare x86-16

我试图将array1与array2进行比较。这是我的代码的一部分,但它不会工作。

mov si, 00
mov di, 00    

Compare:
cmp array1[si], array2[di]
je checking
jmp compare    

我正在做一个会要求用户输入字符串的汇编程序。第一个字符串标记为输入。第二个字符串是旧字符序列。 第3个字符串是新替换的字符序列。


样品:

输入:hatatat

旧字符串:at

替换为:eh

输出:heheheh


1 个答案:

答案 0 :(得分:1)

指令cmp,因为大多数x86指令不能同时处理两个内存位置。您需要在寄存器中加载其中一个参数。例如:

mov   al, [Array1+si]
cmp   al, [Array2+di]

也许,有一组指令可以同时处理两个内存参数 - 字符串指令为lods, stos, cmps, movs, ... 这些指令始终与[si]和/或[di]中的存储器指针一起使用(在32位模式下为esi和edi),并且不接受常量偏移。

mov   si, Array1
mov   di, Array2
cld              

cmpsb  ; compares two bytes - from [si] and [di] and then increments si and di by 1

请阅读说明参考手册以获取更多详细说明。

注意:只要您没有提供有关首选汇编语法的信息,我就会在示例中使用FASM语法。如果您正在使用另一个汇编程序,则可能应该根据其语法编辑代码。