🗂

hardware 2

2023/06/29に公開

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