Every register is followed in memory. Exemple: acc is after ip ect.
Order of register is as following: ip, acc, ax, bx, cx, dx, ex, fx, gx, hx, sp, fp.
ip: instruction pointer (16bits) don't touch pleaseacc: accumulator, stored results of mathematical operations (add, sub, mul ...)sp: stack pointer (handle subroutines)fp: frame pointer (pointer inside stack frame)
a:ax: main register (16bits) can be separated in two 8bits registerah: 8bits register, upper byte ofaxal: 8bits register, lower byte ofax
b: same handling asawith registersbh,blandbxc: same handling asawith registersch,clandcxd: same handling asawith registersdh,dlanddxex: 16bits registerfx: 16bits registergx: 16bits registerhx: 16bits register
movxy(movexiny):x= register, memory (as u8 or u16), literal, register pointer (as u8 or u16), literal + register (as an offset)y= register, memory (as u8 or u16), register pointer (as u8 or u16)
addxy(addxandyin register acc):x= registery= literal, registerx+y> 65535 -> flag Carry == 0100
subxy(subxandyin register acc):x= literal, registery= literal, registerx-y< 0 -> flag Carry == 0100xandycan't be both literal
multxy(mulxandyin register acc):x= registery= literal, registerx*y> 65535 -> flag Carry == 0100
cmpxy(update flag by comparingxandy):x= registery= literal, registerx==y-> flag Zero == 0001x>y-> flag Pos == 0000x<y-> flag Neg == 0010
increg(increment value inreg)decrec(decrement value inreg)jmplabel(jmp to label unconditionnaly):jmp=jne(jmp if flag Zero is not set)jmp=jeq(jmp if flag Zero is set)jmp=jgt(jmp if flag Zero is not set AND flag Neg is not set)jmp=jge(jmp if flag Neg is not set)jmp=jlt(jmp if flag Neg is set)jmp=jle(jmp if flag Neg is set OR if flag Zero is set)
pshval(push val on stack):val= register, register pointer (as u8 or u16), literal, memory (as u8 or u16)
popval(pop stack in val):val= register, register pointer (as u8 or u16), memory (as u8 or u16)
calval(call subroutine, setting up stackframe):val= label or register
ret(return from subroutine, restoring stackframe)xorxy(xorxandyand store result inx):x= registery= literal or register
end(end of program)
0x3000-0x4000 -> screen