2015-01-11 41 views
1

我在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是我可以使用的唯一一种索引器,对于两个字符串来说这还不够。

我试图做比较两个字符串的事情,只打印具有相同索引和相同值的字符。或者通过将两个字符彼此相加来添加表示为字符串的大数字。如何在需要同时迭代两个字符串的情况下解决这些问题?

回答

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汇编,你也可以使用bx,用于索引dibp。 您当然也可以预先计算min(N1, N2)

相关问题