-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathinstructions.txt
More file actions
105 lines (59 loc) · 2.93 KB
/
instructions.txt
File metadata and controls
105 lines (59 loc) · 2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
Instruçoes de 14 bits
Carga de Constante:
LDI R, K-> carrega o valor hexadecimal 0x0A no registrador r16
0001 RRR KKKKKKK
RRR: Endereço do registrador
KKKKKKK: Constante
Cópia de valor entre registradores:
A instrução MOV (Move) é usada para mover o valor de um registrador para outro.
MOV r16, r17 -> copia o valor do registrador r17 para o registrador r16
0010 XXX YYY ----
XXX: Endereço do registrador de destino
YYY: Endereço do registrador de origem
Soma de dois valores:
A instrução "ADD" (Addition) é usada para adicionar dois valores de registradores e armazenar o resultado em um registrador.
ADD r16, r17 -> adiciona o valor dos registradores r16 e r17 e armazena o resultado em r16
0011 RRR KKK ----
RRR: Endereço do registrador
KKK: Endereço do segundo registrador
Subtração de dois valores;
A instrução SUB (Subtraction) é usada para subtrair um valor de registrador de outro e armazenar o resultado em um registrador.
SUB r16, r17 -> subtrai o valor do registrador r17 do valor do registrador r16 e armazena o resultado em r16
0100 RRR KKK ----
RRR: Endereço do registrador
KKK: Endereço do segundo registrador
Desvio incondicional
A instrução JMP (Jump) é usada para fazer um salto incondicional para um endereço de memória específico.
JMP 0x0800 -> faz um salto para o endereço de memória 0x0800
1111 KKKKKKKKKK
KKKKKKKKKK: Endereço do salto
Desvio condicional
CP r16, r17 -> compara o valor dos registradores r16 e r17
OPCODE 0101 XXX YYY ----
BRNE (Branch if not Equal): faz um salto para o endereço de destino se os dois operandos comparados não forem iguais.
BRNE label -> salta para o label se os valores comparados não forem iguais
OPCODE: 0110 KKKKKKK ---
0110 -> OPCODE
KKKKKKK Branch Value
BREQ (Branch if Equal): faz um salto para o endereço de destino se os dois operandos comparados forem iguais.
BREQ label -> salta para o label se os valores comparados forem iguais
OPCODE: 0111 KKKKKKK ---
0111 -> OPCODE
KKKKKKK Branch Value
BRGE (Branch if Greater or Equal): faz um salto para o endereço de destino se o valor do primeiro operando for maior ou igual ao valor do segundo operando.
BRGE label -> salta para o label se o valor de r16 for maior ou igual ao valor de r17
OPCODE: 1000 KKKKKKK ---
1000 -> OPCODE
KKKKKKK Branch Value
Carga de dados da RAM
LD: Carregar dados, em r16, da RAM do endereço que está no registrador r17
LD r16, r17
OPCODE: 1001 RRR XXX ----
RRR: Endereço do registrador de destino
XXX: Ponteiro para o dado da memória
Carga de dados na RAM
ST: Carregar dados na RAM, no endereço apontado por r17, o conteudo de r16
ST r17, r16
OPCODE: 1010 XXX RRR ----
XXX: Ponteiro para o dado da memória
RRR: Endereço do registrador com o conteudo