Mercurial > hg > Members > anatofuz > 9cc
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; }