Exercícios básicos de programação em linguagem de montagem do ARM
|
defina um vetor con N=16 bytes insira 8 bytes quaisquer no vetor (via appendbyte), exiba o conteúdo do vetor(via showbytes), num laço: remova cada byte do vetor (removebyte)e exiba o seu conteúdo (showbytes)
l1: obtenha em r3 e r4 um byte de cada cadeia, respectivamente, incrementando os apontadores r1 e r2 se r3=0 a 1a cadeia é menor que a 2a, a menos que ela tambem tenha terminado (r4=0) se r4=0 a 1a cadeia é maior que 2a se r3=r4 volte para l1 se r3>r4 retorne 1 senão retorne -1
ab: .asciz "ab" ad: .asciz "ad" abc: .asciz "abc" abc2:.asciz "abc" abb: .asciz "abb" z1: .asciz "" z2: .asciz "" fmt: .asciz "%s : %s = %2d\n" chame a subrotina lexcmp com diversas combinações para os apontadores r1 e r2 e exiba no vídeo o resultado da comṕaração usando a cadeia de formatação fmt. Um possível resultado de 5 testes seria: ab : abc = -1 abc : abc = 0 abc : ad = -1 abc : abb = 1 : = 0
l0: exiba a mensagem: "Pressione uma tecla (q para sair): " leia uma tecla via scanf dependendo do estado do botão exiba uma das mensagens: "led sendo ligado" ou "led sendo desligado" mude o estado do botão volte para l0
add r1, r1, r1, lsl #2 @ r1= r1*5 mov r1, r1, lsl #1 @ r1= (r1*5)*2 @ e se em vez de "mov" usarmos "add", r1*10 pode ser somado a outro valor!
switch(step){ case 0: printf ("step 0\n"); break; case 1: printf ("step 1\n"); break; case 2: printf ("step 2\n"); break; case 3: printf ("step 3\n"); break; case 4: printf ("step 4\n"); break; }A instrução TBB (p. 96 do manual) foi criada justamente com esta finalidade. Escreva um programa que realiza a mesma função do exemplo acima. Sugestão: coloque a tabela BranchTable_Byte imediatamente após a instrução TBB e use endereçamento relativo ao PC: TBB [PC, R1]