assembly - 在 ARM GAS 汇编程序中遍历数组时出现分段错误
问题描述
遍历我的数组时出现段错误。我知道问题出在数组索引/指针上,而且我做得不对,但我似乎在我正在使用的教程中找不到一个像样的例子。它正确打印了第一个值 (100),但在 print_loop 的第二次迭代中出现了段错误。增加指针并移动到列表中的下一个值的正确方法是什么?
任何建议将不胜感激!
编辑:段错误问题是因为我没有将格式重新加载到 R0 中。(感谢@Jester)。但是我仍然有一个问题,我实际上不知道如何将指针 R5 移动到下一个内存区域。一位评论者说我没有更改 r5,所以我没有遍历数组,但我实际上也不知道如何/应该更改它。“#-4”的存在只是因为它是他们在我正在使用的教程中使用的。由于“.balign 4”,我假设它是将索引与数组中的下一个值对齐。
.data
list: .space 400
.balign 4
return: .word 0
format: .asciz " %d \n"
.text
.global main
main:
ldr r1, =return
str lr, [r1]
mov r6, #0 @@ load zero into r6
mov r7, #100 @@ load 100 into r7
increment:
add r6, #1
mov r1, r6
ldr r3, =list
str r1, [r3, #-4]*/
cmp r6, r7
blt increment
ldr r5,=list
mov r6, #0
print_loop:
ldr r0, =format
ldr r3, [r5, #-4]
mov r1, r3
bl printf
add r6, #1
cmp r6, r7
blt print_loop
exit:
ldr lr, =return
ldr lr, [lr]
bx lr
.global printf
.end
解决方案
推荐阅读
- javascript - Chrome 远程调试器获取 JS 输入值
- python - Discord.py:无法从 DM 中获取提及的用户信息
- c# - 如何在 C# 中强制执行编码样式约定?
- python - Q-learning 模型没有改进
- opengl - 复杂性 OpenGL 和 Vulkan
- c++ - VkDescriptorBufferInfo 'range' 字段是否需要是 VkPhysicalDeviceProperties 'limits.minUniformBufferOffsetAlignment' 字段的倍数?
- android - React Native 意外字符:settings.graddle 中的“\”
- c# - JSON 到 GridView 解析 | System.NullReferenceException
- python - 如何根据日期时间值创建列?
- php - 在 PHP 中加入基于公共 id 的多个集合