Advertisement
Guest User

Untitled

a guest
Mar 9th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. org 0x7c00
  2. jmp 0x0000:begin
  3.  
  4. ;No sports      :: reg = '_'
  5. ;Artes Marciais :: reg = 'a'
  6. ;Basquete       :: reg = 'b'
  7. ;Futebol        :: reg = 'f'
  8. ;Rugby          :: reg = 'r'
  9. ;Volei          :: reg = 'v'
  10.  
  11. ;-------------------------
  12.  
  13. ;bx = Prioridade 1
  14. ;cx = Prioridade 2
  15. ;dx = Prioridade 3
  16.  
  17. data:
  18.     string times 11 db 0
  19.     vitrineNula db '--- | --- | ---',13, 10, 0
  20.     null db '---', 0
  21.     basquete db 'Basquete', 0
  22.     futebol db 'Futebol', 0
  23.     rugby db 'Rugby', 0
  24.     artes_marciais db 'Artes Marciais', 0
  25.     volei db 'Vôlei', 0
  26.  
  27. putchar:
  28.     mov ah, 0x0e
  29.     int 10h
  30.     ret
  31.  
  32. getchar:
  33.     mov ah, 0x00
  34.     int 16h
  35.     ret
  36.  
  37. delchar:
  38.     mov al, 0x08                    
  39.     call putchar
  40.     mov al, ' '
  41.     call putchar
  42.     mov al, 0x08                    
  43.     call putchar
  44.     ret
  45.  
  46. endl:
  47.     mov al, 0x0a                    
  48.     call putchar
  49.     mov al, 0x0d                    
  50.     call putchar
  51.     ret
  52.  
  53. space:
  54.       mov al, ' '
  55.       call putchar
  56.       ret
  57.  
  58. divisoria:
  59.       mov al, '|'
  60.       call putchar
  61.       ret
  62.  
  63. prints:                        
  64.     .loop:
  65.         lodsb                   ;Carrega caracter em al              
  66.         cmp al, 0
  67.         je .endloop
  68.         call putchar
  69.         jmp .loop
  70.     .endloop:
  71.     ret
  72.  
  73. gets:                          
  74.     xor cx, cx                  
  75.     .loop1:
  76.         call getchar
  77.  
  78.         cmp al, 0x08            ;0x08 == Backspace                
  79.         je .backspace
  80.  
  81.         cmp al, 0x0d              
  82.         je .done
  83.  
  84.         cmp cl, 10            
  85.         je .loop1
  86.        
  87.         stosb
  88.         inc cl
  89.         call putchar
  90.        
  91.         jmp .loop1
  92.  
  93.         .backspace:
  94.             cmp cl, 0          
  95.             je .loop1
  96.             dec di
  97.             dec cl
  98.             mov byte[di], 0
  99.             call delchar
  100.         jmp .loop1
  101.  
  102.     .done:
  103.     mov al, 0
  104.     stosb
  105.     call endl
  106.     ret
  107.  
  108. ;ESSA PORRA AQUI NAO COMPARA NADA
  109. compara_cinco:
  110.     call putchar
  111.     call space
  112.     call space
  113.    
  114.     ;ISSO NAO FUNFA
  115.     cmp al, 'b'
  116.     je .print_basquete
  117.  
  118.     ;NEM ISSO FUNCIONA
  119.     cmp al,'f'
  120.     je .print_futebol
  121.    
  122.     ;TLGD ESSE INFERNO? NEM COMPARA
  123.     cmp al,'a'
  124.     je .print_artesmarciais
  125.    
  126.     ;ESSE 'V' NAO É DE VITORIA
  127.     cmp al,'v'
  128.     je .print_volei
  129.    
  130.     ;R DE ROMBADO DE CODIGO
  131.     cmp al, 'r'
  132.     je .print_rugby
  133.    
  134.     ;ESSE JMP É O UNICO QUE JUMPA
  135.     jmp .print_null
  136.  
  137.     .print_null:
  138.         call space
  139.         mov si, null
  140.         call prints
  141.         ret
  142.  
  143.     .print_basquete:
  144.         mov al, 'z'
  145.         call putchar
  146.         call space
  147.         mov si, basquete
  148.         call prints
  149.         ret
  150.    
  151.     .print_volei:
  152.         mov si, volei
  153.         call prints
  154.         ret
  155.  
  156.     .print_rugby:
  157.         mov si, rugby
  158.         call prints
  159.         ret
  160.  
  161.     .print_artesmarciais:
  162.         mov si, artes_marciais
  163.         call prints
  164.         ret
  165.    
  166.     .print_futebol:
  167.         mov si, futebol
  168.         call prints
  169.         ret
  170.  
  171. begin:
  172.     ;Mantém a pilha apenas com '_'
  173.     mov ax, 95
  174.     push ax
  175.     push ax
  176.     push ax
  177.    
  178.     ;Reseta os registradores
  179.     xor ax, ax
  180.     mov cx, ax
  181.     mov bx, ax
  182.     mov dx, ax
  183.     mov ds, ax
  184.     mov es, ax
  185.  
  186.     jmp main
  187.  
  188. main:
  189.     ;Printa o estado atual da vitrine
  190.     .printState:
  191.         ;Desempilha os 3 primeiros esportes
  192.         pop bx                          ;1ª PRIORIDADE
  193.         pop cx                          ;2ª PRIORIDADE
  194.         pop dx                          ;3ª PRIORIDADE
  195.        
  196.         ;Printa o 3º em prioridade
  197.         mov ax, dx
  198.         call compara_cinco
  199.         call space
  200.         call divisoria
  201.         call space
  202.  
  203.         ;Printa o 1º em prioridade
  204.         mov ax, bx
  205.         call compara_cinco
  206.         call space
  207.         call divisoria
  208.         call space
  209.  
  210.         ;Printa o 2º em prioridade
  211.         mov ax, cx
  212.         call compara_cinco
  213.  
  214.         ;Reempilha os esportes para manter a configuraççao atual
  215.         push dx
  216.         push cx
  217.         push bx
  218.    
  219.     .endPrint:    
  220.         call endl
  221.  
  222.     xor ax, ax
  223.     mov ds, ax
  224.     mov es, ax
  225.    
  226.     ;Scanf da string 'esporte' ',' 'prioridade'
  227.     mov di, string
  228.     call gets
  229.  
  230.     ;Faz si apontar pro início da string
  231.     mov si, string
  232.  
  233.     ;Carrega o char que indica o esporte
  234.     lodsb
  235.  
  236.     ;Salva em bx o char do esporte
  237.     mov bx, ax
  238.  
  239.     ;Zera ax
  240.     xor ax, ax
  241.  
  242.     ;Carrega a vírgula e ignora
  243.     lodsb
  244.  
  245.     ;Zera ax
  246.     xor ax, ax
  247.  
  248.     ;Carrega o valor da prioridade
  249.     lodsb
  250.  
  251.     ;Salva em cx o "char" da prioridade
  252.     mov cx, ax
  253.  
  254.     ;Atualiza as prioridades
  255.     .update:
  256.         mov ax, cx
  257.  
  258.         ;Compara essa prioridade com 1, 2 e 3 para definir o novo estado
  259.         cmp ax, '1'
  260.         je .caso1
  261.  
  262.         cmp ax, '2'
  263.         je .caso2
  264.  
  265.         cmp ax, '3'
  266.         je .caso3
  267.  
  268.         .caso1:
  269.             jmp .first    
  270.         .caso2:
  271.             jmp .second
  272.         .caso3:
  273.             jmp .third
  274.  
  275.     .third:
  276.         ;Desempilha os esportes de 1ª e 2ª prioridade, respectivamente
  277.         pop ax
  278.         pop dx
  279.  
  280.         ;Empilha o novo esporte de prioridade 3
  281.         push bx
  282.  
  283.         ;Reempilha os esportes de 2ª e 1ª prioridades, respectivamente
  284.         push dx
  285.         push ax
  286.  
  287.         jmp .endUpdate
  288.  
  289.     .second:
  290.         ;Desempilha o esporte de 1ª prioridade
  291.         pop ax
  292.  
  293.         ;Desempilha o esporte de 2ª prioridade
  294.         pop cx
  295.  
  296.         ;Se a posição 2 está vazia, devemos manter o de 3ª prioridade
  297.         cmp cx, 95
  298.         je .onlyPut
  299.  
  300.         ;Caso contrário...
  301.  
  302.         ;Reempilha-se o cx como esporte de 3ª prioridade
  303.         push cx
  304.  
  305.         ;Empilha o novo esporte de prioridade 2
  306.         push bx
  307.        
  308.         ;Reempilha o esporte de 1ª prioridade
  309.         push ax    
  310.  
  311.         jmp .endUpdate
  312.  
  313.         .onlyPut:
  314.             ;Empilha bx normalmente e cx é desconsiderado
  315.             push bx
  316.  
  317.             ;Reempilha o esporte de 1ª prioridade
  318.             push ax
  319.  
  320.             jmp .endUpdate
  321.  
  322.     .first:
  323.         ;Desempilha o esporte de 1ª prioridade
  324.         pop ax    
  325.  
  326.         ;Se a posição 1 estiver vazia, devemos manter os esportes de 2ª e 3ª prioridade
  327.         cmp ax, 95
  328.         je .onlyPuti
  329.  
  330.         ;Caso contrário...
  331.  
  332.         ;Reempilha-se o ax como esporte de 2ª prioridade
  333.         push ax
  334.  
  335.         ;Empilha o novo esporte de 1ª prioridade
  336.         push bx
  337.  
  338.         jmp .endUpdate
  339.  
  340.         .onlyPuti:
  341.             ;Empilha bx normalmente e ax é desconsiderado
  342.             push bx
  343.  
  344.             jmp .endUpdate
  345.  
  346.     .endUpdate:
  347.         ;Zera ax
  348.         xor ax, ax
  349.  
  350.         jmp main
  351.    
  352.    
  353. times 510-($-$$) db 0
  354. dw 0xaa55
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement