그래서 내 코드는 현재 문자열을 정수로 변환합니다. 내 코드는 현재 작동하고 기능적이지만 입력이 시작될 때 음수인지 아닌지 판단하기 위해 "-"를 받아야합니다. 어떻게 해야할지 모르겠지만 소스를 찾을 수 없습니다. 나는 현재 (test3 : .asciz "-48") 레지스터 r0에 전달 중이다. 디버거에서 실행할 때 나는 45를 받고있다. 여기에 참조 용 코드가있다.ARM 어셈블리에서 '-'허용
.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}
힌트 : 작업에 익숙한 고급 언어로 알고리즘을 구현 한 다음 레벨을 대략적으로 일치시키기 위해 참조 구현을 점차적으로 낮 춥니 다. 어셈블리 코드의 기능을 설명합니다. – doynax
조언을 주셔서 감사합니다,하지만 난 코딩 세계에 새로운 오전 그리고 iv는 지금까지 배운 언어는 파이썬입니다. 그것은 단순한 "int (문자열)"입니다. –
요점은 어셈블리 언어의 세부 사항은 알고리즘을 이해하지 못하는 것입니다. 플로우 차트 나 다른 방법을 통해 지원 기능을 사용하지 않고 Python으로 손으로 수행하는 방법의 원리를 스케치합니다. 그런 다음 어셈블리 코드를 작성하고 구현하십시오. – doynax