Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    3

    [Assembler] Aiuto Esercizio

    Salve a tutti

    Volevo sapere se qualcuno poteva aiutarmi col seguente esercizio di assembler...

    visto che le mie conoscenze sono limitate :master: o deciso di postare qui per cercare aiuto


    Allora l'esercizio richiede di creare un programma (in assembler) che:

    1) Trasformi le lettere maiuscole presenti a video in minuscole

    2) Al posto dei numeri inserire il carattere *

    3) Visualizzare le lettere presenti sullo schermo in reverse di colore, ovvero se ad esempio una lettera è bianca su sfondo nero, bisogna rappresentarla nera su sfondo bianco

    4) Colorare con colori casuali (sia di sfondo che di carattere) i dittonghi(due vocali di seguito) presenti sullo schermo

    I primi due punti del programma sono riuscito a svolgerli da solo, i punti 3 e 4 però non ho idea di come poterli fare


    EXTRN getche:FAR, putch:FAR, getbyte:FAR, putbyte:FAR, randomize: FAR, rand:FAR

    ; Segmento di definizione dati

    DIM1 EQU 16
    ; Segmento Dati
    DATA SEGMENT
    VETT1 DB DIM1 DUP (?) ; vettore di 16 byte
    DATA ENDS

    ; Segmento Stack

    STACK SEGMENT STACK
    DW 128 DUP (?)
    STACK ENDS

    ; Segmento Video

    VIDEO SEGMENT at 0B800h
    DW 2000 DUP (?)
    VIDEO ENDS

    ; Segmento Programma

    CODE SEGMENT
    START PROC FAR ; la procedura principale necessariamente FAR
    ASSUME CS:CODE, DSATA, SS:STACK, ES:VIDEO

    MOV AX,DATA ; Il registro di segmento DS adesso fa riferimento
    MOV DS,AX ; alla zona dati
    MOV AX,VIDEO ; Il registro di segmento ES adesso fa riferimento
    MOV ES,AX ; alla zona video
    ;
    ; PROGRAMMA UTENTE
    XOR SI,SI
    XOR DI,DI
    XOR BX,BX
    CICLO: MOV AL,ES:[BX]
    CMP AL,'A'
    JB FORSENUM
    CMP AL,'Z'
    JA NOLETTERA
    ADD AL,'a'-'A'
    JMP NOLETTERa
    FORSENUM: CMP AL,'0'
    JB NOLETTERa
    CMP AL,'9'
    JA NOLETTERA
    MOV AL,'*'
    NOLETTERA: MOV ES:[BX],AL
    FINE: ADD BX,2
    CMP BX,4000
    JB CICLO

    MOV AH,4Ch
    INT 21h

    START ENDP
    CODE ENDS
    ;
    END START
    ; Chiusura file, richiama la procedura principale, inserire invio
    ; affinchè l'assemblatore riconosca l'ultima riga


    Volevo quindi sapere se qualcuno è in grado di modificare il programma qui sopra e ripostarlo completo x favore...

    Grazie in anticipo per qualsiasi forma di aiuto.

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296

    Moderazione

    Usa titoli più significativi in futuro, come richiesto dal Regolamento, indicando una descrizione rappresentativa del problema, oltre al linguaggio.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    3

    Re: Moderazione

    Originariamente inviato da alka
    Usa titoli più significativi in futuro, come richiesto dal Regolamento, indicando una descrizione rappresentativa del problema, oltre al linguaggio.

    Ciao!
    ok scusa... terrò a mente...

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    3
    Qualcuno conosce bene l'assembler e mi può aiutare? altrimenti qualche link utile pls...

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    305

    Re: [Assembler] Aiuto Esercizio

    Originariamente inviato da Helgast
    Salve a tutti

    Volevo sapere se qualcuno poteva aiutarmi col seguente esercizio di assembler...

    visto che le mie conoscenze sono limitate :master: o deciso di postare qui per cercare aiuto


    Allora l'esercizio richiede di creare un programma (in assembler) che:

    1) Trasformi le lettere maiuscole presenti a video in minuscole

    2) Al posto dei numeri inserire il carattere *

    3) Visualizzare le lettere presenti sullo schermo in reverse di colore, ovvero se ad esempio una lettera è bianca su sfondo nero, bisogna rappresentarla nera su sfondo bianco

    4) Colorare con colori casuali (sia di sfondo che di carattere) i dittonghi(due vocali di seguito) presenti sullo schermo

    I primi due punti del programma sono riuscito a svolgerli da solo, i punti 3 e 4 però non ho idea di come poterli fare


    EXTRN getche:FAR, putch:FAR, getbyte:FAR, putbyte:FAR, randomize: FAR, rand:FAR

    ; Segmento di definizione dati

    DIM1 EQU 16
    ; Segmento Dati
    DATA SEGMENT
    VETT1 DB DIM1 DUP (?) ; vettore di 16 byte
    DATA ENDS

    ; Segmento Stack

    STACK SEGMENT STACK
    DW 128 DUP (?)
    STACK ENDS

    ; Segmento Video

    VIDEO SEGMENT at 0B800h
    DW 2000 DUP (?)
    VIDEO ENDS

    ; Segmento Programma

    CODE SEGMENT
    START PROC FAR ; la procedura principale necessariamente FAR
    ASSUME CS:CODE, DSATA, SS:STACK, ES:VIDEO

    MOV AX,DATA ; Il registro di segmento DS adesso fa riferimento
    MOV DS,AX ; alla zona dati
    MOV AX,VIDEO ; Il registro di segmento ES adesso fa riferimento
    MOV ES,AX ; alla zona video
    ;
    ; PROGRAMMA UTENTE
    XOR SI,SI
    XOR DI,DI
    XOR BX,BX
    CICLO: MOV AL,ES:[BX]
    CMP AL,'A'
    JB FORSENUM
    CMP AL,'Z'
    JA NOLETTERA
    ADD AL,'a'-'A'
    JMP NOLETTERa
    FORSENUM: CMP AL,'0'
    JB NOLETTERa
    CMP AL,'9'
    JA NOLETTERA
    MOV AL,'*'
    NOLETTERA: MOV ES:[BX],AL
    FINE: ADD BX,2
    CMP BX,4000
    JB CICLO

    MOV AH,4Ch
    INT 21h

    START ENDP
    CODE ENDS
    ;
    END START
    ; Chiusura file, richiama la procedura principale, inserire invio
    ; affinchè l'assemblatore riconosca l'ultima riga


    Volevo quindi sapere se qualcuno è in grado di modificare il programma qui sopra e ripostarlo completo x favore...

    Grazie in anticipo per qualsiasi forma di aiuto.


    non ci penso proprio a rifartelo:

    mov ax,0B800h ; segmento del buffer del video
    mov es,ax ; mettilo in es
    xor di,di ; azzera di, ESI punta alla memoria video
    mov ah,4 ; attributo - rosso (red)
    mov al,"G" ; carattere da scrivere
    ...

    oppure a blocchetto:

    // by okay alias scancode

    .model tiny
    .code
    org 100h

    Start:

    mov Row,4 ; riga di stampa del carattere
    mov Col,5 ; colonna di stampa del carattere
    mov Char,254 ; codice ascii del carattere da visualizzare
    mov Colour,4 ; colore con cui visualizzarlo

    call PrintChar ; stampa il carattere
    mov ax,4C00h ; termina il programma
    int 21h

    PrintChar PROC NEAR

    push ax cx bx ; salva i registri che saranno cambiati

    xor bh,bh ; azzera bh - pagina video 0
    mov ah,2 ; funzione 2 - sposta il cursore
    mov dh,Row
    mov dl,Col
    int 10h ; chiamata al Bios

    mov al,Char
    mov bl,Colour
    xor bh,bh ; pagina di visualizzazione - 0
    mov ah,9 ; funzione 09h stampa carattere con attributo
    mov cx,1 ; visualizzane una sola copia
    int 10h ; chiama il servizio del Bios

    pop bx cx ax ; ripristina i registri

    ret ; riprende dal punto in cui era stata chiamata
    PrintChar ENDP

    ; variabili per memorizzare i dati

    Row db ?
    Col db ?
    Colour db ?
    Char db ?

    end Start
    Oki.lib Libreria per creare il proprio Engine del sound nei propri progetti
    http://www.twork.it/public/oki/guestbook.asp

    Sistemi di Gestione Studio e Sviluppo per giochi a pronostici
    http://www.twork.it/programmi/programmi.html

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