Códigos para ordenar vetor em assembly - MSP430
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