【问题标题】:How can I loop over the characters of two strings simultaneously?如何同时遍历两个字符串的字符?
【发布时间】:2015-03-09 10:52:39
【问题描述】:

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

我正在尝试做一些事情,比如比较两个字符串并只打印具有相同索引和相同值的字符。或者通过将两个字符叠加在一起来添加表示为字符串的大数字。如何解决这些需要同时遍历两个字符串的问题?

【问题讨论】:

    标签: assembly x86


    【解决方案1】:

    请注意,您在 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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-14
      • 2013-01-18
      • 2021-01-11
      • 2014-08-05
      • 2014-04-02
      • 2021-06-30
      相关资源
      最近更新 更多