moi,
Missäpäin on joku törmäys koodissani, kun tulee DOS beep ajaessa sitä. Ohjelma kyllä toimii, mut kun tulee ylimääräinen beep.
.MODEL small .STACK 200h .DATA rivi dw 00 pituus dw 00 vari db 0 sarake dw 00 alkaa DB "paina valilyontia, tulee kolmio",13,10,'$' et DB "et painannut valilyontia!, paina uudestaan",13,10,'$' poistu DB "lopetus!!! paina 'alt+enter'",13,10,'$' lopetus DB "ohjelma loppui!!! paina jotain nappia",13,10,'$' .CODE start: mov ax,@data mov ds,ax ; tähän ohjelma CALL KYSELY ;kutsutaan kysely aliohjelmaa ;************************************************************************* ; 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 ;*********************************************************** ;EKA KOLMIO mov rivi,100 mov pituus,25 mov vari,3 mov sarake,125 CALL SIVU ;kutsutaan aliohjelmaa, joka piirtää kolmion vasemman sivun ;************************************************************ mov rivi,125 mov pituus,25 mov vari,3 mov sarake,150 CALL SIVU2 ;kutsutaan aliohjelmaa, joka piirtää kolmion oikean sivun ;************************************************************ mov rivi,125 mov pituus,49 mov vari,3 mov sarake,125 CALL SIVU3 ;kutsutaan aliohjelmaa, joka piirtää kolmion vaakasuoran osan ;************************************************************** ;CALL KYSELY KYSY2: mov ah,9 mov dx,OFFSET alkaa ;tekstiä näytölle int 21h mov ah,2 ;tulostetaan teksi näytölle int 21h mov ah,7 ;odotetaan merkkiä int 21h mov dl,al ;tulostetaan näytölle cmp dl,' ' je JATKA2 ;jos välilyönti-->JATKA mov ah,2 int 21h mov ah,9 mov dx,OFFSET et ;tekstiä näytölle int 21h mov ah,2 ;tulostetaan teksi näytölle int 21h jmp KYSY2 ;väärä merkki-->KYSY uudestaan JATKA2: ;************************************************************** ;TOKA KOLMIO mov rivi,50 mov pituus,25 mov vari,2 mov sarake,50 CALL SIVU ;************************************************************** mov rivi,75 mov pituus,25 mov vari,2 mov sarake,75 CALL SIVU2 ;************************************************************** mov rivi,75 mov pituus,49 mov vari,2 mov sarake,50 CALL SIVU3 ;************************************************************** ;Odotetaan nappia xor ax, ax int 16h ;************************************************************** ;KOLMAS KOLMIO JATKA3: mov rivi,50 mov pituus,25 mov vari,4 mov sarake,190 CALL SIVU ;************************************************************** mov rivi,75 mov pituus,25 mov vari,4 mov sarake,215 CALL SIVU2 ;************************************************************** mov rivi,75 mov pituus,49 mov vari,4 mov sarake,190 CALL SIVU3 ;*************************************************************** ;Odotetaan nappia xor ax, ax int 16h ;*************************************************************************** mov ah,9 mov dx,OFFSET lopetus ;tekstiä näytölle int 21h mov ah,2 ;tulostetaan teksi näytölle int 21h ;******************************************************************** ;PIIRRETÄÄN NELIÖ KOLMIOIDEN YMPÄRILLE ;PIIRRETÄÄN NELIÖ(VASEN REUNA) mov dx,180 ; "loppu"rivi mov cx,121 ; pituus mov al,5 alku24: push cx ; cx talteen pinoon mov ah,12 ; piirrä mov cx,45 ; mov cx,sarake int 10h dec dx inc al pop cx ; cx pinosta loop alku24 ;******************************************************************** ;PIIRRETÄÄN NELIÖ(OIKEA REUNA) mov dx,180 ; "loppu"rivi mov cx,121 ; pituus mov al,5 alku25: push cx ; cx talteen pinoon mov ah,12 ; piirrä mov cx,250 ; mov cx,sarake int 10h dec dx inc al pop cx ; cx pinosta loop alku25 ;******************************************************************** ;PIIRRETÄÄN NELIÖ(YLIN VIIVA) mov dx,40 ;rivi mov cx,205 ;pituus mov al,5 ;väri alku22: mov ah,12 ;piirrä piste mov dx,40 ;rivi push cx ;talteen add cx,45 ;summaa vakio cx:ään int 10h pop cx dec dx inc al loop alku22 ;käyttää cx:ää (cx--, lopetus jos cx=0) ;********************************************************************* ;PIIRRETÄÄN NELIÖ(ALIN VIIVA) mov dx,180 ;rivi mov cx,205 ;pituus mov al,5 ;väri alku23: mov ah,12 ;piirrä piste mov dx,180 ;rivi push cx ;talteen add cx,45 ;summaa vakio cx:ään int 10h pop cx dec dx inc al loop alku23 ;käyttää cx:ää (cx--, lopetus jos cx=0) ;**************************************************************************** ;Odotetaan nappia xor ax, ax int 16h ;Palautetaan alkutila mov ah,0 mov al,3 int 10h mov ah,9 mov dx,OFFSET poistu ;tekstiä näytölle int 21h mov ah,2 ;tulostetaan teksi näytölle int 21h ; Lopetetaan mov ah,4ch int 21h ;************************************************************* ; PIIRRETÄÄN KOLMION VASEN SIVU SIVU PROC near mov dx,rivi ;rivi mov cx,pituus ;pituus alku2: mov ah,12 ;piirrä piste mov al,vari ;väri push cx ;pinoon talteen cx:ään add cx,sarake ;sarake, lisää cx:ään arvon int 10h pop cx ;pinosta inc dx ;vähennä dx riviä yhdellä loop alku2 ret SIVU ENDP ;***************************************************************** ; PIIRRETÄÄN KOLMION OIKEA SIVU SIVU2 PROC near mov dx,rivi ;rivi mov cx,pituus ;pituus alku3: mov ah,12 ;piirrä piste mov al,vari ;väri push cx ;pinoon talteen cx:ään add cx,sarake ;sarake, lisää cx:ään arvon int 10h pop cx ;pinosta dec dx ;vähennä dx riviä yhdellä loop alku3 ret SIVU2 ENDP ;******************************************************************* ; PIIRRETÄÄN KOLMION 3. SIVU (VAAKASUORA) OIKEALTA VASEMMALLE SIVU3 PROC near mov dx,rivi ;rivi mov cx,pituus ;pituus alku4: mov ah,12 ;piirrä piste mov dx,rivi ;rivi push cx ;talteen add cx,sarake ;summaa vakio cx:ään mov al,vari ;väri (xxxxhRGBb) int 10h pop cx dec dx loop alku4 ;käyttää cx:ää (cx--, lopetus jos cx=0) ret SIVU3 ENDP ;************************************************************************ KYSELY PROC near KYSY: mov ah,9 mov dx,OFFSET alkaa ;tekstiä näytölle int 21h mov ah,2 ;tulostetaan teksi näytölle int 21h mov ah,7 ;odotetaan merkkiä int 21h mov dl,al ;tulostetaan näytölle cmp dl,' ' je JATKA ;jos välilyönti-->JATKA mov ah,2 int 21h mov ah,9 mov dx,OFFSET et ;tekstiä näytölle int 21h mov ah,2 ;tulostetaan teksi näytölle int 21h jmp KYSY ;väärä merkki-->KYSY uudestaan JATKA: ret KYSELY ENDP end start
Aihe on jo aika vanha, joten et voi enää vastata siihen.