Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 51

Arquitetura de Computadores (DCA0104)

Assembly PIC Midrange Family


Diogo Pinheiro Fernandes Pedrosa diogo@dca.ufrn.br F!" # C$ # DCA "ata%& !".

Organizao Interna

Instrues

Instrues

Instrues

Instrues

c%rf f

'impa o conte(do no f da mem)ria (o endere*o de+e ser +,%ido). Adiciona o conte(do do registrador . ao conte(do presente no endere*o f. / %oca% onde o resu%tado ser, arma0enado +ai depender do bit d. /s bits 1& C e DC do registrador de status podem ser afetados.

add-f f& d

Instrues

add%- k

Adiciona o +a%or de uma constante k& de 2 bits& no registrador de traba%ho. $orna o bit b da pa%a+ra de 2 bits arma0enada no endere*o f igua% a 0 %)gico. Des+ia a e3ecu*4o das instru*5es para a instru*4o assina%ada com a etiqueta k.

bcf f& b

goto k

Instrues

mo+-f f

6o+e o conte(do presente no registrador . para o endere*o de mem)ria f. 6o+e o conte(do presente no endere*o da mem)ria f para o registrador . (se d 7 0) ou para o pr)prio endere*o f (se d 7 1). 6o+e o +a%or k (2 bits) para o registrador ..

mo+f f& d

mo+%- k

Instrues

6ode%o...

Instrues

Instrues
fib0 equ 20 fib equ 2 fib2 equ 22 fibtem! equ 2" org 00 c%rf fib0 mo+%- 1 mo+-f fib1 mo+-f fib8 for-ard mo+f fib1& 0 add-f fib8& 0 mo+-f fibtemp mo+f fib1& 0 mo+-f fib0 mo+f fib8& 0 mo+-f fib1 mo+f fibtemp& 0 mo+-f fib8 goto for-ard end

so de etiquetas 9fib09& 9fib19& etc.& para referenciar endere*os de mem)ria. Foram esco%hidos os endere*os de 80 at: 8; (em he3adecima%).

<nforma ao montador onde o programa de+e ser arma0enado. "este caso& o endere*o inicia% : 00.

Instrues
fib0 equ 80 fib1 equ 81 fib8 equ 88 fibtemp equ 8; org 00 #lrf fib0 mo$l% mo$%f fib mo$%f fib2 for%ard mo$f fib & 0 add%f fib2& 0 mo$%f fibtem! mo+f fib1& 0 mo+-f fib0 mo+f fib8& 0 mo+-f fib1 mo+f fibtemp& 0 mo+-f fib8 goto for-ard end

<nicia a s:rie de Fibonacci com os endere*os citados= fib0 > 0 fib1 > 1 fib8 > 1 (fib8 7 fib1 ? fib0)

6o+e o conte(do de fib1 para o registrador de traba%ho. @oma o conte(do de fib8 com o conte(do do registrador de traba%ho. 6o+e o conte(do do registrador de traba%ho para o endere*o 9tempor,rio9. Asses s4o os procedimentos para fa0er fib1 ? fib8

Instrues
fib0 equ 80 fib1 equ 81 fib8 equ 88 fibtemp equ 8; org 00 c%rf fib0 mo+%- 1 mo+-f fib1 mo+-f fib8 for-ard mo+f fib1& 0 add-f fib8& 0 mo+-f fibtemp mo$f fib & 0 mo$%f fib0 mo$f fib2& 0 mo$%f fib mo$f fibtem!& 0 mo$%f fib2 goto for%ard end

6o+e no+amente o conte(do de fib1 para o registrador de traba%ho. 6o+e o conte(do do registrador de traba%ho para fib0 (imp%ementa*4o em assembly de fib0 > fib1). 6o+e o conte(do de fib8 para o registrador de traba%ho. 6o+e o conte(do do registrador de traba%ho para fib1 (imp%ementa*4o em assembly de fib1 > fib8). 6o+e no+amente o conte(do de fibtemp (que tem a soma dos n(meros anteriores da s:rie) para o registrador de traba%ho. 6o+e o conte(do do registrador de traba%ho para fib8 (imp%ementa*4o em assembly de fib8 > fibtemp). @ustenta*4o do %a*o com gotoB

'este

Para quem tem o 6P'AC...

'er as se*5es 4.4 at: 4.D (capEtu%o 4 do %i+ro te3to Designing Embedded Systems with PIC Microcontrollers) e reprodu0ir a simu%a*4o do programa da s:rie de Fibonacci.

Instrues

Programa e3emp%o para transferFncia de dados inc%ude Gp1Hf24.incG para os portos...


status equ 030; porta equ 030I trisa equ 030I portb equ 030H trisb equ 030H org 00 start bsf status& I mo+%- b9000110009 mo+-f trisa mo+%- 00 mo+-f trisb bcf status& I c%rf porta %oop mo+f porta& 0 mo+-f portb goto %oop end

bsf f& d
@eta o bit d do conte(do arma0enado em f com +a%or %)gico 1.

bcf f& d
@eta o bit d do conte(do arma0enado em f com +a%or %)gico 0.

(ais um teste)))

!eprodu0ir este programa em assemb%J em um simu%ador (Proteus& 6u%tisim& Ktech%ab&...). Adicionar bot5es para os pinos de entrada no porto A e %eds nos pinos do porto b.

Programas em Assembly

<deias para programar me%hor=

Diagramas de estado.

Abstrato L mais difEci% de tradu0ir diretamente para o assemb%J.

Programas em Assembly

<deias para programar me%hor=

Astruturar o programa como f%u3ograma.

Programas em Assembly

Decis5es=

<nstru*5es que testam um bit em particu%ar e& dependendo do resu%tado do teste& ou o programa continua sendo e3ecutado norma%mente ou h, um des+io de e3ecu*4o das instru*5es.
btfsc f& b btfss f& b
$esta o bit b do conte(do arma0enado no endere*o f. @e esse bit for 1& ent4o h, o 9sa%to9 de apenas uma instru*4o.

$esta o bit b do conte(do arma0enado no endere*o f. @e esse bit for 0& ent4o h, o 9sa%to9 de apenas uma instru*4o.

Programas em Assembly

A3emp%o=

Programas em Assembly

A3emp%o=

Programas em Assembly

6ais instru*5es (aritm:ticas)=


addwf e addlw subwf e sublw incf e decf
6odificam os trFs bits menos significati+os do registrador de status (1& DC e C).

Programas em Assembly

Programas em Assembly

Programas em Assembly

(ais testes)))

!eprodu0ir e simu%ar esse programa assemb%J no 6P'AC.

*ubrotinas

<ndica*5es para uso=


C)digo mais organi0ado. so constante de um mesmo conMunto de instru*5es.

*ubrotinas

<nstru*5es P<C 1HF=

call e return
O+*), a pi%ha somente tem 2 posi*5es.

"ecessita de etiqueta (%abe% de 2 bits) Nuando call : uti%i0ada& o endere*o da instru*4o que +em %ogo ap)s call (ou seMa& o conte(do do PC # contador do programa) : arma0enada na pi%ha. / endere*o da primeira instru*4o da subrotina : gra+ada no PC. Nuando a subrotina : fina%i0ada por return& o conte(do do topo da pi%ha (endere*o da instru*4o que +em ap)s call) : 9desempi%hado9 e arma0enado no PC. As instru*5es call e return de+em sempre serem usadas Muntas.

*ubrotinas

*ubrotinas

-erando atraso de tem!o

@ubrotinas podem ser usadas para gerar delays... <deia=

sar uma certa posi*4o da mem)ria para arma0enar um +a%or que ser+ir, como 9contador9 # +a%or decrementado& em um %a*o& at: chegar a 0ero. / tempo gasto para isso depende de= do +a%or inicia% arma0enado na mem)ria e do tempo gasto no %a*o.

-erando atraso de tem!o

Para que o delay seMa preciso...

@aber frequFncia do P<C (usando crista%& mais est,+e%).

Atrasos n4o t4o precisos podem ser gerados usando outros osci%adores (circuito !C e3terno& por e3emp%o).

'embrete= cada cic%o de instru*4o gasta 4 cic%os do osci%ador.

-erando atraso de tem!o

A3emp%o...

Obs), so%u*4o apropriada para atrasos pequenos (ordem de dezenas de mi%issegundos).

decfs0 f& d
Decrementa o conte(do presente no endere*o f. @e esse conte(do for 0ero& sa%taOse uma instru*4o. / bit d direciona para onde o resu%tado do decremento ser, arma0enado.

nop L no operation (sem e3ecu*4o na 'A& mas gastaOse os quatro cic%os de


clock)

-erando atraso de tem!o

Para obter atrasos maiores (da ordem de centenas de mi%issegundos)...

Co%ocar %a*o de atraso dentro de outro %a*o de atrasoB

-erando atraso de tem!o

-erando atraso de tem!o

Instrues ./gi#as
and-f f& d
A"D entre conte(do de . e conte(do de f.

ior-f f& d
/! inc%usi+o entre . e f.

3or-f f& d
/! e3c%usi+o entre . e f.

and-% k
A"D entre conte(do de . e k.

ior%- k
/! inc%usi+o entre . e +a%or %itera% k.

3or%- k
/! e3c%usi+o entre . e +a%or k.

r%f f& d
Des%ocamento de 1 bit para esquerda

rrf f& d
Des%ocamento de 1 bit para direita.

Instrues ./gi#as

Instrues ./gi#as

Instrues ./gi#as

Instrues ./gi#as

'abelas Look-up

Consiste em um b%oco de dados que : arma0enado na mem)ria do programa& e que : acessado e uti%i0ado por e%e. P o e%emento uti%i0ado para a inser*4o de um padr4o de +a%ores em a%gum endere*o ou registrador.

'abelas Look-up

<deia gera% L subrotinaB

'abelas Look-up

@omente duas instru*5es na subrotina s4o e3ecutadas.

addwf pcl L soma o conte(do do registrador . ao pc% (bJte menos significati+o do PC). retwl L instru*4o de retorno de subrotina. !etorna o +a%or %itera% indicado ao registrador ..

Qer e3emp%oB

'abelas Look-up

'abelas Look-up

'abelas Look-up

'abelas Look-up

'abelas Look-up

Dica= podeOse usar um 9and9 para 9%impar9 a +ari,+e% pointer...

Com!le0idade dos Programas

Direti+a Rinc%ude= cada arqui+o S.incT possui +,rias defini*5es de endere*os de mem)ria.

Com!le0idade dos Programas

6acros= recurso uti%i0ado pe%o programador para agrupar instru*5es e& com isso& obter mais f%e3ibi%idade na escrita dos programas.

Você também pode gostar