From afc9e8f05faddf051aa3a578520d6484ab451282 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Sat, 3 Aug 2019 12:20:08 +0900 Subject: [PATCH] Add + and - operators --- main.c | 22 +++++++++++++++++++++- test.sh | 1 + 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index cae6b4f..7a28076 100644 --- a/main.c +++ b/main.c @@ -7,10 +7,30 @@ int main(int argc, char **argv) { return 1; } + char *p = argv[1]; + printf(".intel_syntax noprefix\n"); printf(".global main\n"); printf("main:\n"); - printf(" mov rax, %d\n", atoi(argv[1])); + 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, "unexpected character: '%c'\n", *p); + return 1; + } + printf(" ret\n"); return 0; } diff --git a/test.sh b/test.sh index eb1e680..ca477d9 100755 --- a/test.sh +++ b/test.sh @@ -18,5 +18,6 @@ assert() { assert 0 0 assert 42 42 +assert 21 '5+20-4' echo OK -- GitLab