我在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
是我可以使用的唯一一种索引器,这对于两个字符串来说还不够。
我正在尝试比较两个字符串并仅打印具有相同索引和相同值的字符。或者通过将两个字符添加到彼此之上来添加表示为字符串的大数字。如何在需要同时迭代两个字符串的情况下解决这类问题?
答案 0 :(得分:2)
注意你在asm中所做的是指针迭代,而不是索引。不确定为什么在C代码中需要2个变量I
和J
。你可以使用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中,您还可以使用bx
,di
和bp
进行索引。
当然,您也可以预先计算min(N1, N2)
。