8008 ISA

De Augusto Baffa Wiki
Ir para navegação Ir para pesquisar

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 Word
D7 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 Inst
D7 D6 D5 D4 D3 D2 D1 D0
OPCode

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 Inst
D7 D6 D5 D4 D3 D2 D1 D0
D7 D6 D5 D4 D3 D2 D1 D0
OPCode
Imm 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 Inst
D7 D6 D5 D4 D3 D2 D1 D0
X7 X6 D5 D4 D3 D2 D1 D0
D7 D6 D5 D4 D3 D2 D1 D0
OPCode
High-Order Addrs
Low-Order Addrs

Listagem

O ISA 8008 tem 48 instruções divididas em vários grupos:

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 [math]\neq[/math] A)
DCRd DCR Rd 1 00 DDD 0012 Rd = Rd - 1 (Rd [math]\neq[/math] 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 [math]\land[/math] Rs
NDM ANA M 1 10 100 1112 A = A [math]\land[/math] Mem
NDI ANI 2 00 100 1002 A = A [math]\land[/math] Immed Value
XRRs XRA Rs 1 10 101 SSS2 A = A [math]\oplus[/math] Rs
XRM XRA M 1 10 101 1112 A = A [math]\oplus[/math] Mem
XRI XRI 2 00 101 1002 A = A [math]\oplus[/math] Immed Value
ORRs ORA Rs 1 10 110 SSS2 A = A [math]\lor[/math] Rs
ORM ORA M 1 10 110 1112 A = A [math]\lor[/math] Mem
ORI ORI 2 00 110 1002 A = A [math]\lor[/math] 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 [math]\neq[/math] 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 [math]\neq[/math] 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 [math]\neq[/math] 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 [math]\neq[/math] 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

Veja Também