Module 4Módulo 4

The instruction setEl repertorio de instrucciones

27 instructions, three formats, and their timing. 27 instrucciones, tres formatos, y su timing.

Santi Scagliusi, PhD

27 instructions, five families27 instrucciones, cinco familias

Data movementMovimiento ·2
MOV PUSH
ArithmeticAritmética ·6
ADD ADDC SUB SUBC CMP DADD
Logic & bitsLógica y bits ·5
AND BIC BIS BIT XOR
Shift & byteDespl. y byte ·4
RRC RRA SWPB SXT
Program flowControl de flujo ·10
CALL RETI JMP JEQ JNE JC JNC JN JGE JL
Click an instruction to see what it does. Plus 24 emulated aliases built from these.Pulsa una instrucción para ver qué hace. Y hay 24 alias emulados construidos con estas.
flags: * updated · – unchanged · 0/1 forced · Z set if result ≠ 0flags: * se actualiza · – sin cambio · 0/1 forzado · Z a 1 si resultado ≠ 0

Logic instructions work bit by bitLas instrucciones lógicas trabajan bit a bit

P1OUT
1
1
0
0
0
1
1
0
OR
1
0
0
1
0
0
1
0
#BIT7
#BIT4
#BIT1
=
1
1
0
1
0
1
1
0

Shifts and rotations move every bit one placeLos desplazamientos y rotaciones mueven cada bit una posición

1C
0
1
1
0
1
0
1
1
C

Two operations that act on whole bytesDos operaciones que actúan sobre bytes enteros

high bytebyte alto
low bytebyte bajo
1
0
1
0
0
0
1
1
1
0
0
1
0
1
1
0

DADD adds in decimal, not in binaryDADD suma en decimal, no en binario

DADD R5, R6 (R6 ← R5 + R6, BCD)

1
1
1
1
0001
7
0111
5
0101
8
1000
+
2
0010
4
0100
6
0110
9
1001
=
4
2
2
7

Each nibble is one decimal digit. DADD adds digit by digit and carries when a digit passes 9, like adding by hand: the hex reads as decimal.Cada nibble es un dígito decimal. DADD suma dígito a dígito y acarrea cuando un dígito pasa de 9, como sumar a mano: el hex se lee como decimal.

Format I: double-operandFormato I: doble operando

MOV · ADD · ADDC · SUB · SUBC · CMP · DADD · BIT · BIC · BIS · XOR · AND

15:12
11:8
7
6
5:4
3:0
Opcode
Rs
Ad
B/W
As
Rd
cyan = source (Rs)cian = fuente (Rs) green = destination (Rd)verde = destino (Rd) blue = mode (As · Ad)azul = modo (As · Ad)
+ optional word: source operand+ palabra extra opcional: fuente
+ optional word: destination operand+ palabra extra opcional: destino
Source and destination sit apartFuente y destino van separados

Source uses two bits (As) → four modes. Destination uses one (Ad) → two.La fuente usa dos bits (As) → cuatro modos. El destino, uno (Ad) → dos.

B/W

0 = word (16-bit). 1 = byte (8-bit). Word is the default: the bit stays 0.0 = palabra (16 bits). 1 = byte (8 bits). La palabra es lo normal: el bit queda a 0.

Format I, decodedFormato I, decodificado

Pick an opcodeElige un opcode
In memoryEn memoria
PC wordpalabra = 0x4592
Opcode
Rs
Ad
B/W
As
Rd

Format II: single-operandFormato II: un solo operando

RRC · RRA · PUSH · SWPB · CALL · RETI · SXT

15:7
6
5:4
3:0
Opcode
B/W
Ad
Rd
Optional extension word: destinationPalabra extra opcional: destino
CALL is permissiveCALL es permisiva

It accepts every addressing mode.Acepta todos los modos de direccionamiento.

RRA, RRC, SWPB, SXT can’t take an immediate destination.RRA, RRC, SWPB, SXT no admiten destino inmediato.

Format II, decodedFormato II, decodificado

Pick an opcodeElige un opcode
In memoryEn memoria
PC wordpalabra = 0x1105
Opcode
B/W
Ad
Rd

Format III: conditional jumpsFormato III: saltos condicionales

JMP · JEQ/JZ · JNE/JNZ · JC/JHS · JNC/JLO · JN · JGE · JL

15:13
12:10
9:0
Opcode
Cond
signed PC offset · 10 bitsoffset PC con signo · 10 bits

PCnew = PCold + 2 + offset × 2

Range: −511 to +512 words · always 2 cycles. Rango: −511 a +512 palabras · siempre 2 ciclos.

Jumps never touch the status flags.Los saltos nunca tocan las flags de estado.

Format III, decodedFormato III, decodificado

Pick a jumpElige un salto
In memoryEn memoria
PC = 0x2050 wordpalabra = 0x2402
Opcode
Cond
offset

How a jump's offset is computedCómo se calcula el offset de un salto

offset = (target − next PC) / 2

next PCPC siguiente = jump + 2 = 0xC102

target − next PC = 0xC10A − 0xC102 = +8 bytes

÷ 2 → offset = +4

0
0
0
0
0
0
0
1
0
0

sign bit = 0 → forwardbit de signo = 0 → hacia adelante

Emulated instructions are pure aliasesLas instrucciones emuladas son sólo alias

No new opcodes. The assembler rewrites them using a real instruction + a constant generator.Sin opcodes nuevos. El ensamblador los reescribe con una instrucción real + un generador de constantes.

9 of 24 · click any row9 de 24 · pulsa una fila
24 emulated forms · 27 real opcodes · same hardware.24 formas emuladas · 27 opcodes reales · el mismo hardware.
All 24 + cycle tables →Las 24 + tablas de ciclos →
Try it in the simulatorProbalo en el simulador M4 · Emulated instructions

Cycles come from addressing, not the mnemonicLos ciclos vienen del direccionamiento, no del mnemónico

Each memory access adds one cycle. Register operands add none.Cada acceso a memoria suma un ciclo. Los operandos en registro no suman ninguno.

MOV R5, R6
1
cycle · 1 word · registers onlyciclo · 1 palabra · sólo registros
MOV &var1, &var2
6
cycles · 3 words · memory both endsciclos · 3 palabras · memoria en ambos lados
.B and .W cost the same. Don’t pack data into bytes hoping for speed..B y .W cuestan lo mismo. No comprimas datos a bytes esperando ganar velocidad.

Three ideas to take with youTres ideas para llevarte

The whole instruction set, in three ideas.Todo el repertorio, en tres ideas.

27 + 24

Real opcodes, then aliases.Opcodes reales, luego alias.

27 core instructions do the work. The 24 emulated forms are just names the assembler rewrites. 27 instrucciones reales hacen el trabajo. Las 24 emuladas son sólo nombres que el ensamblador reescribe.

1 → 6

Addressing is cost.El direccionamiento es coste.

Register-only takes one cycle. Each memory access adds another. Solo registros: 1 ciclo. Cada acceso a memoria suma otro.

I · II · III

Three formats, full ISA.Tres formatos, toda la ISA.

Double-operand, single-operand, conditional jump. All 27 instructions fit here. Doble operando, un operando, salto condicional. Las 27 instrucciones caben aquí.