Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
485
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;Aluno: LEONARDO REIS DA SILVA
  2. ;Cartao: 00316357
  3.         .model  small
  4.         .stack
  5.  
  6. CR      equ     13
  7. LF      equ     10
  8. BS      equ     8
  9.  
  10.    
  11. .data
  12. Virgula                 db      ","
  13. BufferTec               db      12 dup (?),0
  14. Digite_o_nome           db      "Digite o nome do arquivo: ",0
  15. Nome_e_cartao           db      "************ Aluno: Leonardo Reis da Silva ****** Matricula: 316357 ************",CR,LF,0
  16. Nome_e_cartao_grafico           db      "************ Aluno: Leonardo Reis da Silva ****** Matricula: 316357 ************",0
  17. Contador_caracteres     dw      ?
  18. Programa_encerrado      db      CR,LF,"Programa encerrado por decisao do usuario",CR,LF,0
  19. Extensao_digitada       db      6   dup (?)
  20. Ponto_par               db      ".par",CR,LF,0
  21. Caract_temp1            db      1
  22. Caract_temp2            db      1
  23. Quebra                  db      CR,LF,"O nome do arquivo eh: "
  24. Arquivo_ok              db      CR,LF,"ARQUIVO SUCESSO",CR,LF,0
  25. Arquivo_nok             db      CR,LF,"OCORREU UM ERRO NA ABERTURA DO ARQUIVO.",CR,LF,0
  26. Handle_arquivo          dw      ?
  27. Buffer_arquivo          db      1 dup(?),0
  28. Parede_altura_str       db      4 dup(?),0
  29. Parede_largura_str      db      4 dup(?),0
  30. Tamanho_ladrilho        dw      24
  31. String_ARQUIVO          db      "                             Arquivo aberto: ",0
  32. String_TOTAL            db      " Total de ladrilhos por cor:",0
  33. X_inicial               dw      ?
  34. X_final                 dw      ?
  35. Y_inicial               dw      ?
  36. Y_final                 dw      ?
  37. Comprimento_linha       dw      ?
  38. Cor_linha               db      ?
  39. Cor_rejunte             db      15
  40. Cor_temp                db      ?
  41. X_inicial_quadrado      dw      ?
  42. Y_inicial_quadrado      dw      ?
  43. X_final_quadrado        dw      ?
  44. Y_final_quadrado        dw      ?
  45. Lado_quadrado           dw      ?
  46. Contador_cores          db      0
  47. Posicao_contador        dw      0
  48.  
  49. ;;totalizadores de ladrilhos
  50. PRETO                   db      ?
  51. AZUL                    db      ?
  52. VERDE                   db      ?
  53. CIANO                   db      ?
  54. VERMELHO                db      ?
  55. MAGENTA                 db      ?
  56. MARROM                  db      ?
  57. CINZA_CLARO             db      ?
  58. CINZA_ESCURO            db      ?
  59. AZUL_CLARO              db      ?
  60. VERDE_CLARO             db      ?
  61. CIANO_CLARO             db      ?
  62. VERMELHO_CLARO          db      ?
  63. MAGENTA_CLARO           db      ?
  64. AMARELO                 db      ?
  65.  
  66. string db 10 dup('$')
  67.  
  68.         .code
  69.  
  70.         .startup
  71.        
  72.         ;--------------------------------------------------
  73.         call limpa_tela ;chama funcao de limpar a tela(WIP)
  74.         ;--------------------------------------------------
  75.        
  76.         ;---------------------------------------------------
  77.         mov Contador_caracteres,0   ;move 0 para o contador do nome do arquivo(num de caracteres)
  78.         ;----------------------------------------------------
  79.        
  80.        
  81.         ;-------------------------------------------------------------------
  82.         lea bx,Nome_e_cartao        ;exibe nome do aluno e cartao
  83.         call printf_s               ;passa o parametro em bx e chama a rotina
  84.         ;-------------------------------------------------------------------
  85.    
  86.        
  87.     etapa2:
  88.    
  89.         lea bx,Digite_o_nome        ;pede o nome do arquivo
  90.         call printf_s               ;passa o parametro em bx e chama a rotina
  91.        
  92.         mov     cx,8            ;move 30 para cx(tamanho maximo do nome do arquivo)
  93.         lea     bx,BufferTec        ;move o inicio do buffer do teclado para bx
  94.         call    ReadString          ;chama rotina de ler string do teclado
  95.        
  96.         ;;PROBLEMA: CORRIGIR ERRO QUANDO STRING POSSUI BS E TEM EXATAMENTE 8 CARACTERES
  97.        
  98.         lea ax,BufferTec            ;carrega *BufferTec para ax
  99.         sub ax,5                    ;e ajusta o ponteiro
  100.         add ax,Contador_caracteres  ;para as 4 ultimas posicoes do nome do arquivo
  101.                                     ;que, talvez, sera a extensao .par
  102.         ;;FIM DO PROBLEMA
  103.        
  104.         lea bx, Extensao_digitada   ;move para bx o ponteiro que ira receber uma copiar
  105.         call printf_s
  106.        
  107.         call remove_extensao        ;dos 4 ultimos caracteres do nome do arq. e chama
  108.                                     ;a funcao que ira remover a extensao e copiar
  109.        
  110.        
  111.        
  112.        
  113.         lea bx, Extensao_digitada   ;move ponteiro para a extensao digitada
  114.         call compara_extensao       ;para bx, chama a funcao que verifica
  115.         cmp bx,1                    ;se o arquivo continha um .par
  116.         je possui_extensao
  117.         jmp chama_poe_extensao
  118.        
  119.                             ;;aqui eh caso nao possua extensao, tera que colocar
  120.        
  121.        
  122. possui_extensao:            ;;aqui eh caso possua extensao .par, nao precisa por
  123.        
  124.         jmp chama_abrir_arquivo
  125.    
  126.  
  127. chama_poe_extensao:
  128.    
  129.         lea si, BufferTec
  130.         call poe_extensao
  131.    
  132. chama_abrir_arquivo:
  133.        
  134.         lea dx, BufferTec ;;passa o nome do arquivo em dx
  135.         call abre_arquivo ;;chama a funcao de abertura do arquivo
  136.        
  137.  
  138.         mov  bx, Handle_arquivo
  139.         call carrega_dimensoes      ;;ATENÇAO: AJUSTAR, CONSEGUIA PEGAR PRIMEIRA PARTE ANTES DA VIRGULA,
  140.                                     ;;MAS NAO O RESTO
  141.  
  142.        
  143.  
  144.        
  145.  
  146.         jmp termina
  147.  
  148.        
  149. etapa3:
  150.  
  151.         mov ah,0h           ;;chama tela grafica
  152.         mov al,12h          ;;640x480
  153.         int 10h             ;;chama interrupcao de gpu
  154.        
  155.         mov dl,0            ;;move cursor para
  156.         mov dh,0            ;;(0,0)
  157.         mov ah,02h         
  158.         mov bh,00h
  159.         int 10h             ;;chama interrupcao
  160.        
  161.         lea bx, Nome_e_cartao_grafico   ;;escreve dados do aluno
  162.         call printf_s                   ;;usando printf_s
  163.        
  164.    
  165.    
  166.    
  167.         mov dl,0
  168.         mov dh,24
  169.         mov ah,02h
  170.         mov bh,00h
  171.         int 10h
  172.         lea bx, String_TOTAL
  173.         call printf_s
  174.         lea bx, String_ARQUIVO
  175.         call printf_s
  176.         lea bx, BufferTec
  177.         call printf_s
  178.    
  179.    
  180.  
  181.  
  182.  
  183.  
  184.         mov dl,0            ;;move cursor para
  185.         mov dh,81           ;;fora da tela
  186.         mov ah,02h          ;;para nao interferir
  187.         mov bh,00h          ;;na tela
  188.         int 10h             ;;chama interrupcao
  189.        
  190.         ;;desenha moldura
  191.  
  192.         call desenha_moldura
  193.        
  194.  
  195.         mov dx, 420
  196.         call desenha_contadores
  197.        
  198.        
  199.         ;cmp    [Extensao_digitada],"      "    ;ao finalizar leitura, compara de foi so 1 caractere FAZER
  200.         ;jne        termina                 ;se nao, continua
  201.         ;lea    bx,Programa_encerrado   ;caso sim, diz que o programa foi encerrado(pois so
  202.         ;call   printf_s                ;foi digitado enter)
  203.        
  204.        
  205.        
  206.        
  207.        
  208.        
  209.     termina:    
  210.         .exit
  211.  
  212.  
  213.  
  214. ;-------------------------------------------------------------------------------------
  215. ;Função: carrega_dimensoes
  216. ;Objetivo: tendo um file handle valido, carrega as dimensoes da parede(em string) para
  217. ;as variaveis Parede_altura_str e Parede_largura_str
  218. ;Entradas:
  219. ;BX: Handle do arquivo
  220. ;--------------------------------------------------------------------------------------
  221. carrega_dimensoes proc near
  222.  
  223. lea si, Parede_altura_str
  224.  
  225. lendo_altura:
  226.     mov ah, 3fh
  227.     mov cx, 1
  228.     mov dx, offset Buffer_arquivo
  229.     int 21H
  230.     push bx
  231.     mov bl, Buffer_arquivo
  232.     cmp bl, Virgula
  233.     je lendo_largura
  234.     mov bl, Buffer_arquivo
  235.     mov [ si ], bl
  236.     lea bx, Buffer_arquivo
  237.     call printf_s
  238.     inc si
  239.     pop bx
  240.     jmp lendo_altura
  241.  
  242.  
  243. lendo_largura:
  244.  
  245. lea si, Parede_largura_str
  246.  
  247.  
  248.  
  249.  
  250. fim_dimensao:
  251.     ret
  252.  
  253.  
  254. carrega_dimensoes endp
  255.  
  256.  
  257. ;-------------------------------------------------------------------------------------
  258. ;Função: desenha_contadores
  259. ;Objetivo: dada uma altura y, desenha os sprites dos contadores nas 15 cores
  260. ;Entradas:
  261. ;DX: Y do desenho
  262. ;-------------------------------------------------------------------------------------
  263. desenha_contadores proc near
  264.  
  265. mov Posicao_contador, 9 ;;Começa em 9 o x para dar uma 'margem'
  266. mov Contador_cores, 0   ;;Comeca na cor 0, preta
  267.  
  268.     ;loop que desenhara 15 quadrados, das 15 cores
  269.     ;a cada iteracao, soma o tamanho do ladrilho no x
  270.     ;do proximo quadrado, para desloca-lo a direita.
  271.     ;tambem soma mais 18, para dar um espaco entre
  272.     ;esses quadrados.
  273.     ;quando acabam as 15 cores, retorna ao fluxo do programa.
  274.     loop_contadores:
  275.         mov ax, Posicao_contador
  276.         mov bx, Tamanho_ladrilho
  277.         mov cl, Contador_cores
  278.         call desenha_quadrado
  279.         inc Contador_cores
  280.         mov bx, Tamanho_ladrilho
  281.         add Posicao_contador, bx
  282.         add Posicao_contador, 18
  283.         cmp Contador_cores, 15
  284.         jne loop_contadores
  285.         ret
  286.  
  287. desenha_contadores endp
  288.  
  289. ;-------------------------------------------------------------------------------------
  290. ;Função: desenha_quadrado
  291. ;Objetivo: Dado um x,y inicial, tamanho do lado e cor, desenha um quadrado na tela
  292. ;Entradas:
  293. ;AX: X inicial
  294. ;BX: Tamanho do lado
  295. ;DX: Y inicial
  296. ;CL: Cor do quadrado
  297. ;-------------------------------------------------------------------------------------
  298. desenha_quadrado proc near
  299.  
  300. ;salva todos parametros em variaveis e empilha dx para nao interferir
  301. ;na funcao que desenhara todos os quadrados
  302. push dx
  303.  
  304. mov X_inicial_quadrado, ax
  305. mov Y_inicial_quadrado, dx
  306. mov Lado_quadrado, bx
  307. mov Cor_temp, cl
  308. mov Y_final_quadrado, dx
  309. add Y_final_quadrado, bx
  310.  
  311.  
  312. ;;loop que ira desenhar varias linhas horizontais da cor do quadrado
  313. loop_quadrado:
  314.  
  315.     mov ax, X_inicial_quadrado  ;retorna os parametros para os registradores
  316.     mov dx, Y_inicial_quadrado  ;pois podem ter sido alterados nas funcoes
  317.     mov bx, Lado_quadrado       ;chamadas
  318.     mov cl, Cor_temp            ;
  319.     call linha_horizontal       ;desenha linha horizontal com a funcao
  320.     inc Y_inicial_quadrado      ;incrementa o y da proxima linha
  321.     mov ax, Y_inicial_quadrado  ;pois desenha o quadrado com
  322.     cmp ax, Y_final_quadrado    ;sucessivas linhas verticais
  323.     jne loop_quadrado           ;enquanto nao desenhar um quadrado de bx-dimensao, continua
  324.  
  325.  
  326. ;;como o rejunte sao 4 linhas, desenha aqui
  327. mov ax, X_inicial_quadrado  ;em todas as 4 linhas ira retornar os parametros originais e fazer
  328. mov dx, Y_inicial_quadrado  ;modificacoes para desenhar as respectivas linhas corretamente
  329. mov bx, Lado_quadrado
  330. mov cl, 15
  331. sub dx, 1               ;;por algum motivo essa linha em especifico tem que aumentar em 1 seu comprimento se nao fica faltando 1px... VERIFICAR
  332. call linha_horizontal
  333.  
  334. mov ax, X_inicial_quadrado
  335. mov dx, Y_inicial_quadrado
  336. mov bx, Lado_quadrado
  337. sub dx, bx
  338. mov cl, 15
  339. call linha_horizontal
  340.  
  341. mov ax, X_inicial_quadrado
  342. mov dx, Y_inicial_quadrado
  343. mov bx, Lado_quadrado
  344. sub dx, bx
  345. mov cl, 15
  346. call linha_vertical
  347.  
  348. mov ax, X_inicial_quadrado
  349. mov dx, Y_inicial_quadrado
  350. mov bx, Lado_quadrado
  351. sub dx, bx
  352. add ax, bx
  353. mov cl, 15
  354. call linha_vertical
  355.  
  356.  
  357.  
  358. pop dx
  359.  
  360. ret
  361.  
  362. desenha_quadrado endp
  363. ;-------------------------------------------------------------------------------------
  364.  
  365. ;-------------------------------------------------------------------------------------
  366. ;Função: linha_horizontal
  367. ;Objetivo: desenha uma linha horizontal que inicia em um determinado x e tem  um
  368. ;determinado comprimento n
  369. ;Entradas:
  370. ;AX: X inicial
  371. ;BX: Comprimento da linha
  372. ;DX: Y inicial
  373. ;CL: Cor da linha
  374. ;-------------------------------------------------------------------------------------
  375. linha_horizontal proc near
  376.  
  377.  
  378.  
  379. mov X_inicial, ax   ; salva os parametros em variaveis para
  380. mov Y_inicial, dx   ; poder operar com os registradores
  381. mov Comprimento_linha, bx   ; com seguranca
  382. mov Cor_linha, cl
  383. add ax, Comprimento_linha   ; calcula o X final da linha somando
  384. mov X_final, ax             ; o comprimento desejado com o X inicial
  385.  
  386.  
  387. mov dx, Y_inicial           ; inicia chamada da funcao de escrever pixels
  388. mov cx, X_inicial           ; com X e Y iniciais em seus lugares
  389. mov bh, 0                   ; na camada 0
  390. mov ah, 0ch                 ; indica a funcao de pixel
  391. mov al, Cor_linha           ; poe a cor desejada pelo usuario
  392.  
  393. loop_horizontal:            ; loop que ira ir incrementando a coluna(x)
  394.     int 10h                 ; e vai ir colocando pixels enquanto
  395.     inc cx                  ; a linha nao tiver o comprimento final
  396.     cmp cx,X_final          ; calculado inicialmente
  397.     jne loop_horizontal
  398.  
  399.     ret
  400.  
  401.  
  402.  
  403.  
  404.  
  405. linha_horizontal endp
  406. ;--------------------------------------------------------------------------------------
  407.  
  408. ;-------------------------------------------------------------------------------------
  409. ;Função: linha_vertical
  410. ;Objetivo: desenha uma linha vertical que inicia em um determinado y e tem  um
  411. ;determinado comprimento n
  412. ;Entradas:
  413. ;AX: X inicial
  414. ;BX: Comprimento da linha
  415. ;DX: Y inicial
  416. ;CL: Cor da linha
  417. ;-------------------------------------------------------------------------------------
  418. linha_vertical proc near
  419.  
  420. ; FUNCIONA DE FORMA ANÁLOGA À FUNÇÃO DE LINHA HORIZONTAL,
  421. ; MAS CALCULA UM Y FINAL ATRAVÉS DA SOMA DO Y INICIAL
  422. ; COM O COMPRIMENTO DESEJADO, DIFERINDO DA VERTICAL
  423. ; POIS ESCREVE PIXELS INCREMENTANDO A LINHA A SER ESCRITO
  424. ; ENQUANTO ESSA LINHA NAO ULTRAPASSAR TAMANHO EM Y
  425. ; CALCULADO PELA SOMA INICIAL
  426.  
  427. mov X_inicial, ax
  428. mov Y_inicial, dx
  429. mov Comprimento_linha, bx
  430. mov Cor_linha, cl
  431. add dx, Comprimento_linha
  432. mov Y_final, dx
  433.  
  434.  
  435. mov dx, Y_inicial
  436. mov cx, X_inicial
  437. mov bh, 0
  438. mov ah, 0ch
  439. mov al, Cor_linha
  440.  
  441. loop_vertical:
  442.     int 10h
  443.     inc dx
  444.     cmp dx,Y_final
  445.     jne loop_vertical
  446.     ret
  447.  
  448.  
  449.  
  450.  
  451.  
  452. linha_vertical endp
  453. ;---------------------------------------------------------------------------
  454.  
  455. ;---------------------------------------------------------------------------
  456. ;Função: desenha_moldura
  457. ;Objetivo: Desenha a moldura da tela
  458. ;Entradas: nada
  459. ;---------------------------------------------------------------------------
  460. desenha_moldura proc near
  461.  
  462. ;Simplesmente usa as funcoes de desenhar linhas
  463. ;para escrever 4 linhas brancas simples na tela,
  464. ;a fim de criar a moldura.
  465.  
  466.         mov ax, 1
  467.         mov bx, 637
  468.         mov dx, 20
  469.         mov cl, 15
  470.         call linha_horizontal
  471.  
  472.         mov ax, 1
  473.         mov bx, 637
  474.         mov dx, 380
  475.         mov cl, 15
  476.         call linha_horizontal
  477.        
  478.        
  479.         mov ax, 1
  480.         mov bx, 360
  481.         mov dx, 20
  482.         mov cl, 15
  483.         call linha_vertical
  484.  
  485.         mov ax, 637
  486.         mov bx, 360
  487.         mov dx, 20
  488.         mov cl, 15
  489.         call linha_vertical
  490.  
  491.         ret
  492.  
  493.  
  494. desenha_moldura endp
  495. ;---------------------------------------------------------------------------
  496.  
  497.  
  498. ;---------------------------------------------------------------------------
  499. ; Função: abre_arquivo
  500. ; Objetivo: abre um arquivo e devolve em ax o handle do arquivo(caso abra com sucesso)
  501. ; e abre tela grafica(o que significa que o arquivo foi aberto com sucesso)
  502. ; ou retorna mensagem de erro na tela caso houver algum erro na abertura.
  503. ; Entradas:
  504. ; DX: *String contendo o nome do arquivo a ser aberto
  505. ;---------------------------------------------------------------------------
  506. abre_arquivo proc near
  507.  
  508.  
  509. mov ah, 3dh
  510. mov al, 0
  511. int 21h
  512.  
  513. mov Handle_arquivo, ax
  514.  
  515. jc abre_arquivo_erro
  516.  
  517.  
  518. ret
  519.  
  520. abre_arquivo_erro:
  521.  
  522.     lea bx, Arquivo_nok
  523.     call printf_s
  524.     jmp termina
  525.  
  526.  
  527. abre_arquivo endp  
  528. ;--------------------------------------------------------------------
  529. ;Fun��o: L� um string do teclado
  530. ;Entra: (S) -> DS:BX -> Ponteiro para o string
  531. ;       (M) -> CX -> numero maximo de caracteres aceitos
  532. ;--------------------------------------------------------------------
  533. ReadString  proc    near
  534.  
  535.         ;Pos = 0
  536.         mov     dx,0
  537.        
  538.  
  539. RDSTR_1:
  540.         ;while(1) {
  541.         ;   al = Int21(7)       // Espera pelo teclado
  542.         inc     Contador_caracteres
  543.         mov     ah,7
  544.         int     21H
  545.  
  546.         ;   if (al==CR) {
  547.         cmp     al,0DH
  548.         jne     RDSTR_A
  549.  
  550.         ;       *S = '\0'
  551.         mov     byte ptr[bx],0
  552.         ;       return
  553.         ret
  554.         ;   }
  555.  
  556. RDSTR_A:
  557.         ;   if (al==BS) {
  558.         cmp     al,08H
  559.         jne     RDSTR_B
  560.  
  561.         ;       if (Pos==0) continue;
  562.         cmp     dx,0
  563.         jz      RDSTR_1
  564.  
  565.         ;       Print (BS, SPACE, BS)
  566.         push    dx
  567.        
  568.         mov     dl,08H
  569.         mov     ah,2
  570.         int     21H
  571.        
  572.         mov     dl,' '
  573.         mov     ah,2
  574.         int     21H
  575.        
  576.         mov     dl,08H
  577.         mov     ah,2
  578.         int     21H
  579.        
  580.         pop     dx
  581.  
  582.         ;       --s
  583.         dec     bx
  584.         ;       ++M
  585.         inc     cx
  586.         ;       --Pos
  587.         dec     dx
  588.        
  589.         ;   }
  590.         jmp     RDSTR_1
  591.  
  592. RDSTR_B:
  593.         ;   if (M==0) continue
  594.         cmp     cx,0
  595.         je      RDSTR_1
  596.  
  597.         ;   if (al>=SPACE) {
  598.         cmp     al,' '
  599.         jl      RDSTR_1
  600.  
  601.         ;       *S = al
  602.         mov     [bx],al
  603.  
  604.         ;       ++S
  605.         inc     bx
  606.         ;       --M
  607.         dec     cx
  608.         ;       ++Pos
  609.         inc     dx
  610.  
  611.         ;       Int21 (s, AL)
  612.         push    dx
  613.         mov     dl,al
  614.         mov     ah,2
  615.         int     21H
  616.         pop     dx
  617.  
  618.         ;   }
  619.         ;}
  620.         jmp     RDSTR_1
  621.  
  622. ReadString  endp
  623.  
  624.  
  625.  
  626. ;
  627. ;--------------------------------------------------------------------
  628. ;Fun��o: Escrever um string na tela
  629. ;--------------------------------------------------------------------
  630. printf_s    proc    near
  631.  
  632. ;   While (*s!='\0') {
  633.     mov     dl,[bx]
  634.     cmp     dl,0
  635.     je      ps_1
  636.  
  637. ;       putchar(*s)
  638.     push    bx
  639.     mov     ah,2
  640.     int     21H
  641.     pop     bx
  642.  
  643. ;       ++s;
  644.     inc     bx
  645.        
  646. ;   }
  647.     jmp     printf_s
  648.        
  649. ps_1:
  650.     ret
  651.    
  652. printf_s    endp
  653.  
  654.  
  655. limpa_tela proc near
  656.  
  657.  
  658.  
  659. mov ax, 0700h  ; function 07, AL=0 means scroll whole window
  660. mov bh, 07h    ; character attribute = white on black
  661. mov cx, 0000h ; row = 0, col = 0
  662. mov dx, 184fh  ; row = 24 (0x18), col = 79 (0x4f)
  663. int 10h        ; call BIOS video interrupt
  664.  
  665.  
  666.  
  667. ret
  668.  
  669. limpa_tela endp
  670.  
  671.  
  672. ;--------------------------------------------------------------------
  673.     ;remove_extensao
  674.     ;recebe em ax ponteiro para os 4 ultimos caracteres do nome do arquivo
  675.     ;recebe em bx o ponteiro para a string que ira copiar os 4 ultimos caracteres
  676.     ;nao devolve nada, apenas escreve os ultimos 4 caracteres - uma possivel extensao -
  677.     ;para o endere�o contido no ponteiro em bx
  678.    
  679. ;--------------------------------------------------------------------
  680.  
  681. remove_extensao proc near
  682.  
  683.        
  684.         mov si, ax
  685.         mov cx, 6
  686. inicio_loop:
  687.         mov ah,[si]
  688.         mov [bx],ah
  689.         inc bx
  690.         inc si
  691.         dec cx
  692.         cmp cx, 0
  693.         jne inicio_loop
  694.         ret
  695.        
  696. remove_extensao endp
  697.  
  698. ;--------------------------------------------------------------------
  699. ; compara_extensao
  700. ; recebe em bx o ponteiro para a extensao digitada pelo usuario
  701. ; devolve bx = 0 se nao conter .par e bx = 1 se conter .par
  702. ;--------------------------------------------------------------------
  703. compara_extensao proc near
  704.  
  705.  
  706.         lea si,Ponto_par
  707.         mov cx, 4
  708.        
  709. loop_compara_extensao:
  710.         cmp [bx],8
  711.         jnz continua_compara_extensao
  712.         cmp [bx],13
  713.         jnz continua_compara_extensao
  714.         inc bx
  715.         jmp loop_compara_extensao
  716.        
  717. continua_compara_extensao:
  718.  
  719.         mov ah, [si]
  720.         mov Caract_temp1, ah
  721.         mov ah, [bx]
  722.         mov Caract_temp2, ah
  723.         inc bx
  724.         inc si
  725.         dec cx
  726.         mov ah, Caract_temp1
  727.         mov dh, Caract_temp2
  728.         cmp ah, dh
  729.         jne extensao_diferente
  730.         cmp cx, 0
  731.         jne loop_compara_extensao
  732.        
  733.         mov bx, 1
  734.         ret
  735.        
  736.         extensao_diferente:
  737.             mov bx, 0
  738.             ret
  739.            
  740. compara_extensao endp
  741.  
  742. ;------------------------------------------
  743. ; poe_extensao: dado um ponteiro para uma
  744. ; string em si, escreve .par nessa string
  745. ;------------------------------------------
  746. poe_extensao proc near
  747.  
  748. mov cx,8
  749.  
  750. loop_poe_extensao: 
  751.        
  752.         cmp [si], 32
  753.         jge continua_loop_extensao
  754.         jmp coloca_ponto_par
  755.        
  756. continua_loop_extensao:
  757.         dec cx
  758.         cmp cx,0
  759.         inc si
  760.         jne loop_poe_extensao
  761.        
  762.  
  763. coloca_ponto_par:
  764.         mov cx, 4
  765.         lea bx,Ponto_par
  766.        
  767. loop_coloca_ponto_par:
  768.         mov ax,[bx]
  769.         mov [si],ax
  770.         inc si
  771.         inc bx
  772.         dec cx
  773.         cmp cx,0
  774.         jne loop_coloca_ponto_par
  775.        
  776. ret
  777.  
  778. poe_extensao endp
  779.  
  780.  
  781. ;--------------------------------------------------------------------
  782.         end
  783. ;--------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement