-
Notifications
You must be signed in to change notification settings - Fork 0
LEGv7
De LEGv7 Pinlky instructieset is een kleine subset van de ARMv7 16-bit Thumb instructieset. Programma's geschreven in LEGv7 Pinky kunnen geassembleerd worden in de STM32Cube IDE met de daarin aanwezige GNU assembler en uitgevoerd worden op een STM32.
Alle instructie in deze instructieset eindigen op .N dit zorgt ervoor dat de assembler een foutmelding geeft als de instructie niet in 16 bits past.
De instructie |CMP.N| en alle instructies die eindigen op |S.N| werken de flags in het CPSR register bij.
De overige instructies
Alleen de registers R0 t/m R7 en SP, LR, PC en CPSR zijn bruikbaar in de ARMv7 16-bit Thumb instructieset. Regsisters R8 t/m R12 kunnen dus niet gebruikt worden. De encoding van de ARMv7 16-bit Thumb instructieset kun je vinden op p. 129 van de Arm v7-M Architecture Reference Manual: https://documentation-service.arm.com/static/606dc36485368c4c2b1bf62f#page=129.
De LEGv7 Pinlky instructieset bevat 32 instructies ingedeeld in de volgende instructiegroepen:
-
ADD
-
ADDS.N <Rd>,<Rn>,<Rm>Add (register) -
ADDS.N <Rd>,<Rn>,#<imm3>Add (3-bit immediate) -
ADDS.N <Rdn>,#<imm8>Add (8-bit immediate)
-
-
SUB
-
SUBS.N <Rd>,<Rn>,<Rm>Subtract (register) -
SUBS.N <Rd>,<Rn>,#<imm3>Subtract (3-bit immediate) -
SUBS.N <Rdn>,#<imm8>Subtract (8-bit immediate)
-
-
ANDS.N <Rdn>,<Rm>Bitwise AND -
ORRS.N <Rdn>,<Rm>Bitwise OR -
EORS.N <Rdn>,<Rm>Bitwise EXOR
-
LSLS.N <Rd>,<Rm>,#<imm5>Logical Shift Left (5-bit immediate) -
LSRS.N <Rd>,<Rm>,#<imm5>Logical Shift Right (5-bit immediate)
-
MOVS.N <Rd>,<Rm>Move (register) -
MOVS.N <Rd>,#<imm8>Move (8-bit immediate)
-
CBZ.N <Rn>,<label>Compare and Branch on Zero -
CBNZ.N <Rn>,<label>Compare and Branch on Non-Zero
-
CMP.N <Rn>,<Rm>Compare (register) -
CMP.N <Rn>,#<imm8>Compare (8-bit immediate) -
B<c>.N <label>Branch<c>= conditie:-
EQEqual, Z == 1 -
NENot Equal, Z == 0 -
CS (HS)Carry Set (unsigned Higher or Same), C == 1 -
CC (LO)Carry Clear (unsigned LOwer), C == 0 -
MIMInus, N == 1 -
PLPLus, N == 0 -
VSOverflow Set, V == 1 -
VCOverflow Clear, V == 0 -
HIunsigned HIgher, C == 1 and Z == 0 -
LSunsigned Lower or Same, C == 0 or Z == 1 -
GEsigned Greater than or Equal, N == V -
LTsigned Less Than, N != V -
GTsigned Greater Than, Z == 0 and N == V -
LEsigned Less than or Equal, Z == 1 or N != V -
None (AL)Always (unconditional)
-
-
LDR.N <Rt>,[<Rn>,<Rm>]Load Register (register) -
LDR.N <Rt>,[<Rn>{,#<imm5>}]Load Register (5-bit immediate) -
LDR.N <Rt>,<label>Load Register (literal) -
STR.N <Rt>,[<Rn>,<Rm>]Store Register (register) -
STR.N <Rt>,[<Rn>{,#<imm5>}]Store Register (5-bit immediate)
-
NOP.NNo Operation
-
BLX.N <Rm>Branch with Link and Exchange
-
PUSH.N {<register list>}Push Multiple Registers -
POP.N {<register list>}Pop Multiple Registers -
LDR.N <Rt>,[SP,#<imm8>]Load Register (8-bit immediate) -
STR.N <Rt>,[SP,#<imm8>]Store Register (8-bit immediate) -
SUB.N SP,SP,#<imm7>Subtract (SP minus 7-bit immediate) -
ADD.N SP,SP,#<imm7>ADD (SP plus 7-bit immediate)