我在一门课程中正在学习手臂汇编语言。我入门没有什么问题。我写了一个简单的C代码:
int main()
{
int a = 10;
int b = 20;
int c = a+b;
}
Run Code Online (Sandbox Code Playgroud)
然后通过使用以下命令,使用gnu arm将其转换为汇编代码:
arm-elf-gcc -S first.c
Run Code Online (Sandbox Code Playgroud)
这首先生成一个包含汇编代码的文件:
.file "first.c"
.text
.align 2
.global main
.type main, %function
main:
@ args = 0, pretend = 0, frame = 12
@ frame_needed = 1, uses_anonymous_args = 0
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, #4
sub sp, sp, #12
mov r3, #10
str r3, [fp, #-16]
mov r3, #20
str r3, …Run Code Online (Sandbox Code Playgroud) 我在c中编写了一个程序并将其转换为arm程序集,现在我在理解汇编代码中生成的某些指令时遇到了问题.C程序的一部分是:
#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;
}
Run Code Online (Sandbox Code Playgroud)
我已经使用gnu arm工具链将此c代码转换为arm汇编代码.生成的汇编代码的一部分是:
main:
@ args = 0, pretend = 0, frame = 32788
@ frame_needed = …Run Code Online (Sandbox Code Playgroud)