SlideShare uma empresa Scribd logo
1 de 14
Baixar para ler offline
D:UFESMICRO_IGRAFICA.ASM                                              segunda-feira, 26 de outubro de 2009 13:35

;*******************************************************************************;
;                              FUNÇÃO GRÁFICA                                   ;
;*******************************************************************************;
;Essa função permite ao usuário plotar círculos, retas e escrever caracteres
;na tela do computador. Ela foi criada pelo Professor Paulo Amaral, para auxiliar
;os alunos no laboratório de microprocessadores da Universidade Federal do
;Espírito Santo.

;PARA USÁ-LA
;1-Copia esse arquivo e cole-o no bloco de notas. Salve como grafica.asm
;2-Abra o Prompt de Comando e entre no diretório onde está o arquivo grafica.asm
;3-Faça o download do arquivo linker + asm na página do professor Paulo Amaral
; http://www2.ele.ufes.br/~paulo/MicroprocessadoresI.htm , e extraia no diretorio
; onde você salvou a função grafica.asm
;4-Depois compile usando o comando: nasm grafica.asm
;5-Depois vc deve linkar o arquivo com o comando: freelink grafica.obj
;6-Agora é só executar: grafica.exe   .Veja o que aparece
;7-Modifique para criar o seu projeto

; Versão de 20/10/2009
; Corrigido erro de arredondamento na rotina line.

;INICIO DA FUNÇÃO

segment code
..start:
            mov                ax,data
            mov                ds,ax
            mov                ax,stack
            mov                ss,ax
            mov                sp,stacktop

; salvar modo corrente de video(vendo como está o modo de video da maquina)
            mov         ah,0Fh
            int         10h
            mov         [modo_anterior],al

; alterar modo de video para gráfico 640x480 16 cores
        mov         al,12h
        mov         ah,0
        int         10h


;desenhar retas

           mov          byte[cor],branco_intenso   ;antenas
           mov          ax,20
           push             ax
           mov          ax,400
           push             ax
           mov          ax,620
           push             ax
           mov          ax,400
           push             ax

                                                      -1-
D:UFESMICRO_IGRAFICA.ASM                                    segunda-feira, 26 de outubro de 2009 13:35

           call               line

           mov          byte[cor],marrom    ;antenas
           mov          ax,130
           push             ax
           mov          ax,270
           push             ax
           mov          ax,100
           push             ax
           mov          ax,300
           push             ax
           call             line

           mov          ax,130
           push             ax
           mov          ax,130
           push             ax
           mov          ax,100
           push             ax
           mov          ax,100
           push             ax
           call             line


;desenha circulos
        mov     byte[cor],azul          ;cabeça
        mov     ax,200
        push        ax
        mov     ax,200
        push        ax
        mov     ax,100
        push        ax
        call    circle

           mov          byte[cor],verde ;corpo
           mov          ax,450
           push             ax
           mov          ax,200
           push             ax
           mov          ax,190
           push             ax
           call         circle

           mov          ax,100   ;circulos das antenas
           push             ax
           mov          ax,100
           push             ax
           mov          ax,10
           push             ax
           call         circle

           mov          ax,100
           push             ax
           mov          ax,300

                                                         -2-
D:UFESMICRO_IGRAFICA.ASM                                            segunda-feira, 26 de outubro de 2009 13:35

           push             ax
           mov          ax,10
           push             ax
           call         circle

           mov          byte[cor],vermelho   ;circulos vermelhos
           mov          ax,500
           push             ax
           mov          ax,300
           push             ax
           mov          ax,50
           push             ax
           call         full_circle

           mov          ax,500
           push             ax
           mov          ax,100
           push             ax
           mov          ax,50
           push             ax
           call         full_circle

           mov          ax,350
           push             ax
           mov          ax,200
           push             ax
           mov          ax,50
           push             ax
           call         full_circle


;escrever uma mensagem

           mov              cx,14            ;número de caracteres
           mov              bx,0
           mov              dh,0             ;linha 0-29
           mov              dl,30            ;coluna 0-79
           mov          byte[cor],azul
l4:
           call         cursor
           mov          al,[bx+mens]
           call         caracter
           inc          bx          ;proximo caracter
           inc          dl          ;avanca a coluna
           inc          byte [cor]      ;mudar a cor para a seguinte
           loop         l4

           mov          ah,08h
           int          21h
           mov          ah,0            ; set video mode
           mov          al,[modo_anterior]      ; modo anterior
           int          10h
           mov          ax,4c00h
           int          21h

                                                        -3-
D:UFESMICRO_IGRAFICA.ASM                                              segunda-feira, 26 de outubro de 2009 13:35

;***************************************************************************
;
;   função cursor
;
; dh = linha (0-29) e dl=coluna (0-79)
cursor:
        pushf
        push        ax
        push        bx
        push        cx
        push        dx
        push        si
        push        di
        push        bp
        mov         ah,2
        mov         bh,0
        int         10h
        pop     bp
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        popf
        ret
;_____________________________________________________________________________
;
;   função caracter escrito na posição do cursor
;
; al= caracter a ser escrito
; cor definida na variavel cor
caracter:
        pushf
        push        ax
        push        bx
        push        cx
        push        dx
        push        si
        push        di
        push        bp
            mov         ah,9
            mov         bh,0
            mov         cx,1
        mov         bl,[cor]
            int         10h
        pop     bp
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        popf

                                               -4-
D:UFESMICRO_IGRAFICA.ASM                                              segunda-feira, 26 de outubro de 2009 13:35

        ret
;_____________________________________________________________________________
;
;   função plot_xy
;
; push x; push y; call plot_xy; (x<639, y<479)
; cor definida na variavel cor
plot_xy:
        push        bp
        mov     bp,sp
        pushf
        push        ax
        push        bx
        push        cx
        push        dx
        push        si
        push        di
        mov         ah,0ch
        mov         al,[cor]
        mov         bh,0
        mov         dx,479
        sub     dx,[bp+4]
        mov         cx,[bp+6]
        int         10h
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        popf
        pop     bp
        ret     4
;_____________________________________________________________________________
;    função circle
;    push xc; push yc; push r; call circle; (xc+r<639,yc+r<479)e(xc-r>0,yc-r>0)
; cor definida na variavel cor
circle:
    push    bp
    mov     bp,sp
    pushf                        ;coloca os flags na pilha
    push    ax
    push    bx
    push    cx
    push    dx
    push    si
    push    di

     mov         ax,[bp+8]    ; resgata xc
     mov         bx,[bp+6]    ; resgata yc
     mov         cx,[bp+4]    ; resgata r

     mov         dx,bx
     add         dx,cx        ;ponto extremo superior

                                                        -5-
D:UFESMICRO_IGRAFICA.ASM                                                       segunda-feira, 26 de outubro de 2009 13:35

     push    ax
     push    dx
     call plot_xy

     mov     dx,bx
     sub     dx,cx               ;ponto extremo inferior
     push    ax
     push    dx
     call plot_xy

     mov     dx,ax
     add     dx,cx               ;ponto extremo direita
     push    dx
     push    bx
     call plot_xy

     mov     dx,ax
     sub     dx,cx               ;ponto extremo esquerda
     push    dx
     push    bx
     call plot_xy

     mov         di,cx
     sub         di,1          ;di=r-1
     mov         dx,0         ;dx será a variável x. cx é a variavel y

;aqui em cima a lógica foi invertida, 1-r => r-1
;e as comparações passaram a ser jl => jg, assim garante
;valores positivos para d

stay:                         ;loop
    mov          si,di
    cmp          si,0
    jg           inf           ;caso d for menor que 0, seleciona pixel superior (não salta)
    mov          si,dx           ;o jl é importante porque trata-se de conta com sinal
    sal          si,1            ;multiplica por doi (shift arithmetic left)
    add          si,3
    add          di,si          ;nesse ponto d=d+2*dx+3
    inc          dx           ;incrementa dx
    jmp          plotar
inf:
    mov          si,dx
    sub          si,cx           ;faz x - y (dx-cx), e salva em di
    sal          si,1
    add          si,5
    add          di,si            ;nesse ponto d=d+2*(dx-cx)+5
    inc          dx           ;incrementa x (dx)
    dec          cx           ;decrementa y (cx)

plotar:
    mov          si,dx
    add          si,ax
    push         si              ;coloca a abcisa x+xc na pilha
    mov          si,cx

                                                           -6-
D:UFESMICRO_IGRAFICA.ASM                                      segunda-feira, 26 de outubro de 2009 13:35

     add        si,bx
     push       si            ;coloca a ordenada y+yc na pilha
     call    plot_xy          ;toma conta do segundo octante
     mov        si,ax
     add        si,dx
     push       si            ;coloca a abcisa xc+x na pilha
     mov        si,bx
     sub        si,cx
     push       si            ;coloca a ordenada yc-y na pilha
     call    plot_xy          ;toma conta do sétimo octante
     mov        si,ax
     add        si,cx
     push       si            ;coloca a abcisa xc+y na pilha
     mov        si,bx
     add        si,dx
     push       si            ;coloca a ordenada yc+x na pilha
     call    plot_xy          ;toma conta do segundo octante
     mov        si,ax
     add        si,cx
     push       si            ;coloca a abcisa xc+y na pilha
     mov        si,bx
     sub        si,dx
     push       si            ;coloca a ordenada yc-x na pilha
     call    plot_xy          ;toma conta do oitavo octante
     mov        si,ax
     sub        si,dx
     push       si            ;coloca a abcisa xc-x na pilha
     mov        si,bx
     add        si,cx
     push       si            ;coloca a ordenada yc+y na pilha
     call    plot_xy          ;toma conta do terceiro octante
     mov        si,ax
     sub        si,dx
     push       si            ;coloca a abcisa xc-x na pilha
     mov        si,bx
     sub        si,cx
     push       si            ;coloca a ordenada yc-y na pilha
     call    plot_xy          ;toma conta do sexto octante
     mov        si,ax
     sub        si,cx
     push       si            ;coloca a abcisa xc-y na pilha
     mov        si,bx
     sub        si,dx
     push       si            ;coloca a ordenada yc-x na pilha
     call    plot_xy          ;toma conta do quinto octante
     mov        si,ax
     sub        si,cx
     push       si            ;coloca a abcisa xc-y na pilha
     mov        si,bx
     add        si,dx
     push       si            ;coloca a ordenada yc-x na pilha
     call    plot_xy          ;toma conta do quarto octante

     cmp         cx,dx

                                                     -7-
D:UFESMICRO_IGRAFICA.ASM                                                          segunda-feira, 26 de outubro de 2009 13:35

     jb          fim_circle      ;se cx (y) está abaixo de dx (x), termina
     jmp         stay            ;se cx (y) está acima de dx (x), continua no loop


fim_circle:
    pop     di
    pop     si
    pop     dx
    pop     cx
    pop     bx
    pop     ax
    popf
    pop     bp
    ret     8
;-----------------------------------------------------------------------------
;    função full_circle
;    push xc; push yc; push r; call full_circle; (xc+r<639,yc+r<479)e(xc-r>0,yc-r>0)
; cor definida na variavel cor
full_circle:
    push    bp
    mov     bp,sp
    pushf                        ;coloca os flags na pilha
    push    ax
    push    bx
    push    cx
    push    dx
    push    si
    push    di

     mov         ax,[bp+8]        ; resgata xc
     mov         bx,[bp+6]        ; resgata yc
     mov         cx,[bp+4]        ; resgata r

     mov     si,bx
     sub     si,cx
     push    ax                  ;coloca xc na pilha
     push    si                  ;coloca yc-r na pilha
     mov     si,bx
     add     si,cx
     push    ax               ;coloca xc na pilha
     push    si               ;coloca yc+r na pilha
     call line



     mov         di,cx
     sub         di,1          ;di=r-1
     mov         dx,0         ;dx será a variável x. cx é a variavel y

;aqui em cima a lógica foi invertida, 1-r => r-1
;e as comparações passaram a ser jl => jg, assim garante
;valores positivos para d

stay_full:                       ;loop
    mov          si,di

                                                         -8-
D:UFESMICRO_IGRAFICA.ASM                                                    segunda-feira, 26 de outubro de 2009 13:35

    cmp          si,0
    jg           inf_full       ;caso d for menor que 0, seleciona pixel superior (não         salta)
    mov          si,dx       ;o jl é importante porque trata-se de conta com sinal
    sal          si,1        ;multiplica por doi (shift arithmetic left)
    add          si,3
    add          di,si     ;nesse ponto d=d+2*dx+3
    inc          dx      ;incrementa dx
    jmp          plotar_full
inf_full:
    mov          si,dx
    sub          si,cx           ;faz x - y (dx-cx), e salva em di
    sal          si,1
    add          si,5
    add          di,si            ;nesse ponto d=d+2*(dx-cx)+5
    inc          dx           ;incrementa x (dx)
    dec          cx           ;decrementa y (cx)

plotar_full:
    mov     si,ax
    add     si,cx
    push    si                ;coloca a abcisa y+xc na pilha
    mov     si,bx
    sub     si,dx
    push    si                ;coloca a ordenada yc-x na pilha
    mov     si,ax
    add     si,cx
    push    si                ;coloca a abcisa y+xc na pilha
    mov     si,bx
    add     si,dx
    push    si                ;coloca a ordenada yc+x na pilha
    call    line

     mov         si,ax
     add         si,dx
     push        si           ;coloca a abcisa xc+x na pilha
     mov         si,bx
     sub         si,cx
     push        si           ;coloca a ordenada yc-y na pilha
     mov         si,ax
     add         si,dx
     push        si           ;coloca a abcisa xc+x na pilha
     mov         si,bx
     add         si,cx
     push        si           ;coloca a ordenada yc+y na pilha
     call        line

     mov         si,ax
     sub         si,dx
     push        si           ;coloca a abcisa xc-x na pilha
     mov         si,bx
     sub         si,cx
     push        si           ;coloca a ordenada yc-y na pilha
     mov         si,ax
     sub         si,dx

                                                         -9-
D:UFESMICRO_IGRAFICA.ASM                                                   segunda-feira, 26 de outubro de 2009 13:35

     push        si           ;coloca a abcisa xc-x na pilha
     mov         si,bx
     add         si,cx
     push        si           ;coloca a ordenada yc+y na pilha
     call        line

     mov         si,ax
     sub         si,cx
     push        si           ;coloca a abcisa xc-y na pilha
     mov         si,bx
     sub         si,dx
     push        si           ;coloca a ordenada yc-x na pilha
     mov         si,ax
     sub         si,cx
     push        si           ;coloca a abcisa xc-y na pilha
     mov         si,bx
     add         si,dx
     push        si           ;coloca a ordenada yc+x na pilha
     call        line

     cmp         cx,dx
     jb          fim_full_circle ;se cx (y) está abaixo de dx (x), termina
     jmp         stay_full      ;se cx (y) está acima de dx (x), continua no loop


fim_full_circle:
    pop     di
    pop     si
    pop     dx
    pop     cx
    pop     bx
    pop     ax
    popf
    pop     bp
    ret     8
;-----------------------------------------------------------------------------
;
;   função line
;
; push x1; push y1; push x2; push y2; call line; (x<639, y<479)
line:
        push        bp
        mov     bp,sp
        pushf                        ;coloca os flags na pilha
        push        ax
        push        bx
        push        cx
        push        dx
        push        si
        push        di
        mov     ax,[bp+10]   ; resgata os valores das coordenadas
        mov     bx,[bp+8]    ; resgata os valores das coordenadas
        mov     cx,[bp+6]    ; resgata os valores das coordenadas
        mov     dx,[bp+4]    ; resgata os valores das coordenadas

                                                         -10-
D:UFESMICRO_IGRAFICA.ASM                                                segunda-feira, 26 de outubro de 2009 13:35

        cmp     ax,cx
        je      line2
        jb      line1
        xchg        ax,cx
        xchg        bx,dx
        jmp     line1
line2:      ; deltax=0
        cmp     bx,dx ;subtrai dx de bx
        jb      line3
        xchg        bx,dx        ;troca os valores de bx e dx entre eles
line3: ; dx > bx
        push        ax
        push        bx
        call        plot_xy
        cmp     bx,dx
        jne     line31
        jmp     fim_line
line31:     inc     bx
        jmp     line3
;deltax <>0
line1:
; comparar módulos de deltax e deltay sabendo que cx>ax
    ; cx > ax
        push        cx
        sub     cx,ax
        mov     [deltax],cx
        pop     cx
        push        dx
        sub     dx,bx
        ja      line32
        neg     dx
line32:
        mov     [deltay],dx
        pop     dx

           push             ax
           mov          ax,[deltax]
           cmp          ax,[deltay]
           pop          ax
           jb           line5

     ; cx > ax e deltax>deltay
         push        cx
         sub     cx,ax
         mov     [deltax],cx
         pop     cx
         push        dx
         sub     dx,bx
         mov     [deltay],dx
         pop     dx

           mov          si,ax
line4:
           push               ax

                                               -11-
D:UFESMICRO_IGRAFICA.ASM                                  segunda-feira, 26 de outubro de 2009 13:35

        push        dx
        push        si
        sub     si,ax   ;(x-x1)
        mov     ax,[deltay]
        imul        si
        mov     si,[deltax]     ;arredondar
        shr     si,1
; se numerador (DX)>0 soma se <0 subtrai
        cmp     dx,0
        jl      ar1
        add     ax,si
        adc     dx,0
        jmp     arc1
ar1:        sub     ax,si
        sbb     dx,0
arc1:
        idiv        word [deltax]
        add     ax,bx
        pop     si
        push        si
        push        ax
        call        plot_xy
        pop     dx
        pop     ax
        cmp     si,cx
        je      fim_line
        inc     si
        jmp     line4

line5:         cmp     bx,dx
           jb      line7
           xchg        ax,cx
           xchg        bx,dx
line7:
           push             cx
           sub          cx,ax
           mov          [deltax],cx
           pop          cx
           push             dx
           sub          dx,bx
           mov          [deltay],dx
           pop          dx




           mov          si,bx
line6:
           push             dx
           push             si
           push             ax
           sub          si,bx   ;(y-y1)
           mov          ax,[deltax]
           imul             si
           mov          si,[deltay]     ;arredondar

                                                      -12-
D:UFESMICRO_IGRAFICA.ASM                                            segunda-feira, 26 de outubro de 2009 13:35

        shr     si,1
; se numerador (DX)>0 soma se <0 subtrai
        cmp     dx,0
        jl      ar2
        add     ax,si
        adc     dx,0
        jmp     arc2
ar2:        sub     ax,si
        sbb     dx,0
arc2:
        idiv        word [deltay]
        mov     di,ax
        pop     ax
        add     di,ax
        pop     si
        push        di
        push        si
        call        plot_xy
        pop     dx
        cmp     si,dx
        je      fim_line
        inc     si
        jmp     line6

fim_line:
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        popf
        pop     bp
        ret     8
;*******************************************************************
segment data

cor           db         branco_intenso

;     I   R   G   B   COR
;     0   0   0   0   preto
;     0   0   0   1   azul
;     0   0   1   0   verde
;     0   0   1   1   cyan
;     0   1   0   0   vermelho
;     0   1   0   1   magenta
;     0   1   1   0   marrom
;     0   1   1   1   branco
;     1   0   0   0   cinza
;     1   0   0   1   azul claro
;     1   0   1   0   verde claro
;     1   0   1   1   cyan claro
;     1   1   0   0   rosa
;     1   1   0   1   magenta claro

                                               -13-
D:UFESMICRO_IGRAFICA.ASM                                              segunda-feira, 26 de outubro de 2009 13:35

;    1 1 1 0 amarelo
;    1 1 1 1 branco intenso

preto       equ     0
azul        equ     1
verde       equ     2
cyan        equ     3
vermelho    equ     4
magenta     equ     5
marrom      equ     6
branco      equ     7
cinza       equ     8
azul_claro equ      9
verde_claro equ     10
cyan_claro equ      11
rosa        equ     12
magenta_claro   equ           13
amarelo     equ     14
branco_intenso equ            15

modo_anterior   db      0
linha       dw          0
coluna      dw          0
deltax      dw      0
deltay      dw      0
mens        db          'Funcao Grafica'
;*************************************************************************
segment stack stack
            resb        512
stacktop:




                                               -14-

Mais conteúdo relacionado

Destaque

ValueFrame - myynnistä toimitukseen -seminaari 17.11.2011 (id 2134) (id 2212)
ValueFrame - myynnistä toimitukseen -seminaari 17.11.2011 (id 2134) (id 2212)ValueFrame - myynnistä toimitukseen -seminaari 17.11.2011 (id 2134) (id 2212)
ValueFrame - myynnistä toimitukseen -seminaari 17.11.2011 (id 2134) (id 2212)ValueFrame Oy
 
Plant And Animal Environments
Plant And Animal EnvironmentsPlant And Animal Environments
Plant And Animal EnvironmentsJennifer Brumley
 
Roi Xuong Gieng
Roi Xuong GiengRoi Xuong Gieng
Roi Xuong Giengbienluu
 
Anixter Overview
Anixter OverviewAnixter Overview
Anixter Overviewrrakib
 
Technology Products as Timeshare VS Reading and Sports
Technology Products as Timeshare VS Reading and SportsTechnology Products as Timeshare VS Reading and Sports
Technology Products as Timeshare VS Reading and SportsBilal Ahmad
 
Thy myth of hacking Oracle
Thy myth of hacking OracleThy myth of hacking Oracle
Thy myth of hacking OracleErmando
 
Tilitoimiston laajentunut palvelutarjooma_160410
Tilitoimiston laajentunut palvelutarjooma_160410Tilitoimiston laajentunut palvelutarjooma_160410
Tilitoimiston laajentunut palvelutarjooma_160410ValueFrame Oy
 
Trial Scheme On School Drug
Trial Scheme On School DrugTrial Scheme On School Drug
Trial Scheme On School Druglamkinyan
 
Whitehawkcovenantslots284 720
Whitehawkcovenantslots284 720Whitehawkcovenantslots284 720
Whitehawkcovenantslots284 720Desiree Troia
 

Destaque (14)

ValueFrame - myynnistä toimitukseen -seminaari 17.11.2011 (id 2134) (id 2212)
ValueFrame - myynnistä toimitukseen -seminaari 17.11.2011 (id 2134) (id 2212)ValueFrame - myynnistä toimitukseen -seminaari 17.11.2011 (id 2134) (id 2212)
ValueFrame - myynnistä toimitukseen -seminaari 17.11.2011 (id 2134) (id 2212)
 
Plant And Animal Environments
Plant And Animal EnvironmentsPlant And Animal Environments
Plant And Animal Environments
 
Hispanic Cyberstudy 2010
Hispanic Cyberstudy 2010Hispanic Cyberstudy 2010
Hispanic Cyberstudy 2010
 
Roi Xuong Gieng
Roi Xuong GiengRoi Xuong Gieng
Roi Xuong Gieng
 
Anixter Overview
Anixter OverviewAnixter Overview
Anixter Overview
 
Added Value Luxury Archetypes
Added Value Luxury ArchetypesAdded Value Luxury Archetypes
Added Value Luxury Archetypes
 
Technology Products as Timeshare VS Reading and Sports
Technology Products as Timeshare VS Reading and SportsTechnology Products as Timeshare VS Reading and Sports
Technology Products as Timeshare VS Reading and Sports
 
Thy myth of hacking Oracle
Thy myth of hacking OracleThy myth of hacking Oracle
Thy myth of hacking Oracle
 
2011 some photos
2011 some photos2011 some photos
2011 some photos
 
Tilitoimiston laajentunut palvelutarjooma_160410
Tilitoimiston laajentunut palvelutarjooma_160410Tilitoimiston laajentunut palvelutarjooma_160410
Tilitoimiston laajentunut palvelutarjooma_160410
 
Slidecast
SlidecastSlidecast
Slidecast
 
Trial Scheme On School Drug
Trial Scheme On School DrugTrial Scheme On School Drug
Trial Scheme On School Drug
 
Whitehawkcovenantslots284 720
Whitehawkcovenantslots284 720Whitehawkcovenantslots284 720
Whitehawkcovenantslots284 720
 
Front end anno 2014
Front end anno 2014Front end anno 2014
Front end anno 2014
 

Último

5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdfLeloIurk1
 
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfplanejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfmaurocesarpaesalmeid
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfHELENO FAVACHO
 
Bloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docxBloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docxkellyneamaral
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Ilda Bicacro
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfFrancisco Márcio Bezerra Oliveira
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...azulassessoria9
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfHELENO FAVACHO
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfLeloIurk1
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.Mary Alvarenga
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdfLeloIurk1
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...IsabelPereira2010
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfHELENO FAVACHO
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéisines09cachapa
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecniCleidianeCarvalhoPer
 

Último (20)

5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfplanejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
 
Bloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docxBloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docx
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéis
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 

Função gráfica para desenho em assembly

  • 1. D:UFESMICRO_IGRAFICA.ASM segunda-feira, 26 de outubro de 2009 13:35 ;*******************************************************************************; ; FUNÇÃO GRÁFICA ; ;*******************************************************************************; ;Essa função permite ao usuário plotar círculos, retas e escrever caracteres ;na tela do computador. Ela foi criada pelo Professor Paulo Amaral, para auxiliar ;os alunos no laboratório de microprocessadores da Universidade Federal do ;Espírito Santo. ;PARA USÁ-LA ;1-Copia esse arquivo e cole-o no bloco de notas. Salve como grafica.asm ;2-Abra o Prompt de Comando e entre no diretório onde está o arquivo grafica.asm ;3-Faça o download do arquivo linker + asm na página do professor Paulo Amaral ; http://www2.ele.ufes.br/~paulo/MicroprocessadoresI.htm , e extraia no diretorio ; onde você salvou a função grafica.asm ;4-Depois compile usando o comando: nasm grafica.asm ;5-Depois vc deve linkar o arquivo com o comando: freelink grafica.obj ;6-Agora é só executar: grafica.exe .Veja o que aparece ;7-Modifique para criar o seu projeto ; Versão de 20/10/2009 ; Corrigido erro de arredondamento na rotina line. ;INICIO DA FUNÇÃO segment code ..start: mov ax,data mov ds,ax mov ax,stack mov ss,ax mov sp,stacktop ; salvar modo corrente de video(vendo como está o modo de video da maquina) mov ah,0Fh int 10h mov [modo_anterior],al ; alterar modo de video para gráfico 640x480 16 cores mov al,12h mov ah,0 int 10h ;desenhar retas mov byte[cor],branco_intenso ;antenas mov ax,20 push ax mov ax,400 push ax mov ax,620 push ax mov ax,400 push ax -1-
  • 2. D:UFESMICRO_IGRAFICA.ASM segunda-feira, 26 de outubro de 2009 13:35 call line mov byte[cor],marrom ;antenas mov ax,130 push ax mov ax,270 push ax mov ax,100 push ax mov ax,300 push ax call line mov ax,130 push ax mov ax,130 push ax mov ax,100 push ax mov ax,100 push ax call line ;desenha circulos mov byte[cor],azul ;cabeça mov ax,200 push ax mov ax,200 push ax mov ax,100 push ax call circle mov byte[cor],verde ;corpo mov ax,450 push ax mov ax,200 push ax mov ax,190 push ax call circle mov ax,100 ;circulos das antenas push ax mov ax,100 push ax mov ax,10 push ax call circle mov ax,100 push ax mov ax,300 -2-
  • 3. D:UFESMICRO_IGRAFICA.ASM segunda-feira, 26 de outubro de 2009 13:35 push ax mov ax,10 push ax call circle mov byte[cor],vermelho ;circulos vermelhos mov ax,500 push ax mov ax,300 push ax mov ax,50 push ax call full_circle mov ax,500 push ax mov ax,100 push ax mov ax,50 push ax call full_circle mov ax,350 push ax mov ax,200 push ax mov ax,50 push ax call full_circle ;escrever uma mensagem mov cx,14 ;número de caracteres mov bx,0 mov dh,0 ;linha 0-29 mov dl,30 ;coluna 0-79 mov byte[cor],azul l4: call cursor mov al,[bx+mens] call caracter inc bx ;proximo caracter inc dl ;avanca a coluna inc byte [cor] ;mudar a cor para a seguinte loop l4 mov ah,08h int 21h mov ah,0 ; set video mode mov al,[modo_anterior] ; modo anterior int 10h mov ax,4c00h int 21h -3-
  • 4. D:UFESMICRO_IGRAFICA.ASM segunda-feira, 26 de outubro de 2009 13:35 ;*************************************************************************** ; ; função cursor ; ; dh = linha (0-29) e dl=coluna (0-79) cursor: pushf push ax push bx push cx push dx push si push di push bp mov ah,2 mov bh,0 int 10h pop bp pop di pop si pop dx pop cx pop bx pop ax popf ret ;_____________________________________________________________________________ ; ; função caracter escrito na posição do cursor ; ; al= caracter a ser escrito ; cor definida na variavel cor caracter: pushf push ax push bx push cx push dx push si push di push bp mov ah,9 mov bh,0 mov cx,1 mov bl,[cor] int 10h pop bp pop di pop si pop dx pop cx pop bx pop ax popf -4-
  • 5. D:UFESMICRO_IGRAFICA.ASM segunda-feira, 26 de outubro de 2009 13:35 ret ;_____________________________________________________________________________ ; ; função plot_xy ; ; push x; push y; call plot_xy; (x<639, y<479) ; cor definida na variavel cor plot_xy: push bp mov bp,sp pushf push ax push bx push cx push dx push si push di mov ah,0ch mov al,[cor] mov bh,0 mov dx,479 sub dx,[bp+4] mov cx,[bp+6] int 10h pop di pop si pop dx pop cx pop bx pop ax popf pop bp ret 4 ;_____________________________________________________________________________ ; função circle ; push xc; push yc; push r; call circle; (xc+r<639,yc+r<479)e(xc-r>0,yc-r>0) ; cor definida na variavel cor circle: push bp mov bp,sp pushf ;coloca os flags na pilha push ax push bx push cx push dx push si push di mov ax,[bp+8] ; resgata xc mov bx,[bp+6] ; resgata yc mov cx,[bp+4] ; resgata r mov dx,bx add dx,cx ;ponto extremo superior -5-
  • 6. D:UFESMICRO_IGRAFICA.ASM segunda-feira, 26 de outubro de 2009 13:35 push ax push dx call plot_xy mov dx,bx sub dx,cx ;ponto extremo inferior push ax push dx call plot_xy mov dx,ax add dx,cx ;ponto extremo direita push dx push bx call plot_xy mov dx,ax sub dx,cx ;ponto extremo esquerda push dx push bx call plot_xy mov di,cx sub di,1 ;di=r-1 mov dx,0 ;dx será a variável x. cx é a variavel y ;aqui em cima a lógica foi invertida, 1-r => r-1 ;e as comparações passaram a ser jl => jg, assim garante ;valores positivos para d stay: ;loop mov si,di cmp si,0 jg inf ;caso d for menor que 0, seleciona pixel superior (não salta) mov si,dx ;o jl é importante porque trata-se de conta com sinal sal si,1 ;multiplica por doi (shift arithmetic left) add si,3 add di,si ;nesse ponto d=d+2*dx+3 inc dx ;incrementa dx jmp plotar inf: mov si,dx sub si,cx ;faz x - y (dx-cx), e salva em di sal si,1 add si,5 add di,si ;nesse ponto d=d+2*(dx-cx)+5 inc dx ;incrementa x (dx) dec cx ;decrementa y (cx) plotar: mov si,dx add si,ax push si ;coloca a abcisa x+xc na pilha mov si,cx -6-
  • 7. D:UFESMICRO_IGRAFICA.ASM segunda-feira, 26 de outubro de 2009 13:35 add si,bx push si ;coloca a ordenada y+yc na pilha call plot_xy ;toma conta do segundo octante mov si,ax add si,dx push si ;coloca a abcisa xc+x na pilha mov si,bx sub si,cx push si ;coloca a ordenada yc-y na pilha call plot_xy ;toma conta do sétimo octante mov si,ax add si,cx push si ;coloca a abcisa xc+y na pilha mov si,bx add si,dx push si ;coloca a ordenada yc+x na pilha call plot_xy ;toma conta do segundo octante mov si,ax add si,cx push si ;coloca a abcisa xc+y na pilha mov si,bx sub si,dx push si ;coloca a ordenada yc-x na pilha call plot_xy ;toma conta do oitavo octante mov si,ax sub si,dx push si ;coloca a abcisa xc-x na pilha mov si,bx add si,cx push si ;coloca a ordenada yc+y na pilha call plot_xy ;toma conta do terceiro octante mov si,ax sub si,dx push si ;coloca a abcisa xc-x na pilha mov si,bx sub si,cx push si ;coloca a ordenada yc-y na pilha call plot_xy ;toma conta do sexto octante mov si,ax sub si,cx push si ;coloca a abcisa xc-y na pilha mov si,bx sub si,dx push si ;coloca a ordenada yc-x na pilha call plot_xy ;toma conta do quinto octante mov si,ax sub si,cx push si ;coloca a abcisa xc-y na pilha mov si,bx add si,dx push si ;coloca a ordenada yc-x na pilha call plot_xy ;toma conta do quarto octante cmp cx,dx -7-
  • 8. D:UFESMICRO_IGRAFICA.ASM segunda-feira, 26 de outubro de 2009 13:35 jb fim_circle ;se cx (y) está abaixo de dx (x), termina jmp stay ;se cx (y) está acima de dx (x), continua no loop fim_circle: pop di pop si pop dx pop cx pop bx pop ax popf pop bp ret 8 ;----------------------------------------------------------------------------- ; função full_circle ; push xc; push yc; push r; call full_circle; (xc+r<639,yc+r<479)e(xc-r>0,yc-r>0) ; cor definida na variavel cor full_circle: push bp mov bp,sp pushf ;coloca os flags na pilha push ax push bx push cx push dx push si push di mov ax,[bp+8] ; resgata xc mov bx,[bp+6] ; resgata yc mov cx,[bp+4] ; resgata r mov si,bx sub si,cx push ax ;coloca xc na pilha push si ;coloca yc-r na pilha mov si,bx add si,cx push ax ;coloca xc na pilha push si ;coloca yc+r na pilha call line mov di,cx sub di,1 ;di=r-1 mov dx,0 ;dx será a variável x. cx é a variavel y ;aqui em cima a lógica foi invertida, 1-r => r-1 ;e as comparações passaram a ser jl => jg, assim garante ;valores positivos para d stay_full: ;loop mov si,di -8-
  • 9. D:UFESMICRO_IGRAFICA.ASM segunda-feira, 26 de outubro de 2009 13:35 cmp si,0 jg inf_full ;caso d for menor que 0, seleciona pixel superior (não salta) mov si,dx ;o jl é importante porque trata-se de conta com sinal sal si,1 ;multiplica por doi (shift arithmetic left) add si,3 add di,si ;nesse ponto d=d+2*dx+3 inc dx ;incrementa dx jmp plotar_full inf_full: mov si,dx sub si,cx ;faz x - y (dx-cx), e salva em di sal si,1 add si,5 add di,si ;nesse ponto d=d+2*(dx-cx)+5 inc dx ;incrementa x (dx) dec cx ;decrementa y (cx) plotar_full: mov si,ax add si,cx push si ;coloca a abcisa y+xc na pilha mov si,bx sub si,dx push si ;coloca a ordenada yc-x na pilha mov si,ax add si,cx push si ;coloca a abcisa y+xc na pilha mov si,bx add si,dx push si ;coloca a ordenada yc+x na pilha call line mov si,ax add si,dx push si ;coloca a abcisa xc+x na pilha mov si,bx sub si,cx push si ;coloca a ordenada yc-y na pilha mov si,ax add si,dx push si ;coloca a abcisa xc+x na pilha mov si,bx add si,cx push si ;coloca a ordenada yc+y na pilha call line mov si,ax sub si,dx push si ;coloca a abcisa xc-x na pilha mov si,bx sub si,cx push si ;coloca a ordenada yc-y na pilha mov si,ax sub si,dx -9-
  • 10. D:UFESMICRO_IGRAFICA.ASM segunda-feira, 26 de outubro de 2009 13:35 push si ;coloca a abcisa xc-x na pilha mov si,bx add si,cx push si ;coloca a ordenada yc+y na pilha call line mov si,ax sub si,cx push si ;coloca a abcisa xc-y na pilha mov si,bx sub si,dx push si ;coloca a ordenada yc-x na pilha mov si,ax sub si,cx push si ;coloca a abcisa xc-y na pilha mov si,bx add si,dx push si ;coloca a ordenada yc+x na pilha call line cmp cx,dx jb fim_full_circle ;se cx (y) está abaixo de dx (x), termina jmp stay_full ;se cx (y) está acima de dx (x), continua no loop fim_full_circle: pop di pop si pop dx pop cx pop bx pop ax popf pop bp ret 8 ;----------------------------------------------------------------------------- ; ; função line ; ; push x1; push y1; push x2; push y2; call line; (x<639, y<479) line: push bp mov bp,sp pushf ;coloca os flags na pilha push ax push bx push cx push dx push si push di mov ax,[bp+10] ; resgata os valores das coordenadas mov bx,[bp+8] ; resgata os valores das coordenadas mov cx,[bp+6] ; resgata os valores das coordenadas mov dx,[bp+4] ; resgata os valores das coordenadas -10-
  • 11. D:UFESMICRO_IGRAFICA.ASM segunda-feira, 26 de outubro de 2009 13:35 cmp ax,cx je line2 jb line1 xchg ax,cx xchg bx,dx jmp line1 line2: ; deltax=0 cmp bx,dx ;subtrai dx de bx jb line3 xchg bx,dx ;troca os valores de bx e dx entre eles line3: ; dx > bx push ax push bx call plot_xy cmp bx,dx jne line31 jmp fim_line line31: inc bx jmp line3 ;deltax <>0 line1: ; comparar módulos de deltax e deltay sabendo que cx>ax ; cx > ax push cx sub cx,ax mov [deltax],cx pop cx push dx sub dx,bx ja line32 neg dx line32: mov [deltay],dx pop dx push ax mov ax,[deltax] cmp ax,[deltay] pop ax jb line5 ; cx > ax e deltax>deltay push cx sub cx,ax mov [deltax],cx pop cx push dx sub dx,bx mov [deltay],dx pop dx mov si,ax line4: push ax -11-
  • 12. D:UFESMICRO_IGRAFICA.ASM segunda-feira, 26 de outubro de 2009 13:35 push dx push si sub si,ax ;(x-x1) mov ax,[deltay] imul si mov si,[deltax] ;arredondar shr si,1 ; se numerador (DX)>0 soma se <0 subtrai cmp dx,0 jl ar1 add ax,si adc dx,0 jmp arc1 ar1: sub ax,si sbb dx,0 arc1: idiv word [deltax] add ax,bx pop si push si push ax call plot_xy pop dx pop ax cmp si,cx je fim_line inc si jmp line4 line5: cmp bx,dx jb line7 xchg ax,cx xchg bx,dx line7: push cx sub cx,ax mov [deltax],cx pop cx push dx sub dx,bx mov [deltay],dx pop dx mov si,bx line6: push dx push si push ax sub si,bx ;(y-y1) mov ax,[deltax] imul si mov si,[deltay] ;arredondar -12-
  • 13. D:UFESMICRO_IGRAFICA.ASM segunda-feira, 26 de outubro de 2009 13:35 shr si,1 ; se numerador (DX)>0 soma se <0 subtrai cmp dx,0 jl ar2 add ax,si adc dx,0 jmp arc2 ar2: sub ax,si sbb dx,0 arc2: idiv word [deltay] mov di,ax pop ax add di,ax pop si push di push si call plot_xy pop dx cmp si,dx je fim_line inc si jmp line6 fim_line: pop di pop si pop dx pop cx pop bx pop ax popf pop bp ret 8 ;******************************************************************* segment data cor db branco_intenso ; I R G B COR ; 0 0 0 0 preto ; 0 0 0 1 azul ; 0 0 1 0 verde ; 0 0 1 1 cyan ; 0 1 0 0 vermelho ; 0 1 0 1 magenta ; 0 1 1 0 marrom ; 0 1 1 1 branco ; 1 0 0 0 cinza ; 1 0 0 1 azul claro ; 1 0 1 0 verde claro ; 1 0 1 1 cyan claro ; 1 1 0 0 rosa ; 1 1 0 1 magenta claro -13-
  • 14. D:UFESMICRO_IGRAFICA.ASM segunda-feira, 26 de outubro de 2009 13:35 ; 1 1 1 0 amarelo ; 1 1 1 1 branco intenso preto equ 0 azul equ 1 verde equ 2 cyan equ 3 vermelho equ 4 magenta equ 5 marrom equ 6 branco equ 7 cinza equ 8 azul_claro equ 9 verde_claro equ 10 cyan_claro equ 11 rosa equ 12 magenta_claro equ 13 amarelo equ 14 branco_intenso equ 15 modo_anterior db 0 linha dw 0 coluna dw 0 deltax dw 0 deltay dw 0 mens db 'Funcao Grafica' ;************************************************************************* segment stack stack resb 512 stacktop: -14-