2015-01-11 42 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)

相關問題