- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 ARM 汇编将一个字符串插入另一个字符串,但是我的代码始终会向调用汇编程序的 C 程序返回一个空字符串。我相信我已经将问题范围缩小到了 STRB 指令。下面是我的代码,删除了大部分不相关的代码。要查看的重要部分是“测试” block 。
.global ins
ins:
stmfd sp!, {v1-v6, lr}
mov v1, a1 @ save pointer to 1st string
mov v2, a2 @ save pointer to 2nd string
bl strlen @ find out length
mov v3, a1 @ save string1 length
mov a1, v2 @ recover pointer to string 2
bl strlen @ length of string 2
add a1, a1, v3 @ total length
add a1, a1, #1 @ add one for null byte
bl malloc
add a3, a3, #1
test:
ldrb v3, [v1], #1
strb v3, [a1], #1
ldmfd sp!, {v1-v6, pc}
exit:
.end
v1 和 v2 保存字符串 1 和 2。当我将测试 block 写为:
test:
ldrb v3, [v1], #1
strb v3, [a1], #1
ldmfd sp!, {v1-v6, pc}
然后程序返回一个空字符串。但是,如果我把它写成:
test:
ldrb v3, [v1], #1
strb v3, [a1]
ldmfd sp!, {v1-v6, pc}
它成功返回字符串 1 中的第一个字符。显然,这不足以构建新字符串,因为我没有对 a1 执行偏移。
有谁知道是什么导致字符串返回为空?老实说,经过几个小时的实验和研究后,我真的不知道问题是什么。
非常感谢任何帮助!
最佳答案
a1
中的值将返回到调用汇编程序例程的 C 函数。您需要返回字符串开头的地址,但如果在写入字符串时递增 a1
,您将返回字符串结尾的地址。
如果您使用另一个寄存器来存储您正在写入的当前地址,那么当您返回时起始地址仍将位于 a1
中。例如:
test:
mov v4, a1 @ copy address of new string to v4
ldrb v3, [v1], #1
strb v3, [v4], #1 @ increment v4, the start of string
@ will still be in a1
ldmfd sp!, {v1-v6, pc}
关于c - STRB 有效,除非目标地址发生移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29271250/
根据标题,您使用什么字符串比较实践,为什么? 最佳答案 您没有指定平台,但我猜是 .NET。我强烈建议您使用后一种形式——因为案例比较并不像您预期的那么简单。 (它也避免了创建额外的字符串,但这是
我正在尝试使用 ARM 汇编将一个字符串插入另一个字符串,但是我的代码始终会向调用汇编程序的 C 程序返回一个空字符串。我相信我已经将问题范围缩小到了 STRB 指令。下面是我的代码,删除了大部分不相
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
当 x23 达到特定值(即 635)时,当我不使用 bl write 函数时,在 ARMv8 汇编代码中的 strb w1, [x22,x23] 指令上遇到一个有趣的段错误。 但是,如果我用bl指令调
如何在 Visual Studio 搜索框中检索文档包含“strA”但不包含“strB”的所有行? 最佳答案 对于 Visual Studio 2012(及更新版本): ^(?!.*strB).*st
我是一名优秀的程序员,十分优秀!