ADDL、SUBL命令の内部構造を変更
[YACASL2.git] / src / exec.c
index 25d6c38..1862973 100644 (file)
@@ -42,7 +42,8 @@ void svcout()
         }
         /* 「文字の組」の符号表に記載された文字と、改行(CR)/タブを表示
            それ以外の文字は、「.」で表す */
-        if(((c = (char)(memory[GR[1]+i])) >= 0x20 && c <= 0x7E) || c == 0xA || c == '\t') {
+        if(((c = (char)(memory[GR[1]+i])) >= 0x20 && c <= 0x7E) || c == 0xA || c == '\t')
+        {
             putchar(c);
         } else {
             putchar('.');
@@ -98,7 +99,7 @@ WORD addl(WORD val0, WORD val1)
     FR = 0x0;
 
     temp = val0 + val1;
-    if(temp > 65535) {
+    if(temp < 0 || temp > 65535) {
         FR += OF;
     }
     res = (WORD)(temp & 0xFFFF);
@@ -113,21 +114,7 @@ WORD addl(WORD val0, WORD val1)
 /* 論理減算。フラグを設定して値を返す */
 WORD subl(WORD val0, WORD val1)
 {
-    long temp;
-    WORD res;
-    FR = 0x0;
-
-    temp = val0 - val1;
-    if(temp < 0) {
-        FR += OF;
-    }
-    res = (WORD)(temp & 0xFFFF);
-    if((res & 0x8000) > 0) {
-        FR += SF;
-    } else if(res == 0) {
-        FR += ZF;
-    }
-    return res;
+    return addl(val0, (~val1 + 1));
 }
 
 /* 算術比較のフラグ設定。OFは常に0 */