Códigos para ordenar vetor em assembly - MSP430

August 23, 2017 | Author: Taís Laurindo | Category: Array Data Structure, Computer Architecture, Office Equipment, Software Engineering, Data
Share Embed Donate


Short Description

Exemplos de códigos em assembly para o microcontrolador MSP430, para ordenar vetores....

Description

Taís Laurindo Pereira 12/0042223

Relatório 2 – Ordenar um vetor

Questão 1 Programa 6 ;------------------------------------------------------------------------------; MSP430 Assembler Code Template for use with TI Code Composer Studio ; ; ;------------------------------------------------------------------------------.cdecls C,LIST,"msp430.h" ; Include device header file ;------------------------------------------------------------------------------.def RESET ; Export program entry-point to ; make it known to linker. ;------------------------------------------------------------------------------.text ; Assemble into program memory. .retain ; Override ELF conditional linking ; and retain current section. .retainrefs ; And retain any sections that have ; references to current section. ;------------------------------------------------------------------------------RESET mov.w #__STACK_END,SP ; Initialize stackpointer StopWDT mov.w #WDTPW|WDTHOLD,&WDTCTL ; Stop watchdog timer

;------------------------------------------------------------------------------; Main loop here ;------------------------------------------------------------------------------mov call jmp nop

#vetor,R5 #ORD $

ORD: mov.b @R5+, R8 (contador) e incrementa R5 dec R8 mov #0, R9 elemento é menor loop: mov.b posição em questão a R6 mov.b posição a R7 cmp jn swap cont1: nop inc

;inicialização de R5 ;chama a subrotina ;travar execução ;exigido pelo montador ;equivale a mov #0h,#0h ;atribui o tamanho de R5 para R8

;equivale a sub #1,R8 ;zera R9 ;neste loop, verifica-se qual

0(R5), R6

;atribui o elemento da primeira

1(R5), R7

;atribui o elemento da segunda

R6, R7 swap

;R7-R6 ;caso dê negativo, R6>R7, pula para

R5

;equivale a mov #0h,#0h ;avança no vetor

dec

R8

jnz cmp mov jnz

loop #0, R9 #vetor, R5 ORD

;equivale a add #1,R5 ;decrementa o contador ;equivale a sub #1,R8 ;se não atingir 0, vai para o loop ;verifica se R9 é maior que 0 ;inicializa R5 com o vetor ;se o resultado de cmp não for 0, vai

para a subrotina ret ;equivale a mov @SP+,PC ;nesta parte, troca-se os elementos de posição swap: mov.b R6, 1(R5) 1 de R5 em questão mov.b R7, 0(R5) 0 de R5 inc R9 jmp

cont1

;move o elemento de R6 para a posição ;move o elemento de R7 para a posição ;incrementa R9 ;equivale a add #1,R9 ;vai para a label cont1

;------------------------------------------------------------------------------; Segmento de dados inicializados (0x2400) ;------------------------------------------------------------------------------.data ;Declarar vetor com 50 elementos [JOAOANTONIODESANTARITTAERONDINATAISLAURINDOPEREIRA] vetor:

.byte 50,'J','O','A','O','A','N','T','O','N','I','O','D','E' .byte 'S','A','N','T','A','R','I','T','T','A','E','R','O','N','D','I','N','A' .byte 'T','A','I','S','L','A','U','R','I','N','D','O' .byte 'P','E','R','E','I','R','A' ;------------------------------------------------------------------------------; Stack Pointer definition ;------------------------------------------------------------------------------.global __STACK_END .sect .stack ;------------------------------------------------------------------------------; Interrupt Vectors ;------------------------------------------------------------------------------.sect ".reset" ; MSP430 RESET Vector .short RESET

Questão 2 Programa 7 ;------------------------------------------------------------------------------; MSP430 Assembler Code Template for use with TI Code Composer Studio ; ; ;------------------------------------------------------------------------------.cdecls C,LIST,"msp430.h" ; Include device header file ;------------------------------------------------------------------------------.def RESET ; Export program entry-point to ; make it known to linker. ;------------------------------------------------------------------------------.text ; Assemble into program memory. .retain ; Override ELF conditional linking ; and retain current section. .retainrefs ; And retain any sections that have ; references to current section.

;------------------------------------------------------------------------------RESET mov.w #__STACK_END,SP ; Initialize stackpointer StopWDT mov.w #WDTPW|WDTHOLD,&WDTCTL ; Stop watchdog timer

;------------------------------------------------------------------------------; Main loop here ;-------------------------------------------------------------------------------

ORDENAS:

mov call jmp nop

#vetor,R5 #ORDENAS $

;incializar R5 (ponteiro) ;chama a subrotina ;trava a execução ;exigido pelo montador ;equivale a mov #0h,#0h

mov dec

@R5+, R8 R8

mov

#0, R9

;define R8 como o tamanho do vetor e incrementa R5 ;decrementa R8 ;equivale a sub #1,R8 ;zera R9 (auxiliar) ;neste loop, compara-se dois elementos do vetor e

define qual é menor loop: mov mov cmp jn cont1:

0(R5), R6 2(R5), R7 R6, R7 swap

;atribui o elemento da posição 0 de R5 a R6 ;atribui o elemento da posição 2 de R5 a R7 ;R7-R6 ;caso seja negativo, R6>R7 ou a operação é ;negativa (-R7
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF