SHARE
TWEET

Untitled

a guest Sep 19th, 2019 68 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;Jogo da Velha: ULTRA
  2. org 0x7E00
  3. jmp 0x0000:start
  4.  
  5. data:
  6.     mostra db "SISTEMA DE REGISTRO DE CONTAS BANCARIAS", 13
  7.     instr1 db "Nome (20 caracteres) --- CPF (11 caracteres) --- Conta Bancaria (6 caracteres)", 13
  8.     registro_nome dw "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 13
  9.     registro_cpf dw "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 13
  10.     registro_cc dw "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 13
  11.     mostrapergunta db "Qual operacao voce deseja realizar?", 13
  12.     mostrapergunta1 db "1 - Cadastro", 13
  13.     mostrapergunta2 db "2 - Busca Cadastro", 13
  14.     mostrapergunta3 db "3 - Editar Conta", 13
  15.     mostrapergunta4 db "4 - Deletar Conta", 13
  16.     mostrapergunta5 db "5 - Sair", 13
  17.     agradecimento db "Obrigado por usar nosso servico!", 13
  18.     naoachei db "Nao achei man", 13
  19.     cad db "Cadastro:",13
  20.     nome db "12345678901234567890", 13
  21.     cpf db "12345678901", 13
  22.     cc db "123456", 13
  23.     mostranome db "Digite o seu nome:", 13
  24.     mostracpf db "Digite o seu cpf:", 13
  25.     mostracb db "Digite o numero da conta bancaria:", 13
  26.     instrucao db "                                      " ,13,0
  27.     ;tami db 0
  28.     ocup db '000000000000000000000',13
  29.     index db 0;
  30.     inicio dw 0
  31.     limite_at db 0
  32.     variavel_comparadora dw 0
  33.     variavel_auxiliar_al db 0
  34.     variavel_auxiliar dw 0
  35.     flag_comparacao db 0
  36.     index_aux dw 0
  37.     opcao db 0
  38.  
  39. start:
  40.     ;definindo a interrupção
  41.     push ds
  42.     xor ax,ax
  43.     mov ds,ax
  44.     mov dx, telaInicial
  45.     mov di, 80h
  46.     mov word[di], dx
  47.     mov word[di+2], 0
  48.     pop ds
  49.  
  50.     ;programa normal
  51.     loop_infinito:
  52.       call limparTela
  53.       mov ah, 20h
  54.       int 20h
  55.       cmp al, '5'
  56.       je sair
  57.     jmp loop_infinito
  58.  
  59. limparTela:
  60.     ; Modo vídeo.
  61.     mov ah, 0
  62.     mov al, 12h
  63.     int 10h
  64.  
  65.     ret
  66.  
  67. getchar:
  68.     mov ah, 0
  69.     int 16h
  70.     ret
  71.  
  72. putchar:
  73.     mov ah, 0xe
  74.     mov bx, 0x7
  75.     mov bh, 0
  76.     int 10h
  77.     ret
  78.  
  79. telaInicial: ;isr
  80.         ;chamar o modo video para limpar a tela
  81.         mov byte[opcao], 0
  82.         mov ah, 0
  83.         mov al, 12h
  84.         int 10h
  85.  
  86.         mov si, mostrapergunta
  87.         mov dh, 00h
  88.         mov dl, 00h
  89.         call printarString
  90.  
  91.         mov si, mostrapergunta1
  92.         mov dh, 01h
  93.         mov dl, 00h
  94.         call printarString
  95.  
  96.         mov si, mostrapergunta2
  97.         mov dh, 02h
  98.         mov dl, 00h
  99.         call printarString
  100.  
  101.         mov si, mostrapergunta3
  102.         mov dh, 03h
  103.         mov dl, 00h
  104.         call printarString
  105.  
  106.         mov si, mostrapergunta4
  107.         mov dh, 04h
  108.         mov dl, 00h
  109.         call printarString
  110.  
  111.         mov si, mostrapergunta5
  112.         mov dh, 05h
  113.         mov dl, 00h
  114.         call printarString
  115.         mov si, instrucao
  116.         mov dh, 06h
  117.         mov dl, 00h
  118.         call printarString
  119.         call getchar
  120.  
  121.         cmp al, '1'
  122.         je cadastro
  123.         cmp al, '2'
  124.         je busca
  125.         cmp al, '3'
  126.         je editar
  127.         cmp al, '4'
  128.         je deletar
  129.         iret
  130.  
  131. delchar:
  132.   mov al, 0x08          ; backspace
  133.   call putchar
  134.   mov al, ' '
  135.   call putchar
  136.   mov al, 0x08          ; backspace
  137.   call putchar
  138.   ret
  139.  
  140. getstring:
  141.     mov word[inicio], si
  142.     loop12:
  143.         call getchar
  144.         cmp al, 0x08
  145.         je .backspace
  146.         cmp al, 13
  147.         je .mover_char
  148.         cmp byte[limite_at], 0
  149.         je loop12
  150.         dec byte[limite_at]
  151.         call putchar
  152.         .mover_char:
  153.         mov byte[si], al
  154.         inc si
  155.         cmp al, 13
  156.         je finale
  157.     jmp loop12
  158.     .backspace:
  159.         cmp si, word[inicio]
  160.         je loop12
  161.         dec si
  162.         inc byte[limite_at]
  163.         mov byte[si], 0
  164.         call delchar
  165.     jmp loop12
  166.  
  167.     finale:
  168.     ret
  169.  
  170. val_index:
  171.     mov byte[index], cl
  172.     dec si;
  173.     mov byte[si], '1';
  174.     ret
  175.  
  176.  find_ind:
  177.     lodsb;
  178.     cmp al,'0';
  179.     je retornar; salvar no index
  180.     inc cl
  181.     cmp cl, 21
  182.     je retornar
  183.     jmp find_ind;
  184.     retornar:
  185.         call val_index;
  186.         ret;
  187.    
  188. cadastro:
  189.     xor cx,cx
  190.     mov si, ocup;
  191.     call find_ind ;encontrar o indice que eu procuro
  192.    
  193.     cmp byte[index], 21
  194.     je telaInicial
  195.  
  196.     call limparTela
  197.     ;mostrar ocup
  198.     mov si, ocup;
  199.     mov dh, 10h
  200.     mov dl, 00h;
  201.     call printarString
  202.    
  203.     mov si, cad
  204.     mov dh, 00h
  205.     mov dl, 00h
  206.     call printarString
  207.     mov dh, 01h
  208.     mov dl, 00h
  209.     mov si, instr1
  210.     call printarString
  211.     ;movendo o ponteiro si para a string nome
  212.    
  213.     mov si, instrucao
  214.     mov dh, 02h
  215.     mov dl, 00h
  216.     call printarString
  217.    
  218.     call pegar
  219.  
  220.     mov si, instrucao
  221.     mov dh, 02h
  222.     mov dl, 00h
  223.     call printarString
  224.    
  225.     call printarAtributos
  226.  
  227.     call getchar
  228.     jmp telaInicial
  229.  
  230. pegar:
  231.     mov byte[limite_at], 21 ; calculo do offset
  232.     call calcularOffset
  233.     add si, registro_nome
  234.  
  235.     ;mov si, nome
  236.     mov byte[limite_at], 20
  237.     call getstring
  238.  
  239.     mov si, instrucao
  240.     mov dh, 02h
  241.     mov dl, 00h
  242.     call printarString
  243.  
  244.     mov byte[limite_at], 12 ; calculo do offset
  245.     call calcularOffset
  246.     add si, registro_cpf
  247.     ;mov si, cpf
  248.     mov byte[limite_at], 11
  249.     call getstring
  250.  
  251.     mov si, instrucao
  252.     mov dh, 02h
  253.     mov dl, 00h
  254.     call printarString
  255.  
  256.     mov byte[limite_at], 7 ; calculo do offset
  257.     call calcularOffset
  258.     add si, registro_cc
  259.     ;mov si, cc
  260.     mov byte[limite_at], 6
  261.     call getstring
  262.  
  263.     ret
  264.  
  265. printarAtributos:
  266.     mov byte[limite_at], 21 ; calculo do offset
  267.     call calcularOffset
  268.     add si, registro_nome
  269.     ;mov si, nome
  270.     mov dh, 2h
  271.     mov dl, 00h
  272.     call printarString
  273.  
  274.     mov byte[limite_at], 12 ; calculo do offset
  275.     call calcularOffset
  276.     add si, registro_cpf
  277.     ;mov si, cpf
  278.     mov dh, 3h
  279.     mov dl, 00h
  280.     call printarString
  281.  
  282.     mov byte[limite_at], 7 ; calculo do offset
  283.     call calcularOffset
  284.     add si, registro_cc
  285.     ;mov si, cc
  286.     mov dh, 4h
  287.     mov dl, 00h
  288.     call printarString
  289.  
  290.     ret
  291.  
  292. calcularOffset: ; calculando offset com o valor salvo em index
  293.     xor ax, ax
  294.     mov al, byte[index]
  295.  
  296.     mul byte[limite_at] ; offset esta salvo em al
  297.     mov si, ax
  298.     ret
  299.  
  300. busca:
  301.     call limparTela
  302.    
  303.     mov byte[opcao], 1
  304.    
  305.     jmp deletar
  306.    
  307. editar:
  308.     call limparTela
  309.     mov byte[opcao], 2
  310.     jmp deletar
  311.  
  312. sair:
  313.     call limparTela
  314.  
  315.     mov si, agradecimento
  316.     mov dh, 00h
  317.     mov dl, 00h
  318.     call printarString
  319.  
  320.     call getchar
  321.  
  322.     jmp exit
  323.  
  324. deletar:
  325.     call limparTela
  326.  
  327.     mov si, mostracpf
  328.     mov dh, 00h
  329.     mov dl, 00h
  330.     call printarString
  331.  
  332.     mov si, instrucao
  333.     mov dh, 02h
  334.     mov dl, 00h
  335.     call printarString
  336.  
  337.     mov si, cpf
  338.     mov byte[limite_at], 11
  339.     call getstring
  340.  
  341.     mov byte[limite_at], 12
  342.     mov byte[index], 0
  343.  
  344.     .loop1:
  345.         mov si, ocup
  346.         xor cx, cx
  347.         mov cl, byte[index]
  348.         add si, cx
  349.         lodsb
  350.         cmp al, '0'
  351.         je .incrementar_index
  352.         mov byte[flag_comparacao], 1
  353.         mov word[variavel_comparadora], cpf
  354.         call calcularOffset
  355.         add si, registro_cpf
  356.         .loop2:
  357.             lodsb
  358.             mov byte[variavel_auxiliar_al], al
  359.             mov word[variavel_auxiliar], si
  360.             mov si, word[variavel_comparadora]
  361.             lodsb
  362.             cmp al, 13 ; fim
  363.             je .end_loop2
  364.             cmp al, byte[variavel_auxiliar_al]
  365.             jne .zerar_var
  366.             mov si, word[variavel_auxiliar]
  367.             inc word[variavel_comparadora]
  368.         jmp .loop2
  369.         .end_loop2:
  370.         cmp byte[flag_comparacao], 1
  371.         je .zerar_flag
  372.         .incrementar_index:
  373.         inc byte[index]
  374.         cmp byte[index], 21
  375.         je .saida ;falta
  376.     jmp .loop1
  377.  
  378.     .zerar_var:
  379.         mov byte[flag_comparacao], 0
  380.         jmp .end_loop2
  381.  
  382.     .saida:
  383.         mov si, naoachei
  384.         mov dh, 03h
  385.         mov dl, 00h
  386.         call printarString
  387.         call getchar
  388.         jmp telaInicial
  389.  
  390.     .zerar_flag:
  391.         cmp byte[opcao], 1
  392.         je .op1
  393.         cmp byte[opcao], 2
  394.         je .op2
  395.  
  396.         .op0:
  397.         mov si, ocup
  398.         xor cx, cx
  399.         mov cl, byte[index]
  400.         add si, cx
  401.         mov al, '0'
  402.         mov byte[si], al
  403.         inc si
  404.         jmp telaInicial
  405.  
  406.         .op1:
  407.             call limparTela
  408.  
  409.             call printarAtributos
  410.             call getchar
  411.             jmp telaInicial
  412.  
  413.         .op2:
  414.             call limparTela
  415.  
  416.             ;mostrar instrucoes
  417.             mov si, instr1;
  418.             mov dh, 00h
  419.             mov dl, 00h;
  420.             call printarString
  421.  
  422.             mov si, instrucao
  423.             mov dh, 02h
  424.             mov dl, 00h
  425.             call printarString
  426.  
  427.             call pegar
  428.             jmp telaInicial
  429.  
  430. printAux:
  431.     lodsb
  432.  
  433.     mov ah, 0xe
  434.     mov bh, 0
  435.     mov bl, 0xf
  436.     int 10h
  437.  
  438.     cmp al, 13
  439.     jne printAux
  440. ret
  441.  
  442. printarString:
  443.     mov ah, 02h
  444.     mov bh, 00h
  445.     int 10h
  446.     call printAux
  447.  
  448.     ret
  449.  
  450. jogo:
  451. ;Setando a posição do disco onde kernel.asm foi armazenado(ES:BX = [0x500:0x0])
  452.     mov ax,0x860        ;0x50<<1 + 0 = 0x500
  453.     mov es,ax
  454.     xor bx,bx       ;Zerando o offset
  455.  
  456. ;Setando a posição da Ram onde o jogo será lido
  457.     mov ah, 0x02    ;comando de ler setor do disco
  458.     mov al,8        ;quantidade de blocos ocupados por jogo
  459.     mov dl,0        ;drive floppy
  460.  
  461. ;Usaremos as seguintes posições na memoria:
  462.     mov ch,0        ;trilha 0
  463.     mov cl,7        ;setor 2
  464.     mov dh,0        ;cabeca 0
  465.     int 13h
  466.     jc jogo ;em caso de erro, tenta de novo
  467.  
  468. break:
  469.     jmp 0x8600      ;Pula para a posição carregada
  470.  
  471. exit:
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top