Guest User

Untitled

a guest
Oct 27th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Nomes: Victor Hochgreb de Freitas RA 104276
  2. ; Douglas Afonso de Sousa Costa RA 104825
  3. ; Laboratório 4 - Conjunto de 32 elementos que aceita inserção, remoção e consulta
  4.  
  5.  
  6. org 400h
  7. n :             ds 2
  8. comandos :      ds 511
  9. resultado :     ds 511
  10.  
  11. org 800h
  12.                 set r0, 00             ;registrador onde será armezanado o conjunto
  13.                 ld  r1, n               ;registrador com o numero de comandos
  14.                 set r2, 0000ffffh       ;mascara numero de comandos
  15.                 and r0, r2
  16.                 set r2, 7h              ;mascara comando
  17.                 set r10, comandos       ;apontador de comandos
  18.                 set r13, resultado      ;apontador de resultado
  19. menu:
  20.                 cmp r1, 0
  21.                 jz final
  22.                 ld r3, (r10)
  23.                 and r3, r2
  24.                 set r4, 0h              ;remove todos
  25.                 cmp r3, r4            
  26.                 jz removeTodos
  27.                 set r4, 7h              ;insere todos
  28.                 cmp r3, r4            
  29.                 jz insereTodos
  30.                 set r4, 1h              ;insere elemento
  31.                 cmp r3, r4            
  32.                 jz insereElem1
  33.                 set r4, 2h              ;remove elemento
  34.                 cmp r3, r4            
  35.                 jz removeElem1
  36.                 set r4, 3h              ;pertence
  37.                 cmp r3, r4            
  38.                 jz pertence1
  39.                 set r4, 4h              ;cardinalidade
  40.                 cmp r3, r4            
  41.                 jz cardinalidade      
  42.  
  43. final:
  44.                 sys 20h
  45.  
  46. removeTodos:
  47.                 set r0, 00h            ;zera o conjunto
  48.                 sub r1, 1
  49.                 add r10, 1
  50.                 jmp menu
  51.                
  52. insereTodos:
  53.                 set r0, -1             ;insere todos elementos no conjunto
  54.                 sub r1, 1
  55.                 add r10, 1
  56.                 jmp menu
  57.  
  58. pertence1:
  59.                 jmp pertence
  60.  
  61. removeElem1:
  62.                 jmp removeElem          ; pulo
  63. insereElem1:
  64.                 jmp insereElem          ; pulo
  65.  
  66. cardinalidade:                  
  67.                 set r7,32              
  68.                 set r6,0              
  69.                 mov r5 ,r0              
  70.  
  71. loop:           cmp r7,0
  72.                 jz store
  73.                 shr r5,1                ;anda no conjunto
  74.                 jc carry1               ;testa se carry e 1
  75.                 jmp carry0
  76. carry1:                
  77.                 add r6,1                ;soma 1 no contador de numeros
  78.                 sub r7,1
  79.                 jmp loop  
  80. carry0:
  81.                 sub r7,1              
  82.                 jmp loop            
  83.  
  84. store:          st (r13), r6            ;armazena o numero de elementos no resultado
  85.                 add r13, 1            
  86.                 add r10, 1
  87.                 sub r1, 1
  88.                 jmp menu              
  89.  
  90.                
  91. insereElem:
  92.                 ld r7, (r10)           ;obtem-se o comando
  93.                 shr r7, 3              ;desloca para a direita para pegar o numero do elemento a ser inserido
  94.                 set r3, 1
  95.                 shl r3, r7             ;desloca o elemento ate a sua respectiva posicao
  96.                 or r0, r3              ;insere o elemento no conjunto
  97.                 sub r1, 1
  98.                 add r10, 1              
  99.                 jmp menu
  100.                
  101. removeElem:                            ;analogo ao insere elem
  102.                 ld r11, (r10)          
  103.                 shr r11, 3              
  104.                 set r3, 1
  105.                 shl r3, r11            
  106.                 set r12, -1
  107.                 xor r3, r12            
  108.                 and r0, r3              
  109.                 sub r1, 1
  110.                 add r10, 1
  111.                 jmp menu
  112.  
  113.  
  114. pertence:
  115.  
  116.                 ld r7, (r10)
  117.                 shr r7, 3              ;verifica o elemento a ser procurado
  118.                 set r3, 1
  119.                 shl r3, r7             ;mascara
  120.                 set r12, -1
  121.                 xor r3, r12
  122.                 or r3, r0
  123.                 cmp r3, r12            ;teste se pertence
  124.                 jz insere1
  125.                   jmp insere0
  126.                
  127. insere0:                               ;insere 0 no resultado
  128.                   set r3, 0        
  129.                 st (r13), r3
  130.                 add r13, 1
  131.                 sub r1, 1
  132.                 add r10, 1
  133.  
  134.                 jmp menu
  135.                
  136. insere1:                               ;insere 1 no resultado
  137.                 set r3, 01h            
  138.                 st (r13), r3
  139.                 add r13, 1
  140.                 sub r1, 1          
  141.                 add r10, 1
  142.                 jmp menu
  143.                
  144.                
  145. fpr_remove_todos:
  146.     set r0, 0
  147.     ret
  148.    
  149. fpr_insere_todos:
  150.     set r0, -1
  151.     ret
  152.    
  153. fpr_insere:
  154.     push r2
  155.     set r2, 1
  156.     shl r2, r1
  157.     or r0, r2
  158.     pop r2
  159.     ret
  160.    
  161. fpr_remove:
  162.     push r2
  163.     push r3
  164.     set r3, 1
  165.     set r2, -1
  166.     shl r3, r1
  167.     xor r2, r3
  168.     and r0, r2
  169.     pop r3
  170.     pop r2
  171.     ret
  172.    
  173. fpr_pertence:
  174.     push r2
  175.     push r3
  176.     set r2, 1
  177.     set r3, -1
  178.     shl r2, r1
  179.     xor r2, r3
  180.     or r2, r0
  181.     cmp r2, r3
  182.     jz fpr_esta
  183.     jmp fpr_nesta
  184.    
  185.     fpr_esta:
  186.     set r0, 1
  187.     jmp fpr_fim
  188.    
  189.     fpr_nesta
  190.     set r0, 0
  191.     jmp fpr_fim
  192.        
  193.     fpr_fim:
  194.     pop r3
  195.     pop r2
  196.     ret
  197.    
  198. fpr_cardinalidade:
  199.     push r2
  200.     push r3
  201.     push r4
  202.     set r2, 32
  203.     set r3, 0
  204.     mov r4, r0
  205.    
  206.     fpr_loop:
  207.     cmp r2, 0
  208.     jz fpr_fim
  209.     shr r4, 1
  210.     jc fpr_possui
  211.     jmp fpr_npossui
  212.    
  213.    
  214.     fpr_possui:
  215.     add r3, 1
  216.     sub r2, 1
  217.     jmp fpr_loop
  218.    
  219.     fpr_npossui:
  220.     sub r2, 1
  221.     jmp fpr_loop
  222.    
  223.     fpr_fim:
  224.     set r0, r3
  225.     pop r4
  226.     pop r3
  227.     pop r2
  228.     ret
Add Comment
Please, Sign In to add comment