From 405f185d4f5e35c9f7892c8bf216eeda8c422f47 Mon Sep 17 00:00:00 2001 From: Murad Date: Fri, 4 Feb 2022 17:59:00 +0200 Subject: [PATCH 1/4] add basic assembler design document --- ASM-SYNTAX.md | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 ASM-SYNTAX.md diff --git a/ASM-SYNTAX.md b/ASM-SYNTAX.md new file mode 100644 index 0000000..5c8ff80 --- /dev/null +++ b/ASM-SYNTAX.md @@ -0,0 +1,101 @@ +# ASM SYNTAX + +Grammar is described via +[McKeeman Form](https://www.crockford.com/mckeeman.html). + +Instruction operands order resembles Intel syntax. + +`digit(min, max)` is a representation of binary, octal, +decimal or hexadecimal integer in range `[min, max]`. +I don't want to describe grammar for integers because +it does not seem like a trivial task. Sue me. + +``` +asm + instructions + +instructions + instruction + instruction '\n' instructions + +instruction + mov + jmp + 'EQ' + 'GT' + 'LE' + 'NOT' + shift + 'INC' + 'DEC' + 'ADD' + 'SUB' + 'AND' + 'OR' + 'XOR' + 'XNOR' + 'COMPL' register + 'SETC' digit(0, 1) + 'NOP' + 'HALT' + 'CLOAD' register + 'ZERO' register + 'DIV' + 'MUL' + 'SWAP' + 'PRTRD' + 'RDPRT' + 'WRPRT' + +mov + 'MOV' register ',' memory + 'MOV' memory ',' register + 'MOV' register-half ',' digit(0, 15) + 'MOV' register ',' register + +jmp + 'JMP' digit(-4, 8) + 'JE' digit(-4, 8) + 'JNE' digit(-4, 8) + 'AJMP' digit(0, 255) + 'AJE' digit(0, 255) + 'AJNE' digit(0, 255) + +shift + 'SHR' + 'SHL' + 'ROTR' + 'ROTL' + 'SHR' register ',' digit(0, 7) + 'SHL' register ',' digit(0, 7) + 'ROTR' register ',' digit(0, 7) + 'ROTL' register ',' digit(0, 7) + +register + 'R0' + 'R1' + +memory + '[' digit(0, 15) ']' + +register-half + register '.l' + register '.h' +``` + +## Missing stuff + +There are no labels. +We will probably implement them in future. +Or we will probably not. + +## Sample program + +```asm +MOV R0.l, 0xF +MOV R1.l, 0x3 +ADD +MOV [0], R0 +ZERO R0 +HALT +``` From b22b0cd4a231d4927f5de2bd3666556c64950273 Mon Sep 17 00:00:00 2001 From: Murad Date: Fri, 4 Feb 2022 18:09:22 +0200 Subject: [PATCH 2/4] slightly better port instruction names --- ASM-SYNTAX.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ASM-SYNTAX.md b/ASM-SYNTAX.md index 5c8ff80..c9d9adf 100644 --- a/ASM-SYNTAX.md +++ b/ASM-SYNTAX.md @@ -43,9 +43,9 @@ instruction 'DIV' 'MUL' 'SWAP' + 'PRTCHK' 'PRTRD' - 'RDPRT' - 'WRPRT' + 'PRTWR' mov 'MOV' register ',' memory From a169a88727d9af3e009f4a194910c1a343f942af Mon Sep 17 00:00:00 2001 From: Murad Date: Mon, 7 Feb 2022 13:50:41 +0300 Subject: [PATCH 3/4] add byte literals to asm syntax design document --- ASM-SYNTAX.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/ASM-SYNTAX.md b/ASM-SYNTAX.md index c9d9adf..59d98ea 100644 --- a/ASM-SYNTAX.md +++ b/ASM-SYNTAX.md @@ -12,11 +12,18 @@ it does not seem like a trivial task. Sue me. ``` asm - instructions + expressions -instructions +expressions + expression + expression '\n' expressions + +expression instruction - instruction '\n' instructions + byte-literal + +byte-literal + 'BYTE' digit(0, 255) instruction mov From 57f1a047d29cd0ea9c2c544d193685d546f2d819 Mon Sep 17 00:00:00 2001 From: Murad Date: Wed, 9 Feb 2022 16:50:08 +0300 Subject: [PATCH 4/4] fix impossible far jumps in assembler design AJMP, AJE and AJNE cannot jump to immediate address, they need to load address from R0 or R1. --- ASM-SYNTAX.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ASM-SYNTAX.md b/ASM-SYNTAX.md index 59d98ea..0a5aec1 100644 --- a/ASM-SYNTAX.md +++ b/ASM-SYNTAX.md @@ -64,9 +64,9 @@ jmp 'JMP' digit(-4, 8) 'JE' digit(-4, 8) 'JNE' digit(-4, 8) - 'AJMP' digit(0, 255) - 'AJE' digit(0, 255) - 'AJNE' digit(0, 255) + 'AJMP' register + 'AJE' register + 'AJNE' register shift 'SHR'