Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Assembly: Kolmiot (assembly)

Sivun loppuun

timok16 [26.11.2005 22:25:50]

#

moi,
voiko grafiikkatilassa tehdä sellaisen toimenpiteen, kuin tulostaa näytölle aina uuden esim. kolmion näppäimen painalluksesta?

grafiikkatila:
                mov ah,0        ;vaihdetaan näyttötila
                mov al,13
                int 10h

tarkoitus olis tehdä aina uusi kolmio, kun painaa näppäintä.

Metabolix [26.11.2005 22:29:27]

#

On mahdollista. Koodivinkeistä löytyy näppäimistöhandleri (C-vinkeistä, mutta asmilla tehtynä).

timok16 [26.11.2005 22:33:14]

#

tiedän että painamalla "alt ja enter" päästään takas dos näyttöön. eli oli taas kiva vstaus, siis tehän olette oikeita neroja, kun olette vielä niin avuliaitakin????

Antti Laaksonen [26.11.2005 22:37:13]

#

Ohjelman runkona voisi olla silmukka, jossa odotetaan näppäimenpainallusta ja piirretään kolmio. Mihin kohtaan tarvitset neuvoa?

timok16 [26.11.2005 22:56:04]

#

ensin mulla tulee kolmio ja sen jälkeen pitäis painaa nappia, jonka jälkeen tulostuu toinen kolmio näytölle.
eli siihen, että kuinka pääsen takas dos ikkunaan, vai pitääkö päästä ollenkaan grafiikkatilasta?

Metabolix [26.11.2005 23:10:28]

#

Ikkunalla ei ole mitään tekemistä DOSin kanssa. Jos nyt tekstitilaa tarkoitat, niin katso oppaasta DOSin näyttötilat. Se on sitten Windowsin asia, näkyykö se ikkunana vai koko ruudulla.

timok16 [26.11.2005 23:20:28]

#

mulla on näin:

                mov ah,0        ;vaihdetaan näyttötila
                mov al,2        ;tekstitila
                int 10h

mut ei mee tohon tekstitilaan, vaan pitää poistua alt enter näppäimillä.
esim.

                mov ah,0        ;vaihdetaan näyttötila
                mov al,13
                int 10h
;**************************************************************

                mov dx,100      ;rivi
                mov cx,25       ;pituus

alku2:          mov ah,12       ;piirrä piste
                mov al,2        ;väri
                push cx         ;pinoon talteen cx:ään
                add cx,125      ;sarake, lisää cx:ään arvon
                int 10h
                pop cx          ;pinosta
                dec dx          ;vähennä dx riviä yhdellä
                loop alku2

;*******************************************************************
                mov ah,0        ;vaihdetaan näyttötila
                mov al,7        ;tekstitila
                int 10h

ja nyt kun piirretty eka viiva, niin pitäis päästä piirtämään toinenkin viiva, kun painaa näppäintä. Mut en pääse graf.tilasta pois kuin "alt enter" painalluksella

Metabolix [27.11.2005 01:17:54]

#

Mahtavaa. Tuo koodi jumitti koneen mustaan ruutuun ja jouduin turvautumaan virtanappiin viimeisenä keinona.

Ensinnäkin, mikä tahansa tekstitila ei kelpaa. Tuolla 7. tilalla lopputuloksena oli tummansinistä tekstiä ainakin DOSboxissa... Toiseksikin, tuosta ohjelmasta puuttuu normaali lopetuskäsky int 20h. (Kolmanneksi, loop-komento on kuulemma "toivottoman hidas", ja neljänneksi, kooditageja suosittelen.)

Teinpä nyt tällaisen (NASMilla kääntyy ja DOSboxilla pelittää):

;**********************************************************
; Haetaan vanha tila al:ään
mov ah, 0fh
int 10h

; Nollataan ah tilanvaihtokutsua varten
xor ah, ah

; Säilötään alkutilan palautukseen tarvittava ax
push ax

; Siirrytään tilaan 13h
mov al, 13h
int 10h

; es-rekisteriin näyttömuistin alku
mov ax, 0A000h
mov es, ax

;**********************************************************
; Piirretään pisteitä:

mov cl, 31 ; väri
mov bx, 62 ; x-sijainti
mov ax, 14 ; y-sijainti

mov ch, 40 ; pisteiden määrä

silmukka:
  push ax ; Säilöön, kun kohta sillä säädetään

  ; Lasketaan oikea paikka noista
  mul 320 ; ax * 320 ; tämä käyttää dx:nkin
  add ax, bx

  ; Piirretään
  mov di, ax
  mov [es:di], cl

  ; Uusi sijainti ja väri
  pop ax
  inc ax
  inc bx
  inc cl

  ; Silmukka, kunnes ch = 0
  dec ch
  jnz silmukka

;**********************************************************
; Odotetaan nappia
xor ax, ax
int 16h

; Palautetaan alkutila
pop ax
int 10h

; Lopetetaan
int 20h

timok16 [27.11.2005 08:18:23]

#

kiitoksia avusta, nyt toimii, jouduin kuitenkin hiukka soveltamaan koodia, valitti muutamasta kohdasta.
Ei tykännyt tosta mov [es:di], cl ja tosta mul 320 ; ax * 320 ; tämä käyttää dx:nkin. Mut kolmion saa piirrettyä painamalla nappia. Onko kolmion piirtäminen mahdollista tehdä vain viivoilla? Ja kuinka saisin niitä tulemaan satunnaisiin paikkoihin näytöllä napin painalluksen jälkeen?
Käännän MASM32 editirilla ja käytän Tasm5:ta


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta