分裂线组件AT& T.

时间:2016-06-20 13:02:34

标签: assembly

如何在程序集AT& T中用,分隔符分割字符串?

这是我的字符串:6,3,2431,7,9,1221

我想在,之间的所有数字中添加1。

结果应为:7, 4, 2432, 8, 10, 1222

我正在使用ubuntu14 - 64位,intel cpu和GAS编译器

1 个答案:

答案 0 :(得分:1)

伪代码:

; si = input string
 di = output string
 if 0 == [si] jmp NoNumberFound
NextNumberLoop:
 rax = 0
ReadLoop:
 bl = [si] & inc si
 if 0 == bl jmp LastNumberFound
 if ',' == bl jmp CommaFound
 rax = rax*10 + (bl-'0') ; extend bl to 64b of course
 jmp ReadLoop

CommaFound:
 call StoreNumberPlusOne
 [di]=',' & inc di
 jmp NextNumberLoop

LastNumberFound:
 call StoreNumberPlusOne
NoNumberFound:
 [di]='0'
 output resulting string and exit.

StoreNumberPlusOne:
 inc rax (number+1)
 print decimal formatted rax to [di] + make di point after it
 ret

(64b平台上的di / si指针当然是rsi / rdi等等......它只是伪代码显示算法,不是字面意思)

其他选项是在字符串本身中进行而不解析数字。

为结果字符串分配足够大的缓冲区(如果将输入设置为n9,输出缓冲区将几乎是输入缓冲区的两倍,包含n次{{ 1}})。

将输入字符串复制到outputBuffer,并在其最后一个字符处指针10

ptr