Skip to content

Commit

Permalink
Add + and - operators
Browse files Browse the repository at this point in the history
  • Loading branch information
rui314 committed Sep 13, 2020
1 parent 0522e2d commit bf7081f
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 1 deletion.
22 changes: 21 additions & 1 deletion main.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,29 @@ int main(int argc, char **argv) {
return 1;
}

char *p = argv[1];

printf(" .globl main\n");
printf("main:\n");
printf(" mov $%d, %%rax\n", atoi(argv[1]));
printf(" mov $%ld, %%rax\n", strtol(p, &p, 10));

while (*p) {
if (*p == '+') {
p++;
printf(" add $%ld, %%rax\n", strtol(p, &p, 10));
continue;
}

if (*p == '-') {
p++;
printf(" sub $%ld, %%rax\n", strtol(p, &p, 10));
continue;
}

fprintf(stderr, "unexpected character: '%c'\n", *p);
return 1;
}

printf(" ret\n");
return 0;
}
1 change: 1 addition & 0 deletions test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,6 @@ assert() {

assert 0 0
assert 42 42
assert 21 '5+20-4'

echo OK

0 comments on commit bf7081f

Please sign in to comment.