- What type do you need (byte/word/dword/qword, check
TYPES.md) - Get operands (register/constant/variable)
- Pass operands
Example:
// MOV_<Op1Type><Op2Type>(<type>, <Op1>, <Op2>);
int val = 0;
MOV_RC(T_LONG, EAX, 32);
MOV_VR(T_LONG, val, EAX);
print("val = %d\n", val); // val = 32R- registerV- variableC- constant
TRASM does not support all instructions but we are trying to implement most of the most-needed instructions.
There's all of them:
(* - supported, - - not supported)
MOV <DST>, <SRC>
| DEST | REG | CONST | VAR |
|---|---|---|---|
| REG | * | * | * |
| VAR | * | * | * |
ADD <A>, <B>
Result in A.
| DEST | REG | CONST | VAR |
|---|---|---|---|
| REG | * | * | * |
| VAR | * | * | - |
SUB <A>, <B>
Result in B.
| DEST | REG | CONST | VAR |
|---|---|---|---|
| REG | * | * | * |
| VAR | * | * | - |
MUL <MULTIPLIER>
EAX = EAX * <MULTIPLIER>
Result in EAX.
| REG | CONST | VAR |
|---|---|---|
| * | * | * |
IMUL <A>, <B>
Result in A.
| DEST | REG | CONST | VAR |
|---|---|---|---|
| REG | * | * | * |
| VAR | - | - | - |
DIV <DIVISOR>
RAX/EAX/AX - dividend
REG64/REG32/REG16 - divisor
| REG | CONST | VAR |
|---|---|---|
| * | - | - |
Result in RAX/EAX/AX.
Remainder in RDX/EDX/DX.
IDIV <DIVISOR>
RAX/EAX/AX - dividend
REG64/REG32/REG16 - divisor
| REG | CONST | VAR |
|---|---|---|
| * | - | - |
Result in RAX/EAX/AX.
Remainder in RDX/EDX/DX.
FLD <SRC>
| REG | CONST | VAR |
|---|---|---|
| - | - | * |
FSTP <DST>
| REG | CONST | VAR |
|---|---|---|
| - | - | * |
FSQRT
FSIN
FCOS
FSINCOS
FABS
SHR <DST>, <SRC>
| DEST | REG | CONST | VAR |
|---|---|---|---|
| REG | * | * | - |
| VAR | - | * | - |
SHL <DST>, <SRC>
| DEST | REG | CONST | VAR |
|---|---|---|---|
| REG | * | * | - |
| VAR | - | * | - |
AND <A>, <B>
| DEST | REG | CONST | VAR |
|---|---|---|---|
| REG | * | * | * |
| VAR | * | * | * |
OR <A>, <B>
| DEST | REG | CONST | VAR |
|---|---|---|---|
| REG | * | * | * |
| VAR | * | * | * |
NOT <A>
| REG | CONST | VAR |
|---|---|---|
| * | - | * |
XOR <A>, <B>
| DEST | REG | CONST | VAR |
|---|---|---|---|
| REG | * | * | * |
| VAR | * | * | * |
CMP <A>, <B>
| 1ST OP | REG | CONST | VAR |
|---|---|---|---|
| REG | * | * | * |
| VAR | * | * | - |
SETBE <A>
| REG | VAR |
|---|---|
| * | - |
NOTE: accepts only 8-bit registers.
LEA <A>, <B>
| DEST | REG | VAR |
|---|---|---|
| REG | - | * |
| VAR | - | - |