43 lines
1.3 KiB
Plaintext
43 lines
1.3 KiB
Plaintext
Function MyAdd {
|
|
Buffer DataMem as Long*2
|
|
Buffer Code ExecMem as byte*32
|
|
Address=0
|
|
EmbByte(0x31, 0xC0)
|
|
EmbByteLong(0x3,0x5, DataMem(0)) ' add eax, [DataMem(0)]
|
|
EmbByteLong(0x3,0x5, DataMem(1)) ' add eax, [DataMem(1)]
|
|
EmbLong(0xa3, DataMem(0)) ' mov [DataMem(0)], eax
|
|
Rem :
|
|
EmbByte(0x31, 0xC0) ' xor eax, eax
|
|
Ret() ' Return
|
|
=lambda ExecMem, DataMem (a as double, b as double)-> {
|
|
Return DataMem, 0:=a, 1:=b
|
|
Try ok {
|
|
Execute Code ExecMem, 0
|
|
}
|
|
If not ok then {
|
|
=Uint(Error)
|
|
} Else {
|
|
=Eval(DataMem, 0)
|
|
}
|
|
}
|
|
Sub Ret()
|
|
Return ExecMem, Address:=0xC3
|
|
Address++
|
|
End Sub
|
|
Sub EmbByte()
|
|
Return ExecMem, Address:=Number, Address+1:=Number
|
|
Address+=2
|
|
End Sub
|
|
Sub EmbLong()
|
|
Return ExecMem, Address:=Number, Address+1:=Number as Long
|
|
Address+=5
|
|
End Sub
|
|
Sub EmbByteLong()
|
|
Return ExecMem, Address:=Number, Address+1:=Number, Address+2:=Number as Long
|
|
Address+=6
|
|
End Sub
|
|
}
|
|
\\ Produce a lambda function with machine code inside
|
|
UnsingedAdd=MyAdd()
|
|
Print UnsingedAdd(12, 7), UnsingedAdd(500, 100)
|