Advertisement
Guest User

Untitled

a guest
Mar 9th, 2019
96
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. compara_cinco:
  109.     call putchar
  110.     call space
  111.     call space
  112.  
  113.     ;cmp al, 'b'
  114.     ;je .print_basquete
  115.  
  116.     ;cmp al,'f'
  117.     ;je .print_futebol
  118.    
  119.     cmp al,'a'
  120.     je .print_artesmarciais
  121.    
  122.     ;cmp al,'v'
  123.     ;je .print_volei
  124.    
  125.     cmp al, 'r'
  126.     je .print_rugby
  127.    
  128.     jmp .print_null
  129.  
  130.     .print_null:
  131.         call space
  132.         mov si, null
  133.         call prints
  134.         ret
  135.  
  136.     .print_basquete:
  137.         mov al, 'z'
  138.         call putchar
  139.         call space
  140.         mov si, basquete
  141.         call prints
  142.         ret
  143.    
  144.     .print_volei:
  145.         mov si, volei
  146.         call prints
  147.         ret
  148.  
  149.     .print_rugby:
  150.         mov si, rugby
  151.         call prints
  152.         ret
  153.  
  154.     .print_artesmarciais:
  155.         mov si, artes_marciais
  156.         call prints
  157.         ret
  158.    
  159.     .print_futebol:
  160.         mov si, futebol
  161.         call prints
  162.         ret
  163.  
  164. begin:
  165.     ;Mantém a pilha apenas com '_'
  166.     mov ax, 95
  167.     push ax
  168.     push ax
  169.     push ax
  170.    
  171.     ;Reseta os registradores
  172.     xor ax, ax
  173.     mov cx, ax
  174.     mov bx, ax
  175.     mov dx, ax
  176.     mov ds, ax
  177.     mov es, ax
  178.  
  179.     jmp main
  180.  
  181. main:
  182.     ;Printa o estado atual da vitrine
  183.     .printState:
  184.         ;Desempilha os 3 primeiros esportes
  185.         pop bx                          ;1ª PRIORIDADE
  186.         pop cx                          ;2ª PRIORIDADE
  187.         pop dx                          ;3ª PRIORIDADE
  188.        
  189.         ;Printa o 3º em prioridade
  190.         mov ax, dx
  191.         call compara_cinco
  192.         call space
  193.         call divisoria
  194.         call space
  195.  
  196.         ;Printa o 1º em prioridade
  197.         mov ax, bx
  198.         call compara_cinco
  199.         call space
  200.         call divisoria
  201.         call space
  202.  
  203.         ;Printa o 2º em prioridade
  204.         mov ax, cx
  205.         call compara_cinco
  206.  
  207.         ;Reempilha os esportes para manter a configuraççao atual
  208.         push dx
  209.         push cx
  210.         push bx
  211.    
  212.     .endPrint:    
  213.         call endl
  214.  
  215.     xor ax, ax
  216.     mov ds, ax
  217.     mov es, ax
  218.    
  219.     ;Scanf da string 'esporte' ',' 'prioridade'
  220.     mov di, string
  221.     call gets
  222.  
  223.     ;Faz si apontar pro início da string
  224.     mov si, string
  225.  
  226.     ;Carrega o char que indica o esporte
  227.     lodsb
  228.  
  229.     ;Salva em bx o char do esporte
  230.     mov bx, ax
  231.  
  232.     ;Zera ax
  233.     xor ax, ax
  234.  
  235.     ;Carrega a vírgula e ignora
  236.     lodsb
  237.  
  238.     ;Zera ax
  239.     xor ax, ax
  240.  
  241.     ;Carrega o valor da prioridade
  242.     lodsb
  243.  
  244.     ;Salva em cx o "char" da prioridade
  245.     mov cx, ax
  246.  
  247.     ;Atualiza as prioridades
  248.     .update:
  249.         mov ax, cx
  250.  
  251.         ;Compara essa prioridade com 1, 2 e 3 para definir o novo estado
  252.         cmp ax, '1'
  253.         je .caso1
  254.  
  255.         cmp ax, '2'
  256.         je .caso2
  257.  
  258.         cmp ax, '3'
  259.         je .caso3
  260.  
  261.         .caso1:
  262.             jmp .first    
  263.         .caso2:
  264.             jmp .second
  265.         .caso3:
  266.             jmp .third
  267.  
  268.     .third:
  269.         ;Desempilha os esportes de 1ª e 2ª prioridade, respectivamente
  270.         pop ax
  271.         pop dx
  272.  
  273.         ;Empilha o novo esporte de prioridade 3
  274.         push bx
  275.  
  276.         ;Reempilha os esportes de 2ª e 1ª prioridades, respectivamente
  277.         push dx
  278.         push ax
  279.  
  280.         jmp .endUpdate
  281.  
  282.     .second:
  283.         ;Desempilha o esporte de 1ª prioridade
  284.         pop ax
  285.  
  286.         ;Desempilha o esporte de 2ª prioridade
  287.         pop cx
  288.  
  289.         ;Se a posição 2 está vazia, devemos manter o de 3ª prioridade
  290.         cmp cx, 95
  291.         je .onlyPut
  292.  
  293.         ;Caso contrário...
  294.  
  295.         ;Reempilha-se o cx como esporte de 3ª prioridade
  296.         push cx
  297.  
  298.         ;Empilha o novo esporte de prioridade 2
  299.         push bx
  300.        
  301.         ;Reempilha o esporte de 1ª prioridade
  302.         push ax    
  303.  
  304.         jmp .endUpdate
  305.  
  306.         .onlyPut:
  307.             ;Empilha bx normalmente e cx é desconsiderado
  308.             push bx
  309.  
  310.             ;Reempilha o esporte de 1ª prioridade
  311.             push ax
  312.  
  313.             jmp .endUpdate
  314.  
  315.     .first:
  316.         ;Desempilha o esporte de 1ª prioridade
  317.         pop ax    
  318.  
  319.         ;Se a posição 1 estiver vazia, devemos manter os esportes de 2ª e 3ª prioridade
  320.         cmp ax, 95
  321.         je .onlyPuti
  322.  
  323.         ;Caso contrário...
  324.  
  325.         ;Reempilha-se o ax como esporte de 2ª prioridade
  326.         push ax
  327.  
  328.         ;Empilha o novo esporte de 1ª prioridade
  329.         push bx
  330.  
  331.         jmp .endUpdate
  332.  
  333.         .onlyPuti:
  334.             ;Empilha bx normalmente e ax é desconsiderado
  335.             push bx
  336.  
  337.             jmp .endUpdate
  338.  
  339.     .endUpdate:
  340.         ;Zera ax
  341.         xor ax, ax
  342.  
  343.         jmp main
  344.    
  345.    
  346. times 510-($-$$) db 0
  347. dw 0xaa55
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement