Assembly 臂组件反向抛光评估器
我有一个反向波兰语计算器来编写ARM汇编代码。 到目前为止,我已经写了添加,但我被卡住了。 我必须从命令行获取参数,例如 RPeval 12+= 必须在r1中返回3 我知道错误来自第40行,在那里我验证参数是一个数字。 当我比较地址的内容时,它的值太大,我不明白为什么 Atoi是从另一个程序调用的过程,在r0中返回地址为r0的ascii字符串的整数。你知道怎么做吗 我尝试使用ldrb而不是ldr,但它仍然不起作用,我得到了'1'的值242 这是我的密码:Assembly 臂组件反向抛光评估器,assembly,arm,reverse,postfix-notation,Assembly,Arm,Reverse,Postfix Notation,我有一个反向波兰语计算器来编写ARM汇编代码。 到目前为止,我已经写了添加,但我被卡住了。 我必须从命令行获取参数,例如 RPeval 12+= 必须在r1中返回3 我知道错误来自第40行,在那里我验证参数是一个数字。 当我比较地址的内容时,它的值太大,我不明白为什么 Atoi是从另一个程序调用的过程,在r0中返回地址为r0的ascii字符串的整数。你知道怎么做吗 我尝试使用ldrb而不是ldr,但它仍然不起作用,我得到了'1'的值242 这是我的密码: .text .globa
.text
.global _start
.equ EXIT, 1
.equ WRITE, 4
.equ STDOUT, 1
.equ STDERR, 2
_start:
ldr r0, [sp] @argc value
add r1, sp, #8
bl main
mov r0, #0
mov r7, #EXIT
svc 0
main:
push {lr}
mov r0, r1
bl rpEval
pop {pc}
####################################################################
# rpEval - evaluate a Reverse Polish expression
# parameters:
# r0 - address of a null-terminated array of string addresses
# returns:
# r0 - zero means success, nonzero means failure:
# failure values:
# 1: Missing end-of-expression marker
# 2: Too few operands
# 3: Too many operands
# 4: Illegal expression item
# r1 - the value of the expression, if r0 is zero
rpEval:
push {r4, r5,lr}
mov fp, sp @save sp
mov r4, r0 @save address of start of array
0: ldr r0, [r4], #4
cmp r0, #'0
blo less
cmp r0, #'9
bhi grt
bl atoi
push {r0}
b 0b
less: cmp r0, #'+
beq add
b invalid
invalid:
mov r0, #4
mov sp, fp
pop {r4, r5, pc}
add: pop {r2, r3}
mov r1, #0
add r1, r2, r3
push {r1}
b 0b
grt: cmp r:0, #'=
bne invalid
pop {r1}
pop {r2}
cmp r2, fp
beq tmo
mov sp, fp
pop {r4, r5, pc}
tmo:
mov r0, #2
mov sp, fp
pop {r4, r5, pc}
0:ldr r0,[r4],#4这一行就是问题所在intmain(intargc,char**argv)
。不char*argv
;)