Implemented division

This commit is contained in:
Eduard Urbach 2024-06-25 00:19:01 +02:00
parent 432397043d
commit 3aedcef9eb
Signed by: eduard
GPG key ID: 49226B848C78F6C8
7 changed files with 89 additions and 3 deletions

View file

@ -45,6 +45,16 @@ func (a *Assembler) Finalize() ([]byte, []byte) {
code = x64.MulRegNum(code, operands.Register, operands.Number)
}
case DIV:
switch operands := x.Data.(type) {
case *RegisterNumber:
code = x64.MoveRegReg64(code, x64.RAX, operands.Register)
code = x64.MoveRegNum32(code, operands.Register, uint32(operands.Number))
code = x64.ExtendRAXToRDX(code)
code = x64.DivReg(code, operands.Register)
code = x64.MoveRegReg64(code, operands.Register, x64.RAX)
}
case CALL:
code = x64.Call(code, 0x00_00_00_00)
size := 4

View file

@ -6,6 +6,7 @@ const (
NONE Mnemonic = iota
ADD
CALL
DIV
JUMP
MUL
LABEL
@ -24,6 +25,9 @@ func (m Mnemonic) String() string {
case CALL:
return "call"
case DIV:
return "div"
case JUMP:
return "jump"