Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    166

    [assembler] Questo strano dilemma

    Ciao a tutti, chiedo scusa se ho già pubblicato questo 3D in precedenza, ma non riesco più a trovarlo, nemmeno col motore di ricerca...
    Vorrei che qualcuno mi scrivesse una procedura per creare e gestire arrays o robe simili permettendo di porre al suo interno dei limiti...
    Mi spiego meglio: ecco quello che ho ideato io:

    _code segment para public 'code'
    org 100h
    inizio:jmp main

    seek_var proc near
    xor ax,ax
    mov al,dh
    add al,[xR0]
    mov bl,[YN]
    mul bl
    add al,[yR0]
    xor dh,dh
    add ax,dx
    mov bx,si
    add bx,ax
    mov si,bx
    ret
    seek_var endp


    main:
    mov ah,00
    mov al,03
    int 10h
    mov byte ptr [xR0],5
    mov byte ptr [yR0],5
    mov byte ptr [xRN],15
    mov byte ptr [yRN],15
    mov cx,1900
    mov al,32
    mov si, offset buffer
    ciclo:
    push cx
    mov [si],al
    inc si
    inc al
    cmp al,127
    jb ok
    mov al,32
    ok:
    pop cx
    loop ciclo
    mov si, offset buffer
    mov ah,00
    int 16h
    dec al,30h
    mov dh,al
    mov ah,00
    int 16h
    dec al,30h
    mov dl,al

    push dx
    call seek_var
    pop dx
    add dh,[xR0]
    add dl,[yR0]
    mov bh,00
    mov ah,02
    int 10h
    mov al,[si]
    mov cx,0001
    mov bh,00
    mov bl,04eh
    mov ah,09
    int 10h
    mov ah,00
    int 16h
    mov ah,4ch
    int 21h

    xR0 db 00
    xRN db 00
    yR0 db 00
    yRN db 00
    X0 db 00
    XN db 24
    Y0 db 00
    YN db 79
    buffer db 2000 dup(?)
    _code ends

    Questo funziona alla perfezione... (salvo un difettuccio che provvederò a eliminare...ma di mior entità...)
    Ovviamente la parte MAIN è a solo scopo di test, ....
    Vorrei sapere se esiste una codice più ottimizzato o più semplice,.....
    Ciao a tutti e grazie
    Ennio

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    166
    ok, mi focalizzerò su qualcosa di più particolare:
    se io ho
    AL=0ffh
    AH=00
    e faccio ADD AL,X <-- dove X è un numero maggiore di 0
    ottengo
    AH=00
    AL=00 (se X era 1, alrimenti AL=(X-1))
    per fare in modo che AH=1
    DEvo fare un controllo dell'overflow flag/carry flag ogni volta che faccio l'addizione???

    Es:

    mov bl,1
    xor ax,ax
    mov al,54h
    ciclo:
    add al,bl
    jnc ciclo ; oppure jno ciclo
    inc ah
    jmp ciclo

    Oviamente questo esempio è inutile! Ma è questo l'unico modo per fare ciò? Infatti ho l'esigenza di considerare AL e non AX in quanto il compilatore non mi consente di fare ADD AX,BL in quanto registri di lunghezza diversa...
    Ok, potrei fare
    xor bh,bh
    add ax,bx
    ma se al posto di bl io avessi una variabile??? Ok, potrei definire una word, ma sprecherei 1 byte... (che pignolo)...
    Comunque spero in un consiglio...
    Ennio

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    166
    Nessuno a cui piace l'assembler???
    Ennio

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    166
    Nessuno che sa darmi un consiglio o scrivermi un codice ottimizzato???
    Ennio

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    305
    per quanto riguarda la prima domanda il codice può essere ottimizzato come per cancellare (tipo il System(cls) di microsoft vc.
    di routine così ce ne sono tante......... se vuoi te ne posto qualcuna.


    per la seconda, .........

    se vuoi fare in modo che ah sia a 1, ovvero 111 che corrisponde a -1, ma potrebbe corrispondere anche a +7, questo però è importante per te cioè, è importante per il programmatore, in quanto per il computer AX=111 corrisponde indifferentemente sia a -1 che a +7, Sta al programmatore in fase di stampa, dopo conversione da binario a stringa, stampare il valore che gli interessa ovvero -1 o +7.
    Cosa vuol dire questo?
    Se vuoi che a video venga mostrato il valore -1, devi stampare il carattere - e poi visualizzi 1, per accorgerti che corrisponde ad un valore negativo devi controllare il 3 bit che appunto sia negato e valga appunto 1. Se il 3 bit è 1 e consideri in numero in complemento a 1 (ovvero -127 +127), allora satmpi il numero 7.

    Comunque sia se addizioni a 8bit cioè AL o AH il registrotrabboccherà per overfloow....... nel tuo esempio avrai non AH=01, ma un overfloow su AL(se il numero è >1)............. quindi è chearo che per avere il numero 111 devi lavorare con registri a 16bit OVVERO AX

    ciao amico

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    166
    beh, ho la necessità di lavorare esclusivamente con numeri POSITIVI, quindi non mi interessano i negativi ed i complementi...
    Il mio dubbio era sul modo migliore per verificare se un'adadizione aveva generato un overflow...
    COmunque grazie mille.
    a proposito, non trovo un comando per settare lo Zero flag o il Carry flag o l'overflow flag direttamente...
    sono costretto a fare
    Mov ah,0ffh
    inc ah
    SOLO COSI' riesco a far settare l'overflow flag...
    Credevo che i comandi fossero SZ è SNZ e via dicendo, ma il compilatore me li segnala come Unknown mnemonic....
    Ennio

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    305
    neg eax ;controlla il bit + significativo, se è 1 il numero è negativo
    ; ....ma come detto prima, potrebbe essere positivo, dipende
    ; da cosa vuoi fare tu se stampare -1 o +7

    ...
    imul ebx ; moltiplicazione
    jc overf ;se overfloow vai all'etichetta overf


    --------------------

    CLEAR_SCREEN PROC ; funziona quasi come il com CLS del DOS
    PUSH AX
    PUSH BX
    PUSH CX
    PUSH DX
    XOR AL,AL ;Cancella intera finestra
    XOR CX,CX ;L'angolo superiore sinistro è a (0,0)
    MOV DH,24 ;La riga inferiore dello schermo è la 24
    MOV DL,79 ;Il limite destro è la colonna 79
    MOV BH,7 ;Utilizza l'attributo normale per spazi
    MOV AH,6 ;Richiama la funzione SCROLL-UP
    INT 10h ;Cancella la finestra

    MOV AH,06 ; funzione SCROLL UP
    MOV AL,0 ; numero di linee 0
    MOV BH,01110000b ; attributo di riemp.
    ;MOV BH,4 ; attributo di riemp
    MOV CH,0 ; riga angolo alto sn 0
    MOV CL,0 ; col. angolo alto sn 0
    MOV DH,24 ; riga angolo basso dx 24
    MOV DL,79 ; col. angolo basso dx 79
    INT 10h ; interruzione BIOS


    POP DX
    POP CX
    POP BX
    POP AX
    RET
    CLEAR_SCREEN ENDP



    ciao
    --------------------

    OT............
    visto che ci sono............

    Sto sviluppando un motore grafico con directx8 in direct3d
    tutto procede bene, oggetti che ruotano, sfondi, sprite in movimento e finalmente il terreno.........okay

    sul mio pc dove sviluppo il gioco con vc6 ho una scheda grafica buona di acquisizione video e gli oggetti (cubi sprite ecc,ecc) si vedono bene, mentre su altri pc gli oggetti sono trasparenti quindi per questo motivo, in particolar modo il terreno, è trasparente..........
    dipenderà dalla scheda grafica?????

    Se vuoi provarlo te lo faccio scaricare, sono circa 4.5 mb
    (dovrei testarlo su altri pc)

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    166
    ok, sono disposto molto volentieri a testarlo.
    Ho 2 pc, uno con Matrox G-400, l'altro con scheda video PCI (è moooolto vecchio)...
    Conosco molte persone con G-400, Ati radeon, Ge-force 2...
    Quindi posso testarlo in lungo e in largo.
    Se vuoi dimmi da dove scaricarlo.
    Magari se usi ICQ posso scariarlo un giorno.
    Se vuoi mandami un msg in privato.
    Ciao.Grazie ancora.
    Ennio

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    305
    Il problema l'ho risolto.
    Era una funzione light();
    in cui ho duvuto disabilitare l'AlphaBlendig
    .. quindi tutto ok...

    In privato ti mando il link per scaricarlo

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.