MOV instructions are copying data between registers in CPU.
All MOV instructions are taking up a single word, and need one clock cycle to fetch and one to execute.
When multi-word flag is set, several consecutive registers can have their contents copied to other group of consecutive registers with one instruction. In this case, there is one clock cycle for fetch, and a number of clock cycles to execute, corresponding to the number of registers moved.
Regular Move (MOV)
There are 2 register files in CPU: General Purpose Registers (GPR) and Memory Pointers (MP), and therefore there are 4 types of register transfers: GPR -> GPR, GPR -> MP, MP -> GPR and MP -> MP.
Instruction bits Mnemonic: F E D C B A 9 8 7 6 5 4 3 2 1 0 MOV rB rA 0 0 1 1 0 d d d s s s 0 0 x x x move GPR to other GPR MOV mpB mpA 0 0 1 1 1 d d d s s s 1 0 x x x move MP to other MP MOV mpB rA 0 0 1 1 1 d d d s s s 0 0 x x x move GPR A to MP B MOV rB mpA 0 0 1 1 0 d d d s s s 1 0 x x x move MP A to GPR B s - bits of source register address(A), where data is coming from d - bits of destination register address(B), where data is written to x - "don't care" bits - have no effect on result A, B - numbers in range 0-7, they are register addresses
Both GPR and MP are numbered 0 through 7, so there are 2 sets of 8 registers. To disambiguate between them, bits B and 4 are used for destination and source respectively. If disambiguating bit is 0, the GPR is addressed, if it is 1, then it is MemPointer.
Special Move (MOVs)
Bit 3 indicates register transfers to additional registers, such as MDB, IVB, and SR.
Bit 2 indicates transfer direction -- 0 = read special reg, 1 = write special reg.
Bits 0 and 1 are used as address of special registers.
Instruction bits Mnemonic: F E D C B A 9 8 7 6 5 4 3 2 1 0 MOVs rB SR 0 0 1 1 d d d d x x x x 1 0 0 1 move SR to rA MOVs SR rA 0 0 1 1 x x x x s s s s 1 1 0 1 move rA to SR MOVs rB MDB 0 0 1 1 d d d d x x x x 1 0 1 0 move MDB to rA MOVs MDB rA 0 0 1 1 x x x x s s s s 1 1 1 0 move rA to MDB MOVs rB IVB* 0 0 1 1 d d d d x x x x 1 0 1 1 -- cannot read IBV MOVs IVB rA 0 0 1 1 x x x x s s s s 1 1 1 1 move rA to SR s - bits of source register address(A), where data is coming from d - bits of destination register address(B), where data is written to x - "don't care" bits - have no effect on result A, B - numbers in range 0-7, they are register addresses
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.