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 startAihe on jo aika vanha, joten et voi enää vastata siihen.