Implemented the rest of the unsigned integer operations

This commit is contained in:
cannoli-fruit 2026-07-24 03:12:34 -04:00
commit 1ade055e09
5 changed files with 46 additions and 4 deletions

2
.gitignore vendored
View file

@ -1,2 +1,2 @@
build build
flagvm

View file

@ -29,7 +29,6 @@ uint64_t registers[256];
bool isMMIO(uint64_t addr) { bool isMMIO(uint64_t addr) {
if (addr == UART_TX) return true; if (addr == UART_TX) return true;
if (addr == UART_RX) return true; if (addr == UART_RX) return true;
return false; return false;
} }
@ -168,12 +167,24 @@ int main(int argc, char **argv) {
registers[dst] += registers[src]; registers[dst] += registers[src];
break; break;
} }
case 0x70: { // MulR64
unsigned char dst = inputs[0];
unsigned char src = inputs[1];
registers[dst] *= registers[src];
break;
}
case 0x72: { // DivR64 case 0x72: { // DivR64
unsigned char dst = inputs[0]; unsigned char dst = inputs[0];
unsigned char src = inputs[1]; unsigned char src = inputs[1];
registers[dst] /= registers[src]; registers[dst] /= registers[src];
break; break;
} }
case 0x74: { // ModR64
unsigned char dst = inputs[0];
unsigned char src = inputs[1];
registers[dst] %= registers[src];
break;
}
case 0xC0: { // Jmp case 0xC0: { // Jmp
unsigned char addr = inputs[0]; unsigned char addr = inputs[0];
xPc = registers[addr]; xPc = registers[addr];

View file

@ -13,8 +13,7 @@ define r9 9
define r10 10 define r10 10
define r11 11 define r11 11
define r12 12 define r12 12
define r13 13 define r13 13 define r14 14
define r14 14
define r15 15 define r15 15
define r16 16 define r16 16
define r17 17 define r17 17
@ -236,12 +235,24 @@ macro AddR64 dst, src
db src db src
end macro end macro
macro MulR64 dst, src
db 0x70
db dst
db src
end macro
macro DivR64 dst, src macro DivR64 dst, src
db 0x72 db 0x72
db dst db dst
db src db src
end macro end macro
macro ModR64 dst, src
db 0x74
db dst
db src
end macro
macro RSetF reg macro RSetF reg
db 0x42 db 0x42
db reg db reg

10
tests/mod.asm Normal file
View file

@ -0,0 +1,10 @@
include "fvm.inc"
org 0x4000000000000000
MovI64 r95, UART_TX
MovI64 r2, 16
MovI64 r3, 3
ModR64 r2, r3
MovI64 r4, 48 ; ascii for 0
AddR64 r2, r4
St8 r2, r95

10
tests/mul.asm Normal file
View file

@ -0,0 +1,10 @@
include "fvm.inc"
org 0x4000000000000000
MovI64 r95, UART_TX
MovI64 r2, 2
MovI64 r3, 4
MulR64 r2, r3
MovI64 r4, 48 ; ascii for 0
AddR64 r2, r4
St8 r2, r95