2013-10-12 37 views
0

我试图比较array1和array2。这是我的代码的一部分,但它不会工作。如何用汇编语言比较阵列与另一个阵列

mov si, 00 
mov di, 00  

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

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


样品:

输入:hatatat

旧字符串:在

替换为:诶

OUTPUT:heheheh


+0

你不能有'cmp'两个内存操作数。首先将其中一个字符装入一个寄存器,或使用'cmps'指令。另外,你需要在你比较过的每一对角色之后增加'si'和'di',并进行一些检查,看看你是否已经移动过任何一个数组的末尾。 – Michael

回答

1

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

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

或许,有一组指令,其可以过程中的两个存储器同时参数 - 字符串指令作为lods, stos, cmps, movs, ... 这些指令总是在[SI]和/或[二与存储器指针工作](esi和edi在32位模式下)并且不接受常量偏移量。

mov si, Array1 
mov di, Array2 
cld    

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

请阅读说明参考手册了解更多详细说明。

注意:只要您没有提供有关首选汇编语法的信息,我在示例中使用了FASM语法。如果您使用其他汇编程序,则可能应该按照其语法编辑代码。

+0

你不是要比较'Array1 + si'(加载到'al'和'Array2 + s1',然后'inc si'吗?或者将[si]与[di]和'inc'比较? – Davislor

+0

@Davislor是的,在这种情况下,使用其中一个寄存器更好,但是OP使用di和si,并且我想尽可能使代码尽可能接近他的代码。 – johnfound