{"id":21197172,"url":"https://github.com/archanaberry/simplify-calculatorasmc","last_synced_at":"2026-05-08T17:35:35.196Z","repository":{"id":261898183,"uuid":"885666716","full_name":"archanaberry/simplify-calculatorASMC","owner":"archanaberry","description":"Kalkulator sangat sederhana untuk prosesor x86_64 atau arm32_64 yang sangat amat cepat dan efisien ♡⁠(⁠Ӧ⁠ｖ⁠Ӧ⁠｡⁠)","archived":false,"fork":false,"pushed_at":"2024-11-09T06:11:25.000Z","size":1170,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-21T14:27:01.050Z","etag":null,"topics":["architecture","assembly","assembly-8086","assembly-arm","assembly-arm64","assembly-x86","assembly-x86-64","c","calculator","calculator-assembly","calculator-c","cli","dos","inline-assembly","linux","simple-calculator","unix"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/archanaberry.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-09T04:23:52.000Z","updated_at":"2024-11-09T10:51:01.000Z","dependencies_parsed_at":"2024-11-09T05:35:31.396Z","dependency_job_id":null,"html_url":"https://github.com/archanaberry/simplify-calculatorASMC","commit_stats":null,"previous_names":["archanaberry/simplify-calculatorasmc"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/archanaberry%2Fsimplify-calculatorASMC","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/archanaberry%2Fsimplify-calculatorASMC/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/archanaberry%2Fsimplify-calculatorASMC/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/archanaberry%2Fsimplify-calculatorASMC/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/archanaberry","download_url":"https://codeload.github.com/archanaberry/simplify-calculatorASMC/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243652708,"owners_count":20325610,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["architecture","assembly","assembly-8086","assembly-arm","assembly-arm64","assembly-x86","assembly-x86-64","c","calculator","calculator-assembly","calculator-c","cli","dos","inline-assembly","linux","simple-calculator","unix"],"created_at":"2024-11-20T19:42:48.073Z","updated_at":"2026-05-08T17:35:30.168Z","avatar_url":"https://github.com/archanaberry.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kalkulator Sederhana Assembly + C - x86_64 \u0026 ARM32/ARM64\n![banner](archanaberry/calculator.png)\n\nKalkulator ini dibuat menggunakan bahasa C dan instruksi assembly untuk operasi aritmatika dasar. Program mendukung arsitektur **x86_64** dan **ARM32/ARM64** dengan menggunakan assembly untuk operasi yang lebih cepat dan ringan.\n\n## Deskripsi\n\nProgram kalkulator ini mendukung empat operator dasar:\n- **+** : Penjumlahan\n- **-** : Pengurangan\n- **x** : Perkalian\n- **/** : Pembagian\n\nProgram menggunakan instruksi assembly untuk meningkatkan kinerja kalkulasi.\n\n## Cara Menggunakan\n\n## Cara Kompilasi\n\n### Untuk x86_64\n1. Kompilasi dengan GCC:\n2. contoh kompilasi agar efisien dan lebih cepat pakai opsi flag -O3 (optimalisasi level 3)\n3. ```\n   gcc \u003cfile program kalkulator.c nya\u003e -o \u003cpenamaan program contoh \"kalkulator\"\u003e \u003copsi optimalisasi\u003e\n   ```\n   seperti ini kalau untuk prosesor x86_64 (32bit dan 64bit) misal Intel dan AMD\n   ```\n   gcc calculator-x8664.c -o calculator -O3\n   ```\n   atau kalau untuk prosesor ARM dari 32bit dan 64bit misal Snapdragon, Mediatek, dan Unisoc, dll\n\t ```\n   gcc calculator-arm3264.c -o calculator -03\n   ```\n   Setelah berhasil dikompilasi, Anda dapat menjalankan program dengan:\n   ```\n   ./calculator \u003cinput\u003e \u003coperator\u003e \u003cinput\u003e ...\n   ```\n4. Jika salah pemilihan versi arsitektur tidak dapat membuat aplikasi nya karena tidak cocok dengan set instruksi di prosesor anda!!!\n\n### Menjalankan Kalkulator\nUntuk menjalankan kalkulator, gunakan sintaks berikut di terminal:\n```\n./calculator \u003cinput\u003e \u003coperator\u003e \u003cinput\u003e ...\n```\n\nContoh penggunaan:\n```\n./calculator 1 + 1\n```\nHasil: `2`\n\n```\n./calculator 2 + 2 + 2\n```\nHasil: `6`\n\n```\n./calculator 10 x 2\n```\nHasil: `20`\n\n```\n./calculator 1 - 1 + 20 x 2\n```\nHasil: `40`\n\n### Bantuan\nUntuk melihat bantuan dan informasi tentang cara penggunaan, jalankan perintah berikut:\n```\n./calculator --help\n```\n\nOutput:\n```\nPenggunaan: ./calculator \u003cinput\u003e \u003coperator\u003e \u003cinput\u003e ...\nOperator yang tersedia:\n  +  : Penjumlahan\n  -  : Pengurangan\n  x  : Perkalian\n  /  : Pembagian\nContoh:\n  ./calculator 1 + 1\n  ./calculator 2 + 2 + 2\n  ./calculator 10 x 2\n  ./calculator 1 - 1 + 20 x 2\n```\n\n### Untuk ARM32/ARM64\nJika Anda ingin menggunakan arsitektur ARM32 atau ARM64, Anda dapat memodifikasi file sumber untuk menyesuaikan instruksi assembly dengan masing-masing arsitektur, dan mengikuti langkah kompilasi yang sesuai dengan sistem Anda.\n\n## Penjelasan File Assembly\n\n### `calculator-x8664.asm`\n\nFile `calculator-x8664.asm` berisi kode assembly yang digunakan untuk operasi aritmatika pada arsitektur **x86_64**. Di dalamnya, Anda akan menemukan instruksi untuk:\n- **Penjumlahan** (`addq`)\n- **Pengurangan** (`subq`)\n- **Perkalian** (`imulq`)\n- **Pembagian** (`idivq`)\n\nInstruksi ini disesuaikan untuk bekerja dengan register dan struktur data pada sistem **x86_64**, dan digunakan dalam program C untuk meningkatkan performa perhitungan.\n\n### `calculator-arm3264.asm`\n\nFile `calculator-arm3264.asm` berisi kode assembly yang digunakan untuk operasi aritmatika pada arsitektur **ARM32** dan **ARM64**. Di dalamnya, instruksi-instruksi berikut digunakan:\n- **Penjumlahan** (`ADD`)\n- **Pengurangan** (`SUB`)\n- **Perkalian** (`MUL`)\n- **Pembagian** (`SDIV`)\n\nFile ini memungkinkan kalkulator untuk bekerja dengan arsitektur ARM, dengan instruksi assembly yang disesuaikan untuk ARM32 dan ARM64.\n\n## Tangkapan Layar\n![screenshot](archanaberry/screenshot.png)\n\n## Potongan kode operasi aritmatika di i386, dan x86_64 (32bit dan 64bit)\n```\n// Fungsi untuk menghitung operasi aritmatika\nlong calculate(long num1, char op, long num2) {\n    long result;\n\n    #if defined(__x86_64__) // Untuk arsitektur x86_64 atau AMD64\n        switch(op) {\n            case '+':\n                __asm__ (\n                    \"addq %1, %0;\"        // result = num1 + num2\n                    : \"=r\" (result)\n                    : \"r\" (num2), \"0\" (num1)\n                );\n                break;\n            case '-':\n                __asm__ (\n                    \"subq %1, %0;\"        // result = num1 - num2\n                    : \"=r\" (result)\n                    : \"r\" (num2), \"0\" (num1)\n                );\n                break;\n            case 'x': // Perkalian\n                __asm__ (\n                    \"imulq %1, %0;\"       // result = num1 * num2\n                    : \"=r\" (result)\n                    : \"r\" (num2), \"0\" (num1)\n                );\n                break;\n            case '/': // Pembagian\n                if (num2 == 0) {\n                    printf(\"Error: Pembagian dengan nol tidak diperbolehkan!\\n\");\n                    exit(1);\n                }\n                __asm__ (\n                    \"cqto;\"               // Convert to quadword untuk pembagian\n                    \"idivq %2;\"           // result = num1 / num2\n                    : \"=a\" (result)\n                    : \"d\" (num1), \"r\" (num2)\n                );\n                break;\n            default:\n                printf(\"Operator tidak dikenal!\\n\");\n                exit(1);\n        }\n    #elif defined(__i386__) // Untuk arsitektur x86 (32-bit)\n        switch(op) {\n            case '+':\n                __asm__ (\n                    \"addl %1, %0;\"        // result = num1 + num2\n                    : \"=r\" (result)\n                    : \"r\" (num2), \"0\" (num1)\n                );\n                break;\n            case '-':\n                __asm__ (\n                    \"subl %1, %0;\"        // result = num1 - num2\n                    : \"=r\" (result)\n                    : \"r\" (num2), \"0\" (num1)\n                );\n                break;\n            case 'x': // Perkalian\n                __asm__ (\n                    \"imull %1, %0;\"       // result = num1 * num2\n                    : \"=r\" (result)\n                    : \"r\" (num2), \"0\" (num1)\n                );\n                break;\n            case '/': // Pembagian\n                if (num2 == 0) {\n                    printf(\"Error: Pembagian dengan nol tidak diperbolehkan!\\n\");\n                    exit(1);\n                }\n                __asm__ (\n                    \"cltd;\"               // Convert to doubleword untuk pembagian\n                    \"idivl %2;\"           // result = num1 / num2\n                    : \"=a\" (result)\n                    : \"d\" (num1), \"r\" (num2)\n                );\n                break;\n            default:\n                printf(\"Operator tidak dikenal!\\n\");\n                exit(1);\n        }\n    #else\n        printf(\"Arsitektur tidak didukung! Hanya mendukung x86 dan x86_64.\\n\");\n        exit(1);\n    #endif\n\n    return result;\n}\n```\n\n## Potongan kode operasi aritmatika di ARM 32bit dan 64bit (Aarch)\n```\n// Fungsi untuk menghitung operasi aritmatika\nlong calculate(long num1, char op, long num2) {\n    long result;\n\n    switch(op) {\n        case '+':\n            #if defined(__arm__) || defined(__aarch32__) // ARM32\n                __asm__ (\n                    \"add %0, %1, %2;\"    // result = num1 + num2\n                    : \"=r\" (result)\n                    : \"r\" (num1), \"r\" (num2)\n                );\n            #elif defined(__aarch64__) // ARM64\n                __asm__ (\n                    \"add %0, %1, %2;\"    // result = num1 + num2\n                    : \"=r\" (result)\n                    : \"r\" (num1), \"r\" (num2)\n                );\n            #else\n                printf(\"Arsitektur tidak didukung!\\n\");\n                exit(1);\n            #endif\n            break;\n        case '-':\n            #if defined(__arm__) || defined(__aarch32__) // ARM32\n                __asm__ (\n                    \"sub %0, %1, %2;\"    // result = num1 - num2\n                    : \"=r\" (result)\n                    : \"r\" (num1), \"r\" (num2)\n                );\n            #elif defined(__aarch64__) // ARM64\n                __asm__ (\n                    \"sub %0, %1, %2;\"\n                    : \"=r\" (result)\n                    : \"r\" (num1), \"r\" (num2)\n                );\n            #else\n                printf(\"Arsitektur tidak didukung!\\n\");\n                exit(1);\n            #endif\n            break;\n        case 'x': // Perkalian\n            #if defined(__arm__) || defined(__aarch32__) // ARM32\n                __asm__ (\n                    \"mul %0, %1, %2;\"    // result = num1 * num2\n                    : \"=r\" (result)\n                    : \"r\" (num1), \"r\" (num2)\n                );\n            #elif defined(__aarch64__) // ARM64\n                __asm__ (\n                    \"mul %0, %1, %2;\"\n                    : \"=r\" (result)\n                    : \"r\" (num1), \"r\" (num2)\n                );\n            #else\n                printf(\"Arsitektur tidak didukung!\\n\");\n                exit(1);\n            #endif\n            break;\n        case '/': // Pembagian\n            if (num2 == 0) {\n                printf(\"Error: Pembagian dengan nol tidak diperbolehkan!\\n\");\n                exit(1);\n            }\n            #if defined(__arm__) || defined(__aarch32__) // ARM32\n                __asm__ (\n                    \"sdiv %0, %1, %2;\"   // result = num1 / num2\n                    : \"=r\" (result)\n                    : \"r\" (num1), \"r\" (num2)\n                );\n            #elif defined(__aarch64__) // ARM64\n                __asm__ (\n                    \"sdiv %0, %1, %2;\"\n                    : \"=r\" (result)\n                    : \"r\" (num1), \"r\" (num2)\n                );\n            #else\n                printf(\"Arsitektur tidak didukung!\\n\");\n                exit(1);\n            #endif\n            break;\n        default:\n            printf(\"Operator tidak dikenal!\\n\");\n            exit(1);\n    }\n    return result;\n}\n```\n\n## Kontribusi\n\nJika Anda ingin berkontribusi dalam pengembangan kalkulator ini, silakan lakukan fork repository ini, buat cabang (branch), lakukan perubahan, dan ajukan pull request.\n\n## Lisensi\n\nProyek ini dilisensikan di bawah **Creative Common License** - lihat [LICENSE](LICENSE) untuk detail lebih lanjut.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farchanaberry%2Fsimplify-calculatorasmc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farchanaberry%2Fsimplify-calculatorasmc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farchanaberry%2Fsimplify-calculatorasmc/lists"}