我有一个程序在armv6汇编这计算这结果(x +y)^2
这段代码不起作用,并返回:“不支持的ARM系统调用:0xffffdf”
.global _start
.text
_start:
MOV r0, #4
MOV r1, #5
MOV r7, #1
BL calc
SWI #0
calc:
ADD r7, r0, r1
MUL R0, R7, R7
MOV PC, LR
但这一个是稍微编辑和工程(或它没有?):
.global _start
.text
_start:
MOV r0, #4
MOV r1, #5
MOV r7, #1
BL calc
BL exit
calc:
ADD r7, r0, r1
MUL R0, R7, R7
MOV PC, LR
exit:
LDR r7, =1
SWI 0
有没有人能告诉我为什么第一个代码不起作用?第二个甚至有效吗?
1条答案
按热度按时间pprl5pva1#
第一组
r0
和r1
:此处设置
r7
无效:呼叫
calc
:r7
现在是4 + 5 = 9。调用系统调用编号9,即
link
:link
需要2个参数,这些参数是指向字符串的指针,由于81和5都不是有效指针,因此返回错误-EFAULT
= -14 inr0
。现在的计算公式为-14 +5 = -9 =。
调用不存在的系统调用号
0xfffffff7
:r0
中返回错误-ENOSYS
= -38。现在的值为-38 +5 = -33 =。
调用不存在的系统调用号
0xffffffdf
:这种情况会无限重复。
正确的程序在
SWI 0
之前将r7
设置为1,因此执行exit
系统调用。