{"id":26100541,"url":"https://github.com/mrkct/charm","last_synced_at":"2026-04-20T15:31:24.940Z","repository":{"id":276475516,"uuid":"929397025","full_name":"mrkct/charm","owner":"mrkct","description":"A toy assembler for ARMv7","archived":false,"fork":false,"pushed_at":"2025-03-24T21:10:23.000Z","size":145,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-11-30T03:50:05.640Z","etag":null,"topics":["arm","armv7a","assembler","assembly"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mrkct.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2025-02-08T13:04:54.000Z","updated_at":"2025-03-29T16:32:58.000Z","dependencies_parsed_at":"2025-03-15T18:34:21.999Z","dependency_job_id":null,"html_url":"https://github.com/mrkct/charm","commit_stats":null,"previous_names":["mrkct/charm"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mrkct/charm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrkct%2Fcharm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrkct%2Fcharm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrkct%2Fcharm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrkct%2Fcharm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mrkct","download_url":"https://codeload.github.com/mrkct/charm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrkct%2Fcharm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32053168,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T11:35:06.609Z","status":"ssl_error","status_checked_at":"2026-04-20T11:34:48.899Z","response_time":94,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["arm","armv7a","assembler","assembly"],"created_at":"2025-03-09T17:39:22.733Z","updated_at":"2026-04-20T15:31:24.934Z","avatar_url":"https://github.com/mrkct.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Charm: a tiny assembler for 32-bit ARM\n\nCharm is a toy assembler that aims to generate ARMv7-A assembly code.\nIt implements a very tiny subset of the ARMv7-A instruction set\nand can either generate a flat binary or a static ELF executable.\n\nCharm is implemented entirely in a single C file, without any\ndependencies other than the standard C library.\n\n## Usage\n\nThe following commands will assemble the `hello.S` into a static ELF\nexecutable that can run on an ARM Linux machine:\n\n    ./charm samples/hello.S hello\n    ./hello\n    Hello, world!\n\n\u003e [!TIP]\n\u003e If you're not on an ARM machine, you can use `qemu-arm` to run the generated executable.\n\nCharm will use `_start` as the entry point of the program.\n\nIf the output file ends with `.bin` or `.obj`, the output will be\na flat binary.\n\n## Compiling\n\nCompiling charm requires a recent C compiler (it uses some C23 features).\n\n    make\n\nRunning the test suite requires the GNU tools in `arm-none-eabi-gcc`\nbecause `as` and `objdump`' are used for validation.\n\n## Limitations\n\nAs the first line of this README says, Charm is a toy assembler and\ntherefore has many limitations compared to established assemblers\nlike GNU's `as`.\n\nHere's a non-exhaustive list, you can either look at this to see if\ncharm is suitable for you use case or you can treat this as a potential\nlist of improvements you could contribute.\n\n**Very few instructions are implemented**:\nCharm implements around 20 instructions, and some of them are not\neven fully implemented.\n\n**Not all invalid instructions are rejected**:\nCharm doesn't implement all verification checks for all instructions,\nand therefore it might allow you to assemble code that can generate\nunpredictable results.\n\nAs an example, `mul pc, pc, pc` is marked as UNPREDICTABLE by the\nARMv7-A architecture, but charm will happily assemble that for you.\n\n**No support for auto-generating literal pools**:\nCharm doesn't implement any support for literal pools, so you'll\nhave to write them by hand.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrkct%2Fcharm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmrkct%2Fcharm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrkct%2Fcharm/lists"}