Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di Iena87
    Registrato dal
    Dec 2003
    Messaggi
    429

    [ASM] INT 21h Funzione 0Ah...le stringhe...

    La funzione 0Ah dell'INT 21h mi divrebbe permettere di inserire una stringa finchè non premo INVIO...io invece premo INVIO e il programma, magicamente, arriva alla sua conclusione come nn lo so.
    Questo è il listato:

    codice:
    dosseg
    .model small
    .stack 64
    .data
    
    STR1          DB    10 DUP (?)
    STR2          DB    10 DUP (?)
    INS_STR1      DB    'Inserisci la prima stringa di 8 caratteri ','$'
    INS_STR2      DB    10,13,'Inserisci la seconda stringa di 8 caratteri ','$'
    MESSAGE1      DB    10,13,'le stringhe sono uguali','$'
    MESSAGE2      DB    10,13,'le stinghe non sono uguali','$'
    
    .code
    main  proc  far
                mov ax,@data
                mov ds,ax
                mov es,ax
    
                ;***INSERIMENTO STRINGHE***
                mov ah,09h
                mov dx,offset INS_STR1
                int 21h
                mov dx,offset STR1
                mov ah,0Ah
                int 21h
                mov ah,09h
                mov dx,offset INS_STR2
                int 21h
                mov dx,offset STR2
                mov ah,0ah
                int 21h
     
                cld
                mov si,offset STR1+2
                mov di,offset STR2+2
                mov cx,08h
                repe cmpsb
                je   passe
                mov  dx,offset message2
                jmp  affichage
    passe:      mov  dx,offset message1
    affichage:  mov  ah,09h
                int  21h
                mov ax,4c00h
                int 21h
    main        endp
                end   main
    In rosso dove dovrebbe essere fatta la correzione...però ho notato che se tolgo l'istruzione mov dx,offset STR1 il programma mi permette di inserire la stringa, ma poi me la mette nella posizione sbagliata...

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    59
    Io non sono in grado di aiutarti. Ma tempo fa sono incappato nel link http://www.alessioluffarelli.it/assembler_io.htm. In fondo alla pagina c'è una libreria di macro in assembler per l'I/O in varie forme. Ho provato tale liberia e sembra funzionare infatti la sto usando per i miei progettini. Spero sia utile anche a te. Ciao.

  3. #3
    Utente di HTML.it L'avatar di cso
    Registrato dal
    Aug 2004
    Messaggi
    2,050
    Mi risulta che la funzione 0Ah INT 21h stampa a video e non legge niente.

  4. #4
    Utente di HTML.it L'avatar di Iena87
    Registrato dal
    Dec 2003
    Messaggi
    429
    Originariamente inviato da cso
    Mi risulta che la funzione 0Ah INT 21h stampa a video e non legge niente.
    no no serve per inserire una stringa...anche la norton guide lo dice

  5. #5
    Utente di HTML.it L'avatar di cso
    Registrato dal
    Aug 2004
    Messaggi
    2,050
    Scusate se risollevo un "vecchio" thread ma sono stato via per un po' di tempo.

    allora prova questo codice:
    codice:
    dosseg
    .model small
    .stack 64
    .data
    
    STR1          DB 2D,'12'
    STR2          DB 2D,'12'
    INS_STR1      DB    'Inserisci la prima stringa di 8 caratteri ','$'
    INS_STR2      DB    10,13,'Inserisci la seconda stringa di 8 caratteri ','$'
    MESSAGE1      DB    10,13,'le stringhe sono uguali','$'
    MESSAGE2      DB    10,13,'le stinghe non sono uguali','$'
    
    .code
    main  proc  far
                mov ax,@data
                mov ds,ax
                mov es,ax
    
                ;***INSERIMENTO STRINGHE***
                mov ah,09h
                mov dx,offset INS_STR1
                int 21h
                mov dx,offset STR1
                mov ah,0Ah
                int 21h
                mov ah,09h
                mov dx,offset INS_STR2
                int 21h
                mov dx,offset STR2
                mov ah,0ah
                int 21h
    
                cld
                mov si,offset STR1+2
                mov di,offset STR2+2
                mov cx,08h
                repe cmpsb
                je   passe
                mov  dx,offset message2
                jmp  affichage
    passe:      mov  dx,offset message1
    affichage:  mov  ah,09h
                int  21h
                mov ax,4c00h
                int 21h
    main        endp
                end   main

  6. #6
    Solo per fissare le idee:
    La funzione 0AH dell'INT 21H ("Ingresso dati bufferizzato") consente l'acquisizione di una stringa di caratteri da tastiera, la cui lunghezza massima è memorizzata nel primo byte di un BUFFER appositamente riservato; tali caratteri (compreso il <CR>=0DH=<INVIO>, con cui l'utente conferma la fine della stringa digitata sulla tastiera) sono collocati nel BUFFER a partire dal terzo byte , mentre è il DOS medesimo a provvedere a scrivere nel secondo byte il numero di caratteri effettivamente introdotti; i caratteri immessi nel buffer sono proposti contemporaneamente a video.

    La struttura del Buffer deve dunque essere questa:
    codice:
    BUFFER  LABEL BYTE            ;La Direttiva LABEL associa all'etichetta BUFFER
                                  ;l'indirizzo corrente  nell'area  destinata alla
                                  ;acquisizione  di stringhe da tastiera assicura-
                                  ;ta dalla  funzione 0AH dell'INT 21H; tale indi-
                                  ;rizzo coincide con quello di MAX_LEN
    MAX_LEN DB Quanti-1           ;BUFFER+00H - Numero massimo  di  caratteri pre-
                                  ;visto  per la stringa in ingresso  da tastiera:
                                  ;la procedura di acquisizione consente perci• di
                                  ;acquisire [Quanti-1] (cioŠ [Quanti] caratteri
                                  ;effettivi pi— il <CR> con cui l'utente conferma
                                  ;la fine della stringa digitata sulla  tastiera,
                                  ;aggiunto "d'ufficio" alla stringa dalla funzio-
                                  ;stessa
    STR_LEN DB 00H                ;BUFFER+01H - Numero di caratteri  effettivamen-
                                  ;te  introdotti  da tastiera  (il carattere <CR>
                                  ;0DH,  pur presente nel BUFFER, non viene inclu-
                                  ;so nel conteggio dei caratteri  che  il DOS re-
                                  ;stituisce  in questo byte)
    STRINGA DB STR_LEN-2 DUP (' ');BUFFER+02H - In questa zona  viene collocata la
                                  ;stringa  digitata  dall'utente  sulla  tastiera
                                  ;(compreso, come detto, il <CR> (0DH) con cui la
                                  ;stringa viene introdotta)
            DB 0DH                ;Se la  stringa digitata  dall'utente ha la lun-
                                  ;ghezza  massima prevista [Quanti] l'<ENTER> con
                                  ;cui l'utente la conferma produce  la  scrittura
                                  ;di un <CR> (0DH) in questa posizione; nel  caso
                                  ;di stringa di dimensione inferiore  esso  viene
                                  ;comunque  preparato  nella  posizione adatta  a
                                  ;chiudere correttamente la stringa
            DB 0AH                ;Al contenuto del RECORD viene aggiunto anche il
                                  ;carattere <LF>;  ci•  consente  di analizzare e
                                  ;riutilizzare ("vedere") la  stringa  creata  da
                                  ;questa funzione
    codice:
                                    Giobe®2000 - Tutto sull'Assembly   - Lezioni, programmi, segreti, trucchi

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    286
    ...fortunatamente passavo di qui per vedere se qualcuno parlava dell'assambler; c'è sempre da imparare!
    A breve potrei proporre un mio problema sulla lettura del contunuto di un file, sempre che non riesca a risolverlo prima (ci stò studiando sopra).
    Colgo intanto l'occasione per salutare l'immancabile cso e l'autorevole Giobe.

  8. #8
    Ricambio il saluto e ringrazio per la stima..
    In cambio ti lascio una piccola strenna , il programma "Min_Mai ", che apre un esistente file di testo e provvede a trasformare da minuscolo in maiuscolo il suo contenuto , salvando i risultati in un secondo file, "XXX.TXT", appositamente creato)
    codice:
                          Giobe®2000 - Tutto sull'Assembly    - Lezioni, programmi, segreti, trucchi

  9. #9
    Utente di HTML.it L'avatar di cso
    Registrato dal
    Aug 2004
    Messaggi
    2,050
    Grazie per il complimento.
    Ho ancora molto da imparare sull'Assembly (lo studio solo da 2 anni) e certe volte capita che scrivo stupidaggini un po' per la mancanza di info serie su questo argomento un po' perchè tutti ne parlano ma nessuno lo sa come dovrebbe (ad eccezione di www.giobe2000.it).

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    286
    ...beh, i cultori dei segreti intimi del pc sono pochi, i più preferiscono viaggiare ad alto livello per avere alla mano funzioni complesse preconfezionate che permettono di sviluppare velocemente applicativi molto complessi. L'assembler è veramente un bel rebus, ma ti permette di gestire l'ardware direttamente senza dover passare per i passaparola tra BIOS - sistema operativo - funzioni dei complilatori ad altolivello... - driver - librerie del sistema e automatismi vari.

    Io ho risolto il mio problema della lettura del contenuto di un file grazie anche all'esempio min-man offertomi poco sopra da Giobe.

    Ora ho un'altro problema, debbo informare il processore della dimensione in byte di un packed pixel (una stringa), il problema è che la dimensione è 800x600x3 = 1.440.000 byte

    dunque non posso scrivere:

    mov cx, 1440000

    perchè sono fuori dalla portata del registro. Sgrunt!

    Ora ci sto studiando sopra. se hai una indicazione sarà ben accetta, anche perché probabilmente si tratta di una banalità. (io studio l'asm da soli quattro mesi! )

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 © 2025 vBulletin Solutions, Inc. All rights reserved.