🗂
hardware 2
2023/06/28
2引数足し算
足し算をアセンブラでかく
foo.s
.text
.align 2
.global foo
.type foo, %function
foo:
add r0, r0, r1
bx lr
foo-main.c
#include <stdio.h>
extern int foo();
int main(){
int y;
y = foo(2,3);
printf("y %d\n", y);
}
terminal
$ gcc foo.s foo-main.c
$ ./a.out
y 5
入力つき
入力された値に13を足して出力するプログラム
input.s
.text
.align 2
.global input
.type input, %function
input:
add r0, r0, #13
bx lr
input-main.c
#include <stdio.h>
#include <stdlib.h>
extern int input(int);
int main(){
char buf[BUFSIZ];
int x;
int y;
fgets(buf, sizeof(buf), stdin);
x=atoi(buf);
printf("x %d\n", x);
y=input(x);
printf("y %d\n", y);
}
terminal
$ gcc input.s input-main.c
$ ./a.out
255
x 255
y 268
2引数の足し算(入力つき)
さっきの2引数の足し算のmainだけ変更
foo-main.c
#include <stdio.h>
#include <stdlib.h>
extern int foo();
int main(){
char buf[BUFSIZ];
int x1, x2, y;
fgets(buf, sizeof(buf), stdin);
x1 = atoi(buf);
printf("x1 %d\n", x1);
fgets(buf, sizeof(buf), stdin);
x2 = atoi(buf);
printf("x2 %d\n", x2);
y = foo(x1,x2);
printf("y %d\n", y);
}
terminal
$ gcc foo.s foo-main.c
$ ./a.out
100
x1 100
200
x2 200
y 300
Discussion