Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Nomes: Victor Hochgreb de Freitas RA 104276
- ; Douglas Afonso de Sousa Costa RA 104825
- ; Laboratório 4 - Conjunto de 32 elementos que aceita inserção, remoção e consulta
- org 400h
- n : ds 2
- comandos : ds 511
- resultado : ds 511
- org 800h
- set r0, 00 ;registrador onde será armezanado o conjunto
- ld r1, n ;registrador com o numero de comandos
- set r2, 0000ffffh ;mascara numero de comandos
- and r0, r2
- set r2, 7h ;mascara comando
- set r10, comandos ;apontador de comandos
- set r13, resultado ;apontador de resultado
- menu:
- cmp r1, 0
- jz final
- ld r3, (r10)
- and r3, r2
- set r4, 0h ;remove todos
- cmp r3, r4
- jz removeTodos
- set r4, 7h ;insere todos
- cmp r3, r4
- jz insereTodos
- set r4, 1h ;insere elemento
- cmp r3, r4
- jz insereElem1
- set r4, 2h ;remove elemento
- cmp r3, r4
- jz removeElem1
- set r4, 3h ;pertence
- cmp r3, r4
- jz pertence1
- set r4, 4h ;cardinalidade
- cmp r3, r4
- jz cardinalidade
- final:
- sys 20h
- removeTodos:
- set r0, 00h ;zera o conjunto
- sub r1, 1
- add r10, 1
- jmp menu
- insereTodos:
- set r0, -1 ;insere todos elementos no conjunto
- sub r1, 1
- add r10, 1
- jmp menu
- pertence1:
- jmp pertence
- removeElem1:
- jmp removeElem ; pulo
- insereElem1:
- jmp insereElem ; pulo
- cardinalidade:
- set r7,32
- set r6,0
- mov r5 ,r0
- loop: cmp r7,0
- jz store
- shr r5,1 ;anda no conjunto
- jc carry1 ;testa se carry e 1
- jmp carry0
- carry1:
- add r6,1 ;soma 1 no contador de numeros
- sub r7,1
- jmp loop
- carry0:
- sub r7,1
- jmp loop
- store: st (r13), r6 ;armazena o numero de elementos no resultado
- add r13, 1
- add r10, 1
- sub r1, 1
- jmp menu
- insereElem:
- ld r7, (r10) ;obtem-se o comando
- shr r7, 3 ;desloca para a direita para pegar o numero do elemento a ser inserido
- set r3, 1
- shl r3, r7 ;desloca o elemento ate a sua respectiva posicao
- or r0, r3 ;insere o elemento no conjunto
- sub r1, 1
- add r10, 1
- jmp menu
- removeElem: ;analogo ao insere elem
- ld r11, (r10)
- shr r11, 3
- set r3, 1
- shl r3, r11
- set r12, -1
- xor r3, r12
- and r0, r3
- sub r1, 1
- add r10, 1
- jmp menu
- pertence:
- ld r7, (r10)
- shr r7, 3 ;verifica o elemento a ser procurado
- set r3, 1
- shl r3, r7 ;mascara
- set r12, -1
- xor r3, r12
- or r3, r0
- cmp r3, r12 ;teste se pertence
- jz insere1
- jmp insere0
- insere0: ;insere 0 no resultado
- set r3, 0
- st (r13), r3
- add r13, 1
- sub r1, 1
- add r10, 1
- jmp menu
- insere1: ;insere 1 no resultado
- set r3, 01h
- st (r13), r3
- add r13, 1
- sub r1, 1
- add r10, 1
- jmp menu
- fpr_remove_todos:
- set r0, 0
- ret
- fpr_insere_todos:
- set r0, -1
- ret
- fpr_insere:
- push r2
- set r2, 1
- shl r2, r1
- or r0, r2
- pop r2
- ret
- fpr_remove:
- push r2
- push r3
- set r3, 1
- set r2, -1
- shl r3, r1
- xor r2, r3
- and r0, r2
- pop r3
- pop r2
- ret
- fpr_pertence:
- push r2
- push r3
- set r2, 1
- set r3, -1
- shl r2, r1
- xor r2, r3
- or r2, r0
- cmp r2, r3
- jz fpr_esta
- jmp fpr_nesta
- fpr_esta:
- set r0, 1
- jmp fpr_fim
- fpr_nesta
- set r0, 0
- jmp fpr_fim
- fpr_fim:
- pop r3
- pop r2
- ret
- fpr_cardinalidade:
- push r2
- push r3
- push r4
- set r2, 32
- set r3, 0
- mov r4, r0
- fpr_loop:
- cmp r2, 0
- jz fpr_fim
- shr r4, 1
- jc fpr_possui
- jmp fpr_npossui
- fpr_possui:
- add r3, 1
- sub r2, 1
- jmp fpr_loop
- fpr_npossui:
- sub r2, 1
- jmp fpr_loop
- fpr_fim:
- set r0, r3
- pop r4
- pop r3
- pop r2
- ret
Add Comment
Please, Sign In to add comment