Assembly 臂组件反向抛光评估器

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

我有一个反向波兰语计算器来编写ARM汇编代码。 到目前为止,我已经写了添加,但我被卡住了。 我必须从命令行获取参数,例如 RPeval 12+= 必须在r1中返回3

我知道错误来自第40行,在那里我验证参数是一个数字。 当我比较地址的内容时,它的值太大,我不明白为什么

Atoi是从另一个程序调用的过程,在r0中返回地址为r0的ascii字符串的整数。你知道怎么做吗

我尝试使用ldrb而不是ldr,但它仍然不起作用,我得到了'1'的值242

这是我的密码:

    .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
;)