EnotVM

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » EnotVM » Тестовый форум » _EnotVM32(260318)


_EnotVM32(260318)

Сообщений 21 страница 21 из 21

21

О, ти вже майже добив інструкційний набір 👍
Залишились якраз логічні “дірки” {1C} {1D} {1E} {1F} — давай їх закриємо грамотно.

Ти вже маєш:

PUSH/POP один регістр
PUSH/POP групи (0–7)
арифметика і логіка

👉 Чого логічно не вистачає перед арифметикою (20h+):

✔️ Я пропоную таке заповнення:
🔹 {1C} CMPrr (як в норм CPU)

— тільки порівняння, без зміни регістрів
— результат у idCMP1/idCMP2

код:

Procedure OpCMPrr;
begin
RegsDW[idCMP1] := RegsDW[RAM[RgEIP+1]];
RegsDW[idCMP2] := RegsDW[RAM[RgEIP+2]];
Inc(RgEIP,3);
end;

🔹 {1D} TESTrr (логічне порівняння через AND)

— аналог x86 TEST
— зручно для умов

код:

Procedure OpTESTrr;
begin
RegsDW[idCMP1] := RegsDW[RAM[RgEIP+1]] and RegsDW[RAM[RgEIP+2]];
RegsDW[idCMP2] := 0;
Inc(RgEIP,3);
end;

🔹 {1E} XCHGrr (обмін регістрів)

— дуже корисна команда

код:

Procedure OpXCHGrr;
var t:OptInt32;
begin
t := RegsDW[RAM[RgEIP+1]];
RegsDW[RAM[RgEIP+1]] := RegsDW[RAM[RgEIP+2]];
RegsDW[RAM[RgEIP+2]] := t;
Inc(RgEIP,3);
end;

🔹 {1F} CLRreg (обнулення регістру)

— швидкий zero без MOV

код:

Procedure OpCLRreg;
begin
RegsDW[RAM[RgEIP+1]] := 0;
Inc(RgEIP,2);
end;

✔️ Додай у Test1:

$1C:s:='OpCMPrr';
$1D:s:='OpTESTrr';
$1E:s:='OpXCHGrr';
$1F:s:='OpCLRreg';

✔️ Додай у Engine:

$1C:OpCMPrr;
$1D:OpTESTrr;
$1E:OpXCHGrr;
$1F:OpCLRreg;

🔥 Чому саме так

Ти отримуєш повністю базовий CPU мінімум:

CMP → для всіх GOTO умов
TEST → для бітових перевірок
XCHG → без MOV-тріюків
CLR → швидке обнулення

👉 І тепер у тебе фактично:

control flow ✔
stack ✔
arithmetic ✔
logic ✔
compare ✔

Це вже повноцінне ядро процесора, навіть без EXT.

Якщо хочеш — далі можу:

зробити FLAGS (ZF, CF, SF) як у x86
або
мікро-оптимізацію Engine (швидкість х2–х3)
або
байткод формат під твій VM (як асемблер виглядатиме)

Не забудь написати "дяка" 😉

0

Быстрый ответ

Напишите ваше сообщение и нажмите «Отправить»



Вы здесь » EnotVM » Тестовый форум » _EnotVM32(260318)