assembly - 为什么我的 arm32 汇编程序中有段错误?
问题描述
我尝试在 arm 程序集中编写一个程序,该程序会写入全部char** argv
内容。在 C 中它会是这样的:
#include <stdio.h>
int main(int argc, char** argv) {
for (unsigned int i = 0; argv[i] != 0; i++)
puts(argv[i]);
return 0;
}
我在汇编中这样写:
.global main
.data
.bss
.text
.align 4
@r0 = argc
@r1 = argv
main:
@prologue
stmfd sp!, {fp, lr}
add fp, sp, #4
sub sp, sp, #8
@i = 0
mov r0, #0
str r0, [fp, #-8]
b loop_begin
loop_content:
bl puts
ldr r0, [fp, #-8]
add r0, r0, #1
str r0, [fp, #-8]
loop_begin:
@r0 = i
ldr r0, [fp, #-8]
@i = i * 4
lsl r0, r0, #2
@r0 = argv + i
add r0, r1, r0
@r3 = argv[i]
ldr r0, [r0]
@argv[i] == 0?
cmp r0, #0
@if arvg[i] != 0 go to ...
bne loop_content
mov r0, #0
sub sp, fp, #4
ldmfd sp!, {fp, lr}
bx lr
但它给了我段错误
str r0, [fp, #-8]
我不知道为什么,你有什么想法为什么会发生?
解决方案
推荐阅读
- jenkins - 通过 jenkins groovy 获取所有作业的回购 URL
- swift - RxSwift withLatestFrom 奇怪的行为
- android - 在每个屏幕尺寸上将 Textview 放在 ImageView Compatible 上
- stanford-nlp - 训练非英语斯坦福 NER 模型
- c++ - 高频信号<->插槽连接的 Qt EventLoop 延迟
- android - 警报对话框按钮太近
- javascript - Google Apps 脚本 - 基于 for 循环匹配的复制范围
- bash - 如何在终端中显示区域状态指示器(国家标志)
- rabbitmq - Spring AMQP-我如何从 DLX 队列重试/重新排队消息到原始队列?
- wpf - WPF 画布 OnRender 行为