Pagina 4 di 4 primaprima ... 2 3 4
Visualizzazione dei risultati da 31 a 38 su 38
  1. #31
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    34
    Si era proprio quello il problema. E come pensavo posso far a meno degli Extended Registers. Adesso

    seguenza tra 0 e 64000 = 52480

    Grazie mille oregon davvero grazie. Ora mi tocca l'ultima tesina e di sicuro incapperò in altre problematiche ma gia con questa ho imparato molto. Cmq non escludo la possibilità di aprire altri post. Grazi ancora

  2. #32
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    34
    Salve. Ho riscritto la procedura STAMPA_NUMERO per stampare i caratteri colorati utlizzando la fuzione BIOS 09H. L'ho fatto solo con lo scopo di toccare qualcosa di nuovo. Quindi non è necessario che alla fine sia così. Credevo che la cosa fosse semplice eppure ,con mia sorpresa, il risultato viene alterato. Precisamente il risultato viene al contrario. Cambia la divisione che viene fatta nella procedura STAMPA_RIS. Come mai? Quale è in questo caso il nesso tra la procedura di stampa e la divisione che fatta precedentemente? Scrivo solamente il codice di STAMPA_NUMERO perché è solo solo quello che ho modificato. Grazie.

    codice:
    STAMPA_NUMERO     PROC  NEAR
    
    MOV   BL,0EH     ;metto il codice colore in BL
    ADD   AL,'0'        ;La base da cui partire e' '0'
    MOV   AH,09H	;Servizio BIOS
    INT   10H
    RET                   ;Ritorno alla procedura chiamante
    
    STAMPA_NUMERO     ENDP

  3. #33
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Andiamoci per logica ...

    1) cosa hai modificato ?

    2) hai impostato un nuovo registro ?

    3) il nuovo registro che hai utilizzato, lo usa la divisione ?

    4) e se pensassi di salvare il suo valore nello stack ?

    PUSH BX
    ...
    POP BX
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #34
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    34
    Ciao ho ricontrollato tramite debug. Ho detto una sciocchezza. La divisione viene fatta bene.
    E anche a SPAMPA_NUMERO i numeri da stampare sono passati nell'ordine giusto. E' come se li stampasse da destra verso sinistra . Lo stato di BX viene salvato nella seguente procedura e all'atto della stampa (mi sono detto) lo posso modificare senza problemi perché tanto la divisione è stata fatta...giusto? Quindi (ho sempre pensato), utilizzo la funzione che gestisce i colori di stampa, vedo i registri di cui ha bisogno, gli dico di che colore voglio il testo e basta. Mi sembrava semplice. Invece qualcosa non torna.

    codice:
    STAMPA_RIS        PROC  NEAR
                      PUSH  AX
                      MOV   DX,OFFSET RIS
                      CALL  STAMPA_STRINGA
                      POP   AX
    
                      PUSH  BX
                      MOV   BX,10         ;imposto il divisore
                      XOR   CX,CX         ;azzero il registro per il contatore delle cifre
    
                      MOV   AX,SEQUENZA   ;metto in AX il numero da stampare
    STAMPA_RIS_1:     XOR   DX,DX         ;azzero il registro per il dividendo
                      DIV   BX            ;divido per il divisore
                      PUSH  DX            ;salvo il resto nello stack
                      INC   CX            ;incremento il contatore delle cifre
                      CMP   AX,0000H      ;devo ripetere?
                      JNE   STAMPA_RIS_1  ;si se AX non è nullo
    
    STAMPA_RIS_2:     POP  AX               ;prelevo i numeri da stampare
                      CALL STAMPA_NUMERO    ;stampo
                      LOOP STAMPA_RIS_2   ;ripeto
                      POP  BX
                      RET
    STAMPA_RIS        ENDP

  5. #35
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Scusa ... questa

    codice:
    STAMPA_NUMERO     PROC  NEAR
    
    MOV   BL,0EH     ;metto il codice colore in BL
    ADD   AL,'0'        ;La base da cui partire e' '0'
    MOV   AH,09H	;Servizio BIOS
    INT   10H
    RET                   ;Ritorno alla procedura chiamante
    
    STAMPA_NUMERO     ENDP
    prima di aggiungere

    MOV BL,0EH ;metto il codice colore in BL

    funzionava?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #36
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    34
    Dopo che mi hai detto di sosituitre in CONTROLLO

    JB A_MAGGIORE

    con

    JA A_MAGGIORE

    il programma andava benissimo. Poi ho voluto stampare il risultato in modo colorato e in STAMPA_STRINGA ho fatto due sole modifiche: ho aggiunto

    MOV BL,0EH ;metto il codice colore in BL

    e modificato

    MOV AH,0EH

    in

    MOV AH,09H

    Adesso ad esempio stampa:

    sequenza tra 0 e 64000 = 08425 (in giallo) quando dovrebbe stampare 52480. Come si vede il risultato è al contrario. Ma ripeto, l'ho fatto solo per imparare qualcosa di nuovo ma non va.

  7. #37
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Il problema è che il servizio AH=0EH modifica la posizione del cursore mentre il servizio AH=09H non lo fa e quindi devi intervenire tu.

    Lo fai con

    codice:
    STAMPA_NUMERO     PROC  NEAR
       PUSH CX
       PUSH DX
       MOV CX,1
       MOV BX,000EH
       ADD AL,'0'
       MOV AH,09H
       INT BIOS_VIDEO
       MOV AH,3
       INT BIOS_VIDEO
       INC DL
       MOV AH,2
       INT BIOS_VIDEO
       POP DX
       POP CX
       RET
    STAMPA_NUMERO     ENDP
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #38
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    34
    Così funziona grazie mille. Studierò il codice che hai scritto per capire che cosa fa di preciso. Stasera ho imparato un'altra cosa

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.