STUDENTE DI ING INFORMATICA IN CERCA DI AIUTOOOO

di il
1 risposte

STUDENTE DI ING INFORMATICA IN CERCA DI AIUTOOOO

VI PREGO A VUOI TUTTI AIUTATEMIIIIIIIIIII HO UN PROGGETTO IN ASSEMBY 80XX LO STUDIO DA GIORNI MA A DIFFERENZA DI ALTRI LINGUAGGI NON RIESCO A COMBINARE NULLA. DEVO CREARE UN TRIANGOLO AL CENTRO E DUE COMANDI CON UNO FACCIO UNO ZOOM DEL TRIANGOLO CON L'ALTRO LO RIMPICCIOLISCO. HO PROVATO A CREARE UN TRIANGOLO RETTANGOLO CH'E' A PARER MIO IL + SEMPLICE DA CREARE MA HO UN PROBLEMA NEL GESTIRE LE STRINGHE , PER PIETA' + CHE PER FAVORE AIUTOOOOOOOOOOOOOOO HO UN 24 DA VERBALIZZARE DELLA TEORIA CHE VALE 2/3 DELL'ESAME E QUESTO PROGGETTO CHE MI BLOCCA

1 Risposte

  • Re: STUDENTE DI ING INFORMATICA IN CERCA DI AIUTOOOO

    HO STUDIATO UN PAIO DI MANUALI E MI SONO RISPOSTO DA ME GRAZIE UGUALMENTE


    PER CHI DOVESSE TROVARSI NELLE MIE STESSE CIRCOSTANZE
    ASPETTATE UN Pò NON L'HO NCORA CONSEGNATOO




    ;definizione costanti
    PAGINA EQU 00h
    ;
    BIOS_VIDEO EQU 10H
    SET_VIDEO_MODE EQU 00h
    MODO_TESTO EQU 03H
    ;
    SET_CURSOR EQU 02h
    W_CHR_TTY EQU 0Eh
    ;
    DOS EQU 21H
    PRINT_STRING EQU 09H





    DSEG SEGMENT PARA PUBLIC 'DATA'


    BASE DB 3
    R DB 15
    C DB 40




    SI_NO DB ' VUOI FARE LO ZOOM? (U=ESC) [S/N]: $'
    LIMITE DB ' NON POSSO RIDURRE NOTEVOLMENTE $'

    DSEG ENDS






    STACKM SEGMENT PARA STACK 'STACK'
    DB 64 DUP('12345678')
    STACKM ENDS

    ASSUME CS:CSEG,DS:DSEG,SS:STACKM
    CSEG SEGMENT PARA PUBLIC 'CODE'



    ;------------------------MAIN---------------------------------------;


    MAIN PROC FAR

    PUSH DS
    MOV AX,00h
    PUSH AX

    MOV AX,DSEG ;INIZIALIZZAZIONE SEGMENTO DATI
    MOV DS,AX ;TRAMITE IL REGISTRO AX.
    MOV AH,SET_VIDEO_MODE ;SERVIZIO BIOS 'SET VIDEO MODE':
    MOV AL,MODO_TESTO ;MODO TESTO 80X25, COLORI
    INT BIOS_VIDEO ;


    CALL TRIANGOLO


    ESCI:

    RET



    MAIN ENDP



    ;----------------------PROCEDURE-------------------------------------------;



    ;--------------------------------------------------------------------------;
    ; Procedura oper stampare una stringa ;
    ; ;
    ;PARAMETRI: l'indirizzo della stringa e' memorizzato in DS:DX ;
    ;REGISTRI UTILIZZATI:AH,DX ;
    ;--------------------------------------------------------------------------;



    STAMPA_STRINGA PROC NEAR
    MOV AH,PRINT_STRING ;servizio dos 'print string';
    INT DOS ;la stringa Š puntata da DS:DX
    RET

    STAMPA_STRINGA ENDP



    ;--------------------------------------------------------------------------;
    ; procedura per spostare il cursore ;
    ;PARAMETRI: le coordinate della posizione del cursore sono memorizzate nel ;
    ; registro DX: DH riga, DL colonna. ;
    ;VARIABILI: il numero della pagina Š memorizzato in PAGINA ;
    ;REGISTRI UTILIZZATI:AH,BH ;
    ;--------------------------------------------------------------------------;




    SPOSTA_CURSORE PROC NEAR
    MOV BH, PAGINA ;pagina video attiva.
    MOV AH,SET_CURSOR ;servizio BIOS 'set Cursor Position'
    INT BIOS_VIDEO
    RET ;ritorna alla procedura chiamante
    SPOSTA_CURSORE ENDP




    ;--------------------------------------------------------------------------;
    ; PROCEDURA PER SCEGLIERE SE FARE LO ZOOM O NO ;
    ;--------------------------------------------------------------------------;






    SCELTA PROC NEAR

    MOV DX,1500h ;IMPOSTA RIGA (DH) E LA COLONNA (DL)
    CALL SPOSTA_CURSORE ;MUOVE IL CURSORE NELLA POS SCELTA


    MOV DX,OFFSET SI_NO ;SCEGLIE LA STRINGA (DS:DX)
    CALL STAMPA_STRINGA



    MOV ah,01h ;legge un car dalla tastiera
    INT 21h
    CMP al,'N' ;è = a NO ?
    JE CICLA2 ;se si ESCI
    CMP al,'n' ;è = a NO ?
    JE CICLA2
    CMP al,'S' ;è = a SI ?
    JE CICLA ;se si CICLA
    ;CMP al,'s' ;è = a SI ?
    ;JE CICLA
    CMP al,'U' ;è = a SI ?
    JE FINALE ;se si ESCI
    ;CMP al,'u'
    ;JE FINALE
    CALL TRIANGOLO
    RET ;ritorna alla procedura chiamante


    FINALE: CALL FINE
    CICLA: CALL ZOOM
    CICLA2: CALL ANZOOM

    SCELTA ENDP



    ;--------------------------------------------------------------------------;
    ; PROCEDURA DI USCITA ;
    ;--------------------------------------------------------------------------;



    FINE PROC NEAR

    CALL PULISCI
    MOV DX,0420h ;IMPOSTA RIGA (DH) E LA COLONNA (DL)
    CALL SPOSTA_CURSORE ;MUOVE IL CURSORE NELLA POS SCELTA

    INT 21h ;ritorna alla procedura chiamante
    JMP ESCI
    RET

    FINE ENDP




    ;--------------------------------------------------------------------------;
    ; PROCEDURA PER FARE LO ZOOM ;
    ;--------------------------------------------------------------------------;



    ZOOM PROC NEAR

    CALL PULISCI
    INC BASE
    DEC C
    CALL TRIANGOLO


    RET ;ritorna alla procedura chiamante
    ZOOM ENDP



    ;--------------------------------------------------------------------------;
    ; PROCEDURA PER FARE LO ANZOOM ;
    ;--------------------------------------------------------------------------;





    ANZOOM PROC NEAR

    CALL PULISCI
    DEC BASE
    CMP BASE,0
    JE OVER
    INC C
    CALL TRIANGOLO


    OVER: CALL FUORI

    RET ;ritorna alla procedura chiamante
    ANZOOM ENDP







    ;--------------------------------------------------------------------------;
    ; PROCEDURA PER PULIRE LO SCHERMO ;
    ;--------------------------------------------------------------------------;


    PULISCI PROC NEAR


    MOV ax,0600h
    MOV cx,0000h
    MOV dx,184Fh
    MOV bh,07
    INT 10h
    MOV ah,02
    MOV bh,00
    MOV dx,0000h
    INT 10h
    MOV ax,04C00h

    RET ;ritorna alla procedura chiamante
    PULISCI ENDP




    ;--------------------------------------------------------------------------;
    ; PROCEDURA PER DISEGNARE IL TRIANGOLO ;
    ;--------------------------------------------------------------------------;






    TRIANGOLO PROC NEAR

    CALL PULISCI
    MOV DH,R ; ( Riga )
    MOV DL,C ; ( Colonna )
    CALL SPOSTA_CURSORE ; Sposta cursore nella posizione scelta.
    MOV BL,BASE ; Pagina video attiva.(Riga)


    CCOL: MOV CL,PAGINA ; Pagina video attiva.(Colonna)

    CRIG: MOV AL,'*' ; Ciclo per la stampa delle righe di dimensione
    MOV AH,W_CHR_TTY ; BL che formano il triangolo.
    INT BIOS_VIDEO ;
    MOV AL,' '
    MOV AH,W_CHR_TTY
    INT BIOS_VIDEO
    INC CL ;
    CMP CL,BL ;
    JB CRIG ;

    DEC DH
    INC DL
    DEC BL ; Ciclo che mi sposta il cursore alla riga
    CALL SPOSTA_CURSORE ; superiore per stampare le BASE-righe
    ; che formano il TRIANGOLO.
    CMP BL,1 ; Se BL=1 vuol dire che sono state stampate
    JAE CCOL ; tutte le righe che formano il TRIANGOLO.
    CALL SCELTA
    RET ; Ritorno alla procedura chiamante.

    TRIANGOLO ENDP




    ;--------------------------------------------------------------------------;
    ; PROCEDURA PER USCIRE FORZATAMENTE ;
    ;--------------------------------------------------------------------------;





    FUORI PROC NEAR

    CALL PULISCI
    MOV DX,0400h ;IMPOSTA RIGA (DH) E LA COLONNA (DL)
    CALL SPOSTA_CURSORE ;MUOVE IL CURSORE NELLA POS SCELTA
    MOV DX,OFFSET LIMITE ;SCEGLIE LA STRINGA (DS:DX)
    CALL STAMPA_STRINGA







    ;INT 21h
    MOV BASE,1
    MOV R,15
    MOV C,44
    CALL TRIANGOLO


    FUORI ENDP






    CSEG ENDS
    END MAIN
Devi accedere o registrarti per scrivere nel forum
1 risposte