Вы находитесь на странице: 1из 4

Tas Laurindo Pereira

12/0042223

Relatrio 2 Ordenar um vetor

Questo 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 #vetor,R5 ;inicializao de R5


call #ORD ;chama a subrotina
jmp $ ;travar execuo
nop ;exigido pelo montador
;equivale a mov #0h,#0h

ORD: mov.b @R5+, R8 ;atribui o tamanho de R5 para R8


(contador) e incrementa R5
dec R8
;equivale a sub #1,R8
mov #0, R9 ;zera R9
;neste loop, verifica-se qual
elemento menor
loop: mov.b 0(R5), R6 ;atribui o elemento da primeira
posio em questo a R6
mov.b 1(R5), R7 ;atribui o elemento da segunda
posio a R7
cmp R6, R7 ;R7-R6
jn swap ;caso d negativo, R6>R7, pula para
swap
cont1: nop
;equivale a mov #0h,#0h
inc R5 ;avana no vetor
;equivale a add #1,R5
dec R8 ;decrementa o contador
;equivale a sub #1,R8
jnz loop ;se no atingir 0, vai para o loop
cmp #0, R9 ;verifica se R9 maior que 0
mov #vetor, R5 ;inicializa R5 com o vetor
jnz ORD ;se o resultado de cmp no for 0, vai
para a subrotina
ret
;equivale a mov @SP+,PC
;nesta parte, troca-se os elementos
de posio
swap: mov.b R6, 1(R5) ;move o elemento de R6 para a posio
1 de R5 em questo
mov.b R7, 0(R5) ;move o elemento de R7 para a posio
0 de R5
inc R9 ;incrementa R9
;equivale a add #1,R9
jmp cont1 ;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

Questo 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
;-------------------------------------------------------------------------------

mov #vetor,R5 ;incializar R5 (ponteiro)


call #ORDENAS ;chama a subrotina
jmp $ ;trava a execuo
nop ;exigido pelo montador
;equivale a mov #0h,#0h

ORDENAS: mov @R5+, R8 ;define R8 como o tamanho do vetor e incrementa R5


dec R8 ;decrementa R8
;equivale a sub #1,R8
mov #0, R9 ;zera R9 (auxiliar)
;neste loop, compara-se dois elementos do vetor e
define qual menor
loop: mov 0(R5), R6 ;atribui o elemento da posio 0 de R5 a R6
mov 2(R5), R7 ;atribui o elemento da posio 2 de R5 a R7
cmp R6, R7 ;R7-R6
jn swap ;caso seja negativo, R6>R7 ou a operao
;negativa (-R7<R6), deve-se trocar de ;posio
cont1: nop
;equivale a mov #0h,#0h
incd R5 ;incrementa em 2 (word) R5
;equivale a add #2,R5
dec R8 ;decrementa R8
;equivale a sub #1,R8
jnz loop ;enquanto no for 0, repete o loop
cmp #0, R9 ;verifica se R9 zero
mov #vetor, R5 ;inicializa o ponteiro
jnz ORDENAS ;enquanto o resultado de cmp no for 0, vai para a
subrotina
ret
;equivale a mov @SP+,PC
;nesta parte feita a troca de posio
;dos elementos, ordenando o vetor
swap: mov R6, 2(R5) ;move o elemento de R6 para a posio 2
;em questo no vetor
mov R7, 0(R5) ;move o elemento de R7 para a posio 0
;em questo do vetor
inc R9 ;incrementa R9
;equivale a add #1,R9
jmp cont1
nop
;equivale a mov #0h,#0h
;-------------------------------------------------------------------------------
; Segmento de dados inicializados (0x2400)
;-------------------------------------------------------------------------------
.data
; Declarar vetor com 8 elementos
vetor: .word 8, 120, 033, 348, -1994, 120, 042, 223, -1992
;-------------------------------------------------------------------------------
; Stack Pointer definition
;-------------------------------------------------------------------------------
.global __STACK_END
.sect .stack

;-------------------------------------------------------------------------------
; Interrupt Vectors
;-------------------------------------------------------------------------------
.sect ".reset" ; MSP430 RESET Vector
.short RESET

Questo 3
Verificar cdigos acima.

Questo 4
Neste caso, troca-se o jump na label loop, substituindo jn por jl.

Questo 5
Neste caso, troca-se o jump na label loop, substituindo jn por jlo.

Вам также может понравиться