Advertisement
Guest User

Untitled

a guest
Oct 25th, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ORIG 8000h
  2.  
  3. SP_INICIAL  EQU FDFFh
  4. RESPOSTA    STR 0,0,0,0
  5.  
  6. ORIG 0000h
  7. JMP INICIO
  8.  
  9. verifica_X: MOV R1, M[SP+3] ; Valor correto
  10.         MOV R2, M[SP+2] ; Valor para testar
  11.         MOV R5, RESPOSTA
  12.  
  13. loop_X:     CMP R2, 0   ; Enquanto não tiver percorrido todos os digitos hexa do número para testar
  14.         BR.Z verifica_O
  15.  
  16.         MOV R3, R1   
  17.         AND R3, Fh  ; Digito certo
  18.        
  19.         MOV R4, R2
  20.         AND R4, Fh  ; Digito teste
  21.  
  22.         CMP R3, R4  ; Se forem iguais, escreve 'X' no vector e incrementa a posição deste, senão passa ao proximo digito
  23.         BR.NZ shift_X
  24.         MOV R6, 'X'
  25.         MOV M[R5], R6
  26.         INC R5
  27.         AND R1, FFF0h   ; Zera o valor para ajudar a verficar os 'O'
  28.  
  29. shift_X:    ROR R1, 4   ; Roda para preservar os valores que não estão exatamente no sitio certo
  30.         SHR R2, 4  
  31.         BR loop_X  
  32.  
  33. verifica_O:     MOV M[SP+3], R1 ; Escreve na stack apenas os digitos que nao estavam no lugar
  34.  
  35. loop_O_1:   CMP R1, 0       ; Se todos estavam no lugar então sai
  36.         JMP.Z FIM
  37.  
  38.         MOV R3, R1
  39.         AND R3, Fh  ; Digito correto
  40.  
  41.         CMP R3, 0   ; Se o digito for igual a zero (ou seja estava no sitio certo), salta
  42.         BR.Z shift_O
  43.  
  44.         MOV R2, M[SP+2] ; Valor a testar
  45.  
  46. loop_O_2:   CMP R2, 0   ; Roda pelos digitos do valor teste para cada digito do valor correto
  47.         BR.Z shift_O   
  48.        
  49.         MOV R4, R2 
  50.         AND R4, Fh  ; Digito teste
  51.  
  52.         CMP R4, R3  ; Se forem iguais, escreve 'O' na proxima posicao de string
  53.         BR.Z inc_teste
  54.  
  55.         SHR R2, 4
  56.         BR loop_O_2
  57.        
  58. inc_teste:  MOV R6, 'O' ; Escreve no vector e incremente a posição de escrita
  59.         MOV M[R5], R6
  60.         INC R5
  61.  
  62. shift_O:        SHR R1, 4   ; Próximo digito certo e recomeça o primeiro loop
  63.         BR loop_O_1
  64.        
  65.  
  66. INICIO:     MOV R7, SP_INICIAL
  67.         MOV SP, R7
  68.  
  69.         MOV R1, 6515h ; Valor correto
  70.         MOV R2, 6115h ; Valor para testar
  71.  
  72.         PUSH R1
  73.         PUSH R2
  74.         CALL verifica_X
  75.  
  76. FIM:        BR FIM
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement