【问题标题】:Loop through character of a string in Assembly在Assembly中循环字符串的字符
【发布时间】:2015-02-11 04:21:21
【问题描述】:

如果我有一个字符串列表,如何循环遍历每个字符串的每个字符?说个清单data

data     db "00000123", NULL, "00000213"

如何访问每个成员?我知道每个字符串的长度是 9 的恒定长度,并且我理解对于普通类型它将是 byte[data+rsi] 其中 rsi 是我的计数器,但是当字符串在播放时它会做什么?

; loop
  ; get character from string
  ; check if character is end
  ; if yes then jump end
  ; do stuff with char
; end

【问题讨论】:

  • 你为什么认为字符串是“特殊的”?
  • @IgnacioVazquez-Abrams 我对如何访问它们感到困惑。 byte[data] 会是 0byte[data+7] 会是 3 吗?列表中的所有字符都是连续的吗?
  • 两个方面都正确。
  • @IgnacioVazquez-Abrams 谢谢,不过还有一个问题。如果我访问byte[data],我会得到0 还是"0"?在汇编中一个字节是一个字节正确吗?我应该能够简单地移动变量中字符串的每个字符并能够将其视为可以执行操作的数字?如果您想总结我的第一个建议并在一个实际的答案问题中回答这个问题,我很乐意接受这篇文章。
  • 你会得到 '0' (0x30),因为这是你写的。

标签: assembly x86-64 yasm


【解决方案1】:

在汇编语言文件中连续写入的数据在内存中是连续的,因此data 将指向“0”(0x30),data+7 将指向“3”(0x33),每个中间的位置会依次指向它们对应的字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多