String 臂组件验收'-';

String 臂组件验收'-';,string,assembly,integer,arm,ascii,String,Assembly,Integer,Arm,Ascii,因此,我的代码当前将字符串转换为整数。我的代码目前正在运行,但是,我需要它在输入的开头接受“-”,以判断它是否为负数。我不知道如何做到这一点,我找不到任何来源。我目前正在将(test3:.asciz“-48”)传入寄存器r0。当我在调试器中运行时,我收到45。这是我的代码供参考 .global stoi .text stoi: push {r4,r5,r6,r8,r9,lr} @r0 = buffer mov r1,#0 @r1 = n =

因此,我的代码当前将字符串转换为整数。我的代码目前正在运行,但是,我需要它在输入的开头接受“-”,以判断它是否为负数。我不知道如何做到这一点,我找不到任何来源。我目前正在将(test3:.asciz“-48”)传入寄存器r0。当我在调试器中运行时,我收到45。这是我的代码供参考

    .global stoi
    .text
stoi:
    push {r4,r5,r6,r8,r9,lr}
    @r0 = buffer
    mov r1,#0         @r1 = n = 0
    mov r9,#0         @buffer counter
    mov r4,#48        @0 checker
    mov r5,#57        @9 checker
    b 5f

5:
    ldrb r3,[r0,r9]      @r3 = c

    b 1f

1:
    cmp r3,r4         @cmp c to 0(48 in ASCII)
    bge 2f
    b 4f
2:
    cmp r3,r5       @cmp c to 9(57 in ASCII)
    ble 3f
    b 4f
3:
    sub r6,r3,#'0'      @r6 = (c - '0')
    @strb r6,[r0,r9]
    add r1,r1,r1,lsl#2  @r1 = n * 10
    add r1,r1,r1,lsl#0

    add r1,r1,r6        @n = n * 10 + (c - '0')

    add r9,r9,#1        @add to buffer
    b 5b

4:
    mov r0,r1
    pop {r4,r5,r6,r8,r9,pc}

使用与您现在使用的代码相同的代码,并添加以下更改:

1) 如果是第一个字符,请跳过“-”。 现在您正在停止,如果读取了非数字字符,您将收到45(在R3中),它是'-'的ascii。Afais R1仍应为0 tho

2) 最后,添加检查第一个字符是否为“-”,如果是,则从0中减去r1(因为0-x是-x)


(3)拆下b 1f,不需要;))

使用与您现在使用的代码相同的代码,并添加以下更改:

1) 如果是第一个字符,请跳过“-”。 现在您正在停止,如果读取了非数字字符,您将收到45(在R3中),它是'-'的ascii。Afais R1仍应为0 tho

2) 最后,添加检查第一个字符是否为“-”,如果是,则从0中减去r1(因为0-x是-x)


(3)拆下b 1f,不需要;))

提示:首先用一种高级语言实现算法,在这种语言中您可以轻松地工作,然后逐渐降低参考实现以大致匹配汇编代码的级别和功能。感谢您的建议,但我对编码世界还不熟悉,到目前为止,我所学的唯一语言是python。这是一个简单的“int(string)”。我的观点是汇编语言的细节会分散对算法的理解。首先,通过流程图或其他方法,勾勒出在不使用支持函数的情况下如何在Python中手工完成这项工作的原理。然后坐下来实现汇编代码。即使在python中,您也可以访问该字符串的单独字符,并根据这些字符自己计算
int
的值。因此,这可能有助于您了解asm算法的逻辑结构,并且如果您对python及其调试器有丰富的经验,那么您可以更轻松地首先验证您的算法是否在高级别上工作。是的,根据@Tommylee2k,45=0x2D=-在ASCIIHint中:首先用一种高级语言实现算法,您可以轻松地使用这种语言,然后逐渐降低参考实现以大致匹配汇编代码的级别和功能。感谢您的建议,但我对编码世界还不熟悉,到目前为止,我唯一学会的语言是python。这是一个简单的“int(string)”。我的观点是汇编语言的细节会分散对算法的理解。首先,通过流程图或其他方法,勾勒出在不使用支持函数的情况下如何在Python中手工完成这项工作的原理。然后坐下来实现汇编代码。即使在python中,您也可以访问该字符串的单独字符,并根据这些字符自己计算
int
的值。因此,这可能有助于您了解asm算法的逻辑结构,并且如果您对python及其调试器有丰富的经验,那么您可以更轻松地首先验证您的算法是否在高级别上工作ASCII@Blake:更一般地说,通过将分支条件反转为单个分支或直通式指令来清理其他分支,而不是跳过无条件分支。并为分支标签使用有意义的名称,而不仅仅是数字。@Blake:更一般地说,通过将分支条件反转为单个分支或直通指令来清除其他分支,而不是跳过无条件的分支。并为分支标签使用有意义的名称,而不仅仅是数字。