加減算のできるコンパイラ
RAXに対して、mov, add, sub命令で値をいじっていく code:s
.intel_syntax noprefix
.global main
main:
mov rax, 5
add rax, 20
sub rax, 4
ret
これで5+20-4をやることになる
strtol(p, &p, 10)
pはcharのポインタだが、これで返り値は10進数のintを得て、pのポインタもすすめる
code:c
int main(int argc, char **argv) {
if (argc != 2) {
fprintf(stderr, "引数の個数が正しくありません\n");
return 1;
}
printf(".intel_syntax noprefix\n");
printf(".global main\n");
printf("main:\n");
printf(" mov rax, %ld\n", strtol(p, &p, 10));
while(*p) {
if(*p == '+') {
p++;
printf(" add rax, %ld\n", strtol(p, &p, 10));
continue;
}
if(*p == '-') {
p++;
printf(" sub rax, %ld\n", strtol(p, &p, 10));
continue;
}
fprintf(stderr, "予期しない文字です: '%c'\n", *p);
return 1;
}
printf(" ret\n");
return 0;
}
while(*p)とすることで、ヌル終端に当たるまですすめる
ただしすすめるのは自分でやる
if(*p=='+')で探しつつ、p++でポインタを進める