如何同时遍历两个字符串的字符?
How can I loop over the characters of two strings simultaneously?
我在 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
是我可以使用的唯一一种索引器,这对于两个字符串来说还不够。
我正在尝试做一些事情,比如比较两个字符串并只打印具有相同索引和相同值的字符。或者通过将两个字符相加来添加表示为字符串的大数字。我该如何解决这些需要同时遍历两个字符串的问题?
请注意,您在 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)
。
我在 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
是我可以使用的唯一一种索引器,这对于两个字符串来说还不够。
我正在尝试做一些事情,比如比较两个字符串并只打印具有相同索引和相同值的字符。或者通过将两个字符相加来添加表示为字符串的大数字。我该如何解决这些需要同时遍历两个字符串的问题?
请注意,您在 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)
。