8008 ISA
O 8008 ISA (ou MCS-8 ISA) foi uma arquitetura de conjunto de instruções introduzida pela Intel em 1972 e foi usada no Intel 8008 e Intel 8008-1 microprocessadores.
Este ISA tem um barramento de dados e endereços de 8-bits. Essa arquitetura incluía sete registradores de 8-bits, 48 instruções e capacidade de interrupção.
Registradores
O 8008 tinha sete registros de rascunho. Alguns deles tinham recursos adicionais - A é usado como um registro de acumulador. Os registros H e L são palavras de ordem superior e inferior de um endereço de 14 bits.
Registrador | Tam. | Propósito |
---|---|---|
A | 8 bit | Accumulator |
B | 8 bit | GP |
C | 8 bit | GP |
D | 8 bit | GP |
E | 8 bit | GP |
H | 8 bit | High-order word |
L | 8 bit | Low-order word |
ISA
Os dados no 8008 são sempre armazenados em um inteiro binário de 8-bits.
- Data WordD7 D6 D5 D4 D3 D2 D1 D0
As instruções podem ter 1-3 bytes dependendo da operação. As instruções multi-byte devem ser armazenadas em ordem sucessiva na memória. As operações típicas que envolvem operações de registro-registro, como operações aritméticas e lógicas, requerem apenas um byte e assumem a seguinte forma:
- 1-Byte InstD7 D6 D5 D4 D3 D2 D1 D0OPCode
As instruções que envolvem um valor imediato têm 2 bytes. A primeira mordida armazena o opcode e o segundo byte armazena o valor de 8-bits.
- 2-Byte InstD7 D6 D5 D4 D3 D2 D1 D0D7 D6 D5 D4 D3 D2 D1 D0OPCodeImm Value
As instruções que envolvem um endereço (como CALL e JUMP) requerem um endereço de 14 bits. Isso é feito por meio de uma instrução de 3 bytes em que o primeiro byte é o opcode, o segundo byte é a palavra de ordem inferior e o terceiro byte é a palavra de ordem superior. Observe que os 2 MSBs na palavra de alta ordem são ignoradas (Don't care condition).
- 3-Byte InstD7 D6 D5 D4 D3 D2 D1 D0X7 X6 D5 D4 D3 D2 D1 D0D7 D6 D5 D4 D3 D2 D1 D0OPCodeHigh-Order AddrsLow-Order Addrs
Listagem
O ISA 8008 tem 48 instruções divididas em vários grupos:
- Instruções de registro de índice
- Instruções do grupo acumulador
- Instruções de contador e controle de pilha
- Instruções de entrada / saída
- Instruções da máquina
Em 1972, a Intel introduziu seu primeiro conjunto de mnemônicos para suas instruções. Este conjunto original consiste em três caracteres, o que significa que pode ser facilmente codificado em uma tabela de pesquisa. Alguns anos depois, quando eles lançaram seu Intel 8008 e seu conjunto de instruções, eles também reformularam os mnemônicos 8008 para corresponder aos de 8080 mais de perto. Os mnemônicos mais recentes lembram uma versão primitiva dos mnemônicos x86 modernos. Como os programas 8008 podem ser encontrados usando mnemônicos de incômodo, os mnemônicos "antigos" e "novos" estão listados abaixo. Ambos os mnemônicos resultam em valores binários idênticos.
Mnemonic (old) | Mnemonic (new) | Len | Opcode | Action |
---|---|---|---|---|
Index Register Instructions Load instructions do not affect any flag. The Inc and Dec instructions affect all flags except carry. | ||||
LRdRs | MOV Rd, Rs | 1 | 11 DDD SSS2 | Rd = Rs |
LRdM | MOV Rd, M | 1 | 11 DDD 1112 | Rd = Mem |
LMRs | MOV M, Rs | 1 | 11 111 SSS2 | Mem = Rs |
LRdI | MVI Rd, Imm | 2 | 00 DDD 1102 | Rd = Immed Value |
LMI | MVI M, Imm | 2 | 00 111 1102 | Mem = Immed Value |
INRd | INR Rd | 1 | 00 DDD 0002 | Rd = Rd + 1 (Rd | A)
DCRd | DCR Rd | 1 | 00 DDD 0012 | Rd = Rd - 1 (Rd | A)
Accumulator Group Instructions The result of an ALU instruction affect all flags. The rotation instructions only affect the carry flag. | ||||
ADRs | ADD Rs | 1 | 10 000 SSS2 | A = A + Rs |
ADM | ADD M | 1 | 10 000 1112 | A = A + Mem |
ADI | ADI | 2 | 00 000 1002 | A = A + Immed Value |
ACRs | ADC Rs | 1 | 10 001 SSS2 | A = Carry + Rs |
ACM | ADC M | 1 | 10 001 1112 | A = Carry + Mem |
ACI | ACI | 2 | 00 001 1002 | A = Carry + Immed Value |
SURs | SUB Rs | 1 | 10 010 SSS2 | A = A - Rs |
SUM | SUB M | 1 | 10 010 1112 | A = A - Mem |
SUI | SUI | 2 | 00 010 1002 | A = A - Immed Value |
SBRs | SBB Rs | 1 | 10 011 SSS2 | A = A - (Carry + Rs) |
SBM | SBB M | 1 | 10 011 1112 | A = A - (Carry + Mem) |
SBI | SCI | 2 | 00 011 1002 | A = A - (Carry + Immed Value) |
NDRs | ANA Rs | 1 | 10 100 SSS2 | A = A | Rs
NDM | ANA M | 1 | 10 100 1112 | A = A | Mem
NDI | ANI | 2 | 00 100 1002 | A = A | Immed Value
XRRs | XRA Rs | 1 | 10 101 SSS2 | A = A | Rs
XRM | XRA M | 1 | 10 101 1112 | A = A | Mem
XRI | XRI | 2 | 00 101 1002 | A = A | Immed Value
ORRs | ORA Rs | 1 | 10 110 SSS2 | A = A | Rs
ORM | ORA M | 1 | 10 110 1112 | A = A | Mem
ORI | ORI | 2 | 00 110 1002 | A = A | Immed Value
CRRs | CMP Rs | 1 | 10 111 SSS2 | Compare A with Rs, set flags |
CRM | CMP M | 1 | 10 111 1112 | Compare A with Mem, set flags |
CRI | CPI | 2 | 00 111 1002 | Compare A with Immed Value, set flags |
RLC | RLC | 1 | 00 000 0102 | Rotate A Left Once |
RRC | RRC | 1 | 00 001 0102 | Rotate A Right Once |
RAL | RAL | 1 | 00 010 0102 | Rotate A Left Through Carry Once |
RAR | RAR | 1 | 00 011 0102 | Rotate A Right Through Carry Once |
Program Counter and Stack Control Instructions | ||||
JMP | JMP | 3 | 01 XXX 1002 | Unconditional Jump to immed address |
JFC | JNC | 3 | 01 000 0002 | If carry = 0, jump to immed address |
JFZ | JNZ | 3 | 01 001 0002 | If result | 0, jump to immed address
JFS | JP | 3 | 01 010 0002 | If sign = 0 (positive), jump to immed address |
JFP | JPO | 3 | 01 011 0002 | If parity = 0 (odd), jump to immed address |
JTC | JC | 3 | 01 100 0002 | If carry = 1, jump to immed address |
JTZ | JZ | 3 | 01 101 0002 | If result = 0, jump to immed address |
JTS | JM | 3 | 01 110 0002 | If sign = 1 (negative), jump to immed address |
JTP | JPE | 3 | 01 111 0002 | If parity = 1 (even), jump to immed address |
CAL | CALL | 3 | 01 XXX 1102 | Save current address onto the stack and jump to immed address |
CFC | CNC | 3 | 01 000 0102 | If carry = 0, save current address and jump to immed address |
CFZ | CNZ | 3 | 01 001 0102 | If result | 0, save current address and jump to immed address
CFS | CP | 3 | 01 010 0102 | If sign = 0 (positive), save current address and jump to immed address |
CFP | CPO | 3 | 01 011 0102 | If parity = 0 (odd), save current address and jump to immed address |
CTC | CC | 3 | 01 100 0102 | If carry = 1, save current address and jump to immed address |
CTZ | CZ | 3 | 01 101 0102 | If result = 0, save current address and jump to immed address |
CTS | CM | 3 | 01 110 0102 | If sign = 1 (negative), save current address and jump to immed address |
CTP | CPE | 3 | 01 111 0102 | If parity = 1 (even), save current address and jump to immed address |
RET | RET | 1 | 00 XXX 1112 | Unconditionally return, down one stack level |
RFC | RNC | 1 | 00 000 0112 | If carry = 0, return, down one stack level |
RFZ | RNZ | 1 | 00 001 0112 | If result | 0, return, down one stack level
RFS | RP | 1 | 00 010 0112 | If sign = 0 (positive), return, down one stack level |
RFP | RPO | 1 | 00 011 0112 | If parity = 0 (odd), return, down one stack level |
RTC | RC | 1 | 00 100 0112 | If carry = 1, return, down one stack level |
RTZ | RZ | 1 | 00 101 0112 | If result = 0, return, down one stack level |
RTS | RM | 1 | 00 110 0112 | If sign = 1 (negative), return, down one stack level |
RTP | RPE | 1 | 00 111 0112 | If parity = 1 (even), return, down one stack level |
RST | RST | 1 | 00 AAA 1012 | Call the subroutine at memory AAA000 (up one stack level) |
Input/Output Instructions | ||||
INP | IN | 1 | 01 00M MM12 | A = PORT[MMM] |
OUT | OUT | 1 | 01 RRM MM12 | PORT[RRMMM] = A (RR | 00)
Machine Instructions | ||||
HLT | HLT | 1 | 00 000 00X2 | Enter STOPPED state; remain there until interrupted |
HLT | HLT | 1 | 11 111 1112 | Enter STOPPED state; remain there until interrupted |