{"id":15287446,"url":"https://github.com/coderick14/armed","last_synced_at":"2025-05-07T02:28:20.906Z","repository":{"id":57583955,"uuid":"86063344","full_name":"coderick14/ARMed","owner":"coderick14","description":"A terminal-based emulator of the ARM instruction set written in Golang","archived":false,"fork":false,"pushed_at":"2018-01-16T07:55:03.000Z","size":613,"stargazers_count":65,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-05-07T02:28:17.765Z","etag":null,"topics":["arm","assembly","computer-architecture","computer-organization","emulator","golang"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/coderick14.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}},"created_at":"2017-03-24T11:59:27.000Z","updated_at":"2024-05-31T19:06:49.000Z","dependencies_parsed_at":"2022-09-10T09:00:25.097Z","dependency_job_id":null,"html_url":"https://github.com/coderick14/ARMed","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coderick14%2FARMed","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coderick14%2FARMed/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coderick14%2FARMed/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coderick14%2FARMed/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/coderick14","download_url":"https://codeload.github.com/coderick14/ARMed/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252801209,"owners_count":21806274,"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":["arm","assembly","computer-architecture","computer-organization","emulator","golang"],"created_at":"2024-09-30T15:28:12.177Z","updated_at":"2025-05-07T02:28:20.883Z","avatar_url":"https://github.com/coderick14.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ARMed\n---\n#### A basic ARM emulator written in Golang \n[![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/coderick14/ARMed/issues)\n[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.png?v=103)](https://github.com/coderick14/ARMed)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![GoDoc](https://godoc.org/github.com/coderick14/ARMed?status.svg)](https://godoc.org/github.com/coderick14/ARMed)\n\n![ARMed logo](https://github.com/coderick14/ARMed/blob/dev/images/logo.png \"ARMed - an ARM emulator written in Golang\" )\n\n#### Build instructions\n##### Build from source\nRequires Go to be [installed](https://golang.org/doc/install) and [configured](https://golang.org/doc/install#testing)\n```\ngo get github.com/coderick14/ARMed\n```\n\n##### Download the compiled binary\nJust download the binary for your required OS and architecture from [releases](https://github.com/coderick14/ARMed/releases)\n\n#### Usage\n`ARMed --help` will show all the usage details\n```\nARMed version 1.0\nAuthor : https://github.com/coderick14\n\nARMed is a very basic emulator of the ARM instruction set written in Golang\nUSAGE : ARMed [OPTIONS]... SOURCE_FILE\n\n--all \t\tshow all register values after an instruction, with updated ones in color\n--end \t\tshow updated registers only once, at the end of the program. Overrides --all\n--no-log \tsuppress logs of statements being executed\n--help \t\tdisplay help\n\nFound a bug? Feel free to raise an issue on https://github.com/coderick14/ARMed\nContributions welcome :)\n```\n\n---\n\n##### Contributions\nFound a bug? Or maybe add support for some more instructions? Feel free to open up a pull request or raise an issue!!\n\n---\n\n![ARMed demo GIF](https://github.com/coderick14/ARMed/blob/dev/images/demo.gif \"Simple demo of how ARMed works\" )\n##### NOTE : On Windows, if your cmd does not support unicode characters, pipe your output to a file.\n```\nARMed.exe myfile \u003e output.txt\n```\nThen view the file in your favourite editor (Notepad++, Wordpad, Sublime Text etc)\n\n#### Instructions supported in v1.0\n\n```\nINSTRUCTION : ADDITION\nExample : ADD X1, X2, X3\nMeaning : X1 = X2 + X3\n```\n\n```\nINSTRUCTION : SUBTRACTION\nExample : SUB X1, X2, X3\nMeaning : X1 = X2 - X3\n```\n\n```\nINSTRUCTION : MULTIPLICATION \nExample : MUL X1, X2, X3\nMeaning : X1 = X2 * X3\n```\n\n```\nINSTRUCTION : ADD IMMEDIATE\nExample : ADDI X1, X2, #40\nMeaning : X1 = X2 + 40\n```\n\n```\nINSTRUCTION : SUB IMMEDIATE\nExample : SUBI X1, X2, #40\nMeaning : X1 = X2 - 40\n```\n\n```\nINSTRUCTION : ADD AND SET FLAGS\nExample : ADDS X1, X2, X3\nMeaning : X1 = X2 + X3\nComments : Adds and sets condition codes\n```\n\n```\nINSTRUCTION : SUB AND SET FLAGS\nExample : SUBS X1, X2, X3\nMeaning : X1 = X2 - X3\nComments : Subtracts and sets condition codes\n```\n\n```\nINSTRUCTION : ADD IMMEDIATE AND SET FLAGS\nExample : ADDIS X1, X2, #40\nMeaning : X1 = X2 + 40\nComments : Adds constant and sets condition codes\n```\n\n```\nINSTRUCTION : SUB IMMEDIATE AND SET FLAGS\nExample : SUBIS X1, X2, #40\nMeaning : X1 = X2 - 40\nComments : Subtracts constant and sets condition codes\n```\n\n```\nINSTRUCTION : LOAD\nExample : LDUR X1, [X2, #40]\nMeaning : X1 = Memory[X2 + 40]\nComments : Word from memory to register\n```\n\n```\nINSTRUCTION : STORE\nExample : STUR X1, [X2, #40]\nMeaning : Memory[X2 + 40] = X1\nComments : Word from register to memory\n```\n\n```\nINSTRUCTION : LOAD HALFWORD\nExample : LDURH X1, [X2, #40]\nMeaning : X1 = Memory[X2 + 40]\nComments : Halfword from memory to register\n```\n\n```\nINSTRUCTION : STORE HALFWORD\nExample : STURH X1, [X2, #40]\nMeaning : Memory[X2 + 40] = X1\nComments : Halfword from register to memory\n```\n\n```\nINSTRUCTION : LOAD BYTE\nExample : LDURB X1, [X2, #40]\nMeaning : X1 = Memory[X2 + 40]\nComments : Byte from memory to register\n```\n\n```\nINSTRUCTION : STORE BYTE\nExample : STURB X1, [X2, #40]\nMeaning : Memory[X2 + 40] = X1\nComments : Byte from register to memory\n```\n\n```\nINSTRUCTION : MOVE WITH ZERO\nExample : MOVZ X1, 20, LSL 0\nMeaning : X1 = 20 or 20*(2^16) or 20*(2^32) or 20*(2^48)\nComments : Loads 16-bit constant, rest zeroes\n```\n\n```\nINSTRUCTION : MOVE WITH KEEP\nExample : MOVK X1, 20, LSL 0\nMeaning : X1 = 20 or 20*(2^16) or 20*(2^32) or 20*(2^48)\nComments : Loads 16-bit constant, rest unchanged\n```\n\n```\nINSTRUCTION : LOGICAL AND\nExample : AND X1, X2, X3\nMeaning : X1 = X2 \u0026 X3\nComments : Bitwise-And of X2 and X3, stores result in X1\n```\n\n```\nINSTRUCTION : LOGICAL OR\nExample : ORR X1, X2, X3\nMeaning : X1 = X2 | X3\nComments : Bitwise-Or of X2 and X3, stores result in X1\n```\n\n```\nINSTRUCTION : LOGICAL EXCLUSIVE-OR\nExample : EOR X1, X2, X3\nMeaning : X1 = X2 ^ X3\nComments : Bitwise-Xor of X2 and X3, stores result in X1\n```\n\n```\nINSTRUCTION : LOGICAL AND IMMEDIATE\nExample : ANDI X1, X2, #20\nMeaning : X1 = X2 \u0026 20\nComments : Bitwise-And of X2 with a constant, stores result in X1\n```\n\n```\nINSTRUCTION : LOGICAL OR IMMEDIATE\nExample : ORRI X1, X2, #20\nMeaning : X1 = X2 | 20\nComments : Bitwise-Or of X2 with a constant, stores result in X1\n```\n\n```\nINSTRUCTION : LOGICAL EXCLUSIVE-OR IMMEDIATE\nExample : EORI X1, X2, #20\nMeaning : X1 = X2 ^ 20\nComments : Bitwise-Xor of X2 with a constant, stores result in X1\n```\n\n```\nINSTRUCTION : LOGICAL LEFT SHIFT\nExample : LSL X1, X2, #10\nMeaning : X1 = X2 \u003c\u003c 10\nComments : Left shifts X2 by a constant, stores result in X1\n```\n\n```\nINSTRUCTION : LOGICAL RIGHT SHIFT\nExample : LSR X1, X2, #10\nMeaning : X1 = X2 \u003e\u003e 10\nComments : Right shifts X2 by a constant, stores result in X1\n```\n\n```\nINSTRUCTION : COMPARE AND BRANCH ON EQUAL 0\nExample : CBZ X1, label\nMeaning : if (X1 == 0) go to label\nComments : Equal 0 test; PC-relative branch\n```\n\n```\nINSTRUCTION : COMPARE AND BRANCH ON NOT EQUAL 0\nExample : CBNZ X1, label\nMeaning : if (X1 != 0) go to label\nComments : NotEqual 0 test; PC-relative branch\n```\n\n```\nINSTRUCTION : CONDITIONAL BRANCH\nExample : B.cond label\nMeaning : if (condition true) go to label\nComments : Test condition codes; if true, then branch\n```\n\n```\nINSTRUCTION : UNCONDITIONAL BRANCH\nExample : B label\nMeaning : go to label\nComments : Branch to PC-relative target address\n```\n\n```\nINSTRUCTION : UNCONDITIONAL BRANCH TO REGISTER\nExample : BR LR\nMeaning : go to address stored in LR\nComments : Branch to address stored in register. Used for switch, procedure return\n```\n\n```\nINSTRUCTION : UNCONDITIONAL BRANCH WITH LINK\nExample : BL label\nMeaning : X30 = PC + 4; go to label\nComments : For procedure call (PC-relative)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoderick14%2Farmed","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoderick14%2Farmed","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoderick14%2Farmed/lists"}