  EnotVM32  https://chat.deepseek.com/

        EnotVM32  
(  Turbo Pascal 4.0,   FASM + Macros.asm)

   # 1.   
    ,    :
- "г "      (`uGenTR`).
- " "    ,   (`uGen0`).
- "г    "  ,  
  (`uGenV`).
- "г   "    ,   -
 (`uGenL`).
- "г "     ( ) 
  `uGen`    `uMain`.

      (,  )         FASM,     FASM.   "   ",     .

   # 2.  

       2.1. `uGenTR.pas`     
-   `TReg = record id: Byte; Name: string[4]; end;`
- ̳    256  ( :
`AA`..`JV`,  : `A`..`Z`).
-   `YA..YH` (232..239), `ZA..ZH` (240..247),
 `CMP1`, `CMP2`.
-        
   (, `A`, `YA`, `CMP1`).

"  :"
```pascal
A : TReg = (id:0;  Name:'A');
YA: TReg = (id:232; Name:'YA');
```

       2.2. `uGen0.pas`      
- "`InitGen`", "`FinalGen`"  /  
 `BOOT.asm`.
- "`AddStr(s)`"     .
- "`REM(s)`"    (`; ...`).
- "`VK`"   .
- "`Label_(L)`"    (`L:`).
- "`format_binary_as_bin`"    `format binary as 'bin'`.
- "`include_Macros_asm`"   `include 'Macros.asm'`.
-   "`IntToStr`", "`IntToHex`" 
(   ,    ).

          
  .

       2.3. `uGenV.pas`     
̳ ,      FASM,   
" " (, )    .

" :"
- "": `MOVrv(Rg, Value)`, `MOVrr(Rg1, Rg2)`, `MOVrm(Rg, Addr)`, 
`MOVrmr`, `MOVmr`, `MOVmrr`, `MOV2rm`, `MOV2mr`, `MOV2rmr`, `MOV2mrr`, 
`MOV1rm`, `MOV1mr`, `MOV1rmr`, `MOV1mrr`.
- "/": `ADDrr`, `SUBrr`, `MULrr`, `DIVrr`, `MODrr`, `INCr`, 
`DECr`, `ANDrr`, `ORrr`, `XORrr`, `NOTr`, `SHLrr`, `SHRrr`, `CMPrr`.
- "": `CALLa(Addr)`, `CALLr(Rg)`, `RET_`, `GOTOa(Addr)`, 
`GOTOr(Rg)`,   (`GOTOsaIs`, `GOTOsaNotIs`, ...)  
 (`GOTOuaMoreIs`, `GOTOuaLess`).
- "": `PUSHr`, `POPr`, `PUSHrsvr`, `POPrsvr`.
- "  EXTR": `EXTR(Value)`,   
 - (`WritelnStr`, `EndProgram`, `Readln0`  ..).
- " ": `VarStrB(MaxSize, Text)`, `VarStrW`, `VarStr3B`, 
`VarStrDW`, `ContStrB`, `ContStrW`, `ContStr3B`, `ContStrDW`.
- " ": `CopyMainToMain`, `CopyMainToExt`,
 `CopyExtToMain`, `CopyExtToExt`.

     , :
```pascal
procedure MOVrv(Rg: TReg; Value: Longint);
begin AddStr('    MOVrv ' + Rg.Name + ', ' + IntToStr(Value)); end;
```

       2.4. `uGenL.pas`    
 `uGenV`,    " "
 ( `string255`).   :
```pascal
MOVrl(YA, 'hello1');    // MOVrv YA, hello1
GOTOslMoreIs('loop');   // GOTOsaMoreIs loop
```
 :
`MOVrl`, `MOVrml`, `MOVmlr`, `MOVmlrr`, `MOV2rml`, `MOV2mlr`, 
`MOV1rml`, `MOV1mlr`, `CALLl`, `GOTOl`, `GOTOslIs`, `GOTOslNotIs`, `GOTOslMoreIs`, `GOTOslLess`, `GOTOulMoreIs`, `GOTOulLess`.

       2.5. `uGen.pas`    
 " ",       .
̳  `StartGenerator`,     
.

"  Hello World:"
```pascal
procedure StartGenerator;
begin
  InitGen;
  REM('  ...');
  format_binary_as_bin;
  include_Macros_asm;
  MOVrl(YA, 'hello1');
  WritelnStr;
  MOVrl(YA, 'hello2');
  WritelnStr;
  Readln0;
  EndProgram;
  Label_('hello1');
  AddStr('db 1,13,13,''Hello, World!''');
  Label_('hello2');
  ConstStrB('Hello, World!');
  FinalGen;
end;
```

       2.6. `uMain.pas`  `ProjectP.pas`
- `uMain`  `StartProgram`,   `StartGenerator`.
- `ProjectP`   ,   `InitProgram;
 StartProgram; FinalProgram;`.

   # 3.    ( VarStr/ContStr)
         
 ( 1, 2, 3, 4),     . 
    :

- "VarStrB / VarStrW / VarStr3B / VarStrDW"     
 . ,    .
- "ContStrB / ContStrW / ContStr3B / ContStrDW"    
 (   ). ,   ,    .

  `.asm`-      ,
 :
```asm
hello2: ContStrB 'Hello, World!'
```

   # 4.       
1. ³  `StartGenerator`   `uGen.pas`.
2.    `uGenV`  `uGenL`,   .
3.     `ContStr...`  `VarStr...`.
4.    `Label_(''')`.
5.   `ProjectP.pas`   `ProjectP.exe`.
6.  `ProjectP.exe`      `BOOT.asm`.
7. ³ `BOOT.asm`   FASM (, `fasm BOOT.asm 
BOOT.bin`).
8.  `EnotVM32.exe` (  `BOOT.bin`
    ).

   # 5.   
-     (,    `hello1`). 
  FASM.
-       . 
         
     FASM.
-  `uGenV`  `uGenL`  ,    
    .     
     .

   # 6.     (Delphi,   )
        `BOOT.bin`
 ( 0, 1, ),       
 .    `uTSSB`  
     ,   
 .

