Terminologia Básica
.data
corresponde à zona de dados variáveis;.word
corresponde a 64 bits ou 8 bytes;.code
inicia a secção de código;.halt
finaliza a secção de código;l
corresponde a "load", carrega os dados em questão;s
corresponde a "store", guarda os dados em questâo;d
"double word", relativo a 64 bits;add
corresponde à "soma";i
é uma constante, relativa a imediato; sua utilidade vem quando lidamos com constantes ao invés de registros;
- Converter o número para binário:
- Separar o número binário em grupos de quatro da direita para a esquerda e converter cada grupo ao seu hexadecimal adequado;
- Juntar os resultados da esquerda para a direita a fim de formar o algarismo em hexadecimal.
.data
A: .word 10
B: .word 8
C: .word 0
; acima, realiza-se a declaração de variáveis em 64BITS
.text
main:
ld r4,A(r0)
ld r5,B(r0)
dadd r3,r4,r5
sd r3,C(r0)
halt
Primeiramente, lembre-se do mais importante: Por que colocamos r0
? PORQUE SIM! Sigamos.
Vamos analisar as linhas subsequentes à main
:
ld
(load/carregar/<-) emr4
o valor correspondente à variávelA
;ld
(load/carregar) emr5
o valor correspondente à variávelB
;dadd
(soma) emr3
os valores der4
er5
, ou seja,r3 = A+B = 10+8
;sd
(store/guardar->) emC
o valor der3
.
.data
A: .word 10
B: .word 8
Z: .word 2
C: .word 0
.text
main:
ld r4,A(r0)
ld r5,B(r0)
ld r6,Z(r0)
dadd r3,r4,r5
dadd r3,r3,r6
sd r3,C(r0)
halt
Vamos analisar as linhas subsequentes à main
:
ld
(load/carregar/<-) emr4
o valor correspondente à variávelA
;ld
(load/carregar) emr5
o valor correspondente à variávelB
;ld
(load/carregar) emr6
o valor correspondente à variávelZ
;dadd
(soma) emr3
os valores der4
er5
, ou seja,r3 = A+B = 10+8
; importante ressaltar quer3
agora representa a soma deA+B
;dadd
(soma) emr3
os valores der3
er6
; ou seja,r3 = (A+B)+Z
;sd
(store/guardar->) emC
o valor der3
.
.data
A: .word 10
B: .word 8
.code
ld r4,A(r0)
ld r5,B(r0)
sd r4,B(r0)
sd r5,A(r0)
halt
- Simplesmente atribui-se o valor de uma variável ao registro oposto com
sd
; 1.1. Alternativamente, poder-se-ía utilizardadd
a fim de atribuir diretamente ao registro ao assemelhar-se a uma soma comr0
, da seguinte forma:
[...]
dadd r3,r4,r0
dadd r4,r5,r0
dadd r5,r3,r0
[...]
CR
= Unidade controle; quandoCR=1
, aquilo que foi guardado no painel de dados é mostrado; É preciso, ao final do código, usar-se desd r10(r1)
(assumindo que atribuímos CR à r1).DR
= Unidade de armazenamento de dados. É preciso usar-se de `
.data
A: .word 10
B: .word 8
C: .word 0
CR: .word32 0x10000 ; Control Register tem o endereço 10000
DR: .word32 0x10008 ; Data Register tem o endereço 10008
.code
lwu r1,CR(r0) ; end. mem. do Control Register em r1
lwu r2,DR(r0) ; end. mem. do Data Register em r2
daddi r10,r0,8 ; Código 8 (código para ler dados de teclado)
sd r10,(r1) ; Chama rotina para a introdução de dados de teclado
ld r4,(r2) ; Obtem 1º numero do teclado
ld r4,A(r0)
sd r10,(r1) ; Chama rotina para a introdução de dados do teclado
ld r5,(r2) ; Obtem 2º numero do teclado
ld r5,B(r0)
dadd r3,r4,r5
sd r3,C(r0) ; Colocar a soma que está em r3 na variável C
sd r3,(r2) ; Valor a mostrar é colocado no Data Register
daddi r10,r0,1 ; Código 1
sd r10,(r1) ; Chama rotina para mostrar soma
halt