assembly - 如何从 ARM 中的命令行计算字符串长度?
问题描述
我正在尝试获取通过 ARM 中的命令行传入的字符串的长度 - 以下代码有效,但随后返回core dumped
错误:
.data
.balign 4
string_length: .asciz "String length is %d \n"
.text
.balign 4
.global main
main:
PUSH {r4-r8,lr}
MOV r4, r0
MOV r5, r1
MOV r6, #0
LDR r7, [r5, #4]
countSL:
LDRB r0, [r7], #1
CMP r0, #0
ADDNE r6, r6, #1
BNE countSL
LDR r0, address_of_string_length
MOV r1, r6
BL printf
address_of_string_length: .word string_length
我究竟做错了什么?
解决方案
您在末尾缺少返回指令main
,因此在函数结束时,CPU 只是继续执行内存中接下来的任何内容。没有办法预测这会产生什么影响,但它永远不会好!
您也不会弹出您推送的寄存器,您可以在返回的同时执行此操作,方法是将推送的值lr
直接弹出到pc
:
POP {r4-r8,pc}
推荐阅读
- tensorflow - TensorFlow-gpu 似乎没有看到我的 gpu
- flutter - 如何在水平滚动视图中显示所有日期
- python - 如何在 lambda 表达式中保持某些参数不变
- android - 唤醒 Android 通话
- reactjs - 尝试使用此 axios/typescript 实现初始化和设置组件状态的问题
- react-native - 如何在 navigation.onback() 上销毁屏幕
- reactjs - 如何部署一个简单的 json-server?
- spring-kafka - KafkaListener BeginTransaction 中的 InvalidPidMappingException
- angular6 - 如何在 Angular 8 中进行购物车付款选项
- python - 为什么 myprog.py 中的打印结果没有打印在 alice1.py 中?