나는 C로 프로그램을 작성하고 팔 어셈블리로 변환했다. 이제 어셈블리 코드에서 생성 된 일부 명령어를 이해하는 데 문제가있다. C 프로그램의 일부이다 : I는 GNU 팔 툴 체인을 사용하여 어셈블리 코드 아암이 C 코드로 변환 한C to arm assembly code conversion
#define MAX_DIGIT 1024
int main()
{
int fd[MAX_DIGIT];
int xLen = 0;
int sd[MAX_DIGIT];
int yLen = 0;
int result[6*MAX_DIGIT];
// Take input for two numbers
takeInput(fd, &xLen);
takeInput(sd, &yLen);
...
...
...
}
...
...
...
void takeInput(int digit[], int *length)
{
char c;
if((c=getchar()) != '\n' && *length <= MAX_DIGIT){
takeInput(digit, length);
digit[*length] = c - '0';
(*length)++;
}else return;
}
. 생성 된 어셈블리 코드의 일부는 다음과 같습니다.
main:
@ args = 0, pretend = 0, frame = 32788
@ frame_needed = 1, uses_anonymous_args = 0
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, #4
sub sp, sp, #32768
sub sp, sp, #20 @Why subtracted 20?
mvn r3, #4096
sub r3, r3, #3
@What r3 storing and Why took NOT of r3 and again subtract 3 from it?
mov r2, #0
sub r0, fp, #12
str r2, [r0, r3]
mvn r3, #8192
sub r3, r3, #7
mov r2, #0
sub r1, fp, #12
str r2, [r1, r3]
sub r2, fp, #4096
sub r2, r2, #12
sub r3, fp, #4096
sub r3, r3, #12
sub r3, r3, #4
mov r0, r2
mov r1, r3
bl takeInput
sub r2, fp, #8192
sub r2, r2, #12
sub r2, r2, #4
sub r3, fp, #8192
sub r3, r3, #12
sub r3, r3, #8
mov r0, r2
mov r1, r3
bl takeInput
mvn r3, #32768
sub r3, r3, #11
mov r2, #1
sub ip, fp, #12
str r2, [ip, r3]
주석에 어셈블리 코드 자체를 표시했습니다. 감사.
여기에도 좋은 설명이 있습니다. http://www.davespace.co.uk/arm/introduction-to-arm/immediates.html –