changeset 1:59c56be5222e

implement addition and subtraction routine
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Wed, 24 Jul 2019 14:16:31 +0900
parents 7d266b61ec2a
children 75f25ab4022c
files 9cc.c test.sh
diffstat 2 files changed, 22 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/9cc.c	Wed Jul 24 13:58:02 2019 +0900
+++ b/9cc.c	Wed Jul 24 14:16:31 2019 +0900
@@ -7,10 +7,30 @@
     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, "予期しない文字です: '%c'\n", *p);
+    return 1;
+  }
+
   printf("  ret\n");
   return 0;
 }
--- a/test.sh	Wed Jul 24 13:58:02 2019 +0900
+++ b/test.sh	Wed Jul 24 14:16:31 2019 +0900
@@ -18,5 +18,6 @@
 
 try 0 0
 try 42 42
+try 21 "5+20-4"
 
 echo OK