如何同时循环两个字符串的字符?

时间:2015-01-11 15:52:55

标签: assembly x86

我在Windows 8 32位上使用TASM 3.1。我试图一次从两个不同的字符串中读取两个字符。即

之类的东西
for(I = 0, J = 0; I < N1 && J < N2; I++, J++)
{
    char c1 = string1[I];
    char c2 = stirng2[J];
}

我可以通过

循环遍历一个字符串的字符
mov si, offset string
start:
  mov al, [si]
  cmp al, 0
  je end
  ;do stuff with character in al
  inc si
  jmp start
end:

我在

的顶部声明了字符串
.data
  string db 'abracadabra'

我怎样才能在那里获得第二个字符串并重复迭代,就像我第一次做的那样?似乎si是我可以使用的唯一一种索引器,这对于两个字符串来说还不够。

我正在尝试比较两个字符串并仅打印具有相同索引和相同值的字符。或者通过将两个字符添加到彼此之上来添加表示为字符串的大数字。如何在需要同时迭代两个字符串的情况下解决这类问题?

1 个答案:

答案 0 :(得分:2)

注意你在asm中所做的是指针迭代,而不是索引。不确定为什么在C代码中需要2个变量IJ。你可以使用1。

    xor si, si
loop:
    mov al, [string1+si]
    mov dl, [string2+si]
    ; do something 
    inc si
    cmp si, [N1]
    jae done
    cmp si, [N2]
    jb loop

PS:在16位x86 asm中,您还可以使用bxdibp进行索引。 当然,您也可以预先计算min(N1, N2)